• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<十二>k8s基本使用入门-使用Pod

kubernetes eryajf 1年前 (2018-12-07) 1434°C 已收录 0个评论
本文预计阅读时间 15 分钟

注:此文档根据慕课网k8s视频教程学习整理而成。

1,创建一个nginx的pod。

定义了一个nginx.yaml的文件:

[root@master pod-basic]$cat pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

其中定义了版本,类型,名称,镜像,端口等等。

现在来启动它:

[root@master pod-basic]$kubectl create -f pod_nginx.yml
pod "nginx" created

简单查看一下状态:

[root@master pod-basic]$kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          25s

可以看到命名为nginx的pod起来了,1/1表示只有一个。

查看详细状态:

[root@master pod-basic]$kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP            NODE
nginx     1/1       Running   0          1m        10.244.1.18   node

又能看到pod的ip(10.244.1.18),以及所被分配到的节点(node)。

2,进入到pod。

如何进入到这个pod呢。

[root@master pod-basic]$kubectl exec -it nginx bash
root@nginx:/# ls
bin   dev  home  lib64    mnt  proc  run     srv  tmp  var
boot  etc  lib     media    opt  root  sbin  sys  usr

这样以来就直接进入到pod对应的容器里边来了,如果这个pod里边含有多个容器,那么默认是进入到第一个容器当中,如果想要进入到其他容器,那么看下命令帮助信息:

[root @ master pod-basic] $ kubectl exec --help

在容器中执行命令。

例子:

  #默认情况下,使用第一个容器从pod 123456-7890中运行'date'输出
  kubectl exec 123456-7890 date

  #从pod 123456-7890获取ruby-container中运行'date'的输出
  kubectl exec 123456-7890 -cruby-container日期

  #切换到原始终端模式,将stdin发送到pod 123456-7890的ruby-container中的'bash'
  #并将stdout / stderr从'bash'发送回客户端
  kubectl exec 123456-7890 -c ruby​​-container -i -t - bash -il

  #从pod 123456-7890的第一个容器中列出/ usr的内容,并按修改时间排序。
  #如果要在pod中执行的命令有任何共同的标志(例如-i),
  #您必须使用两个破折号( - )来分隔命令的标志/参数。
  #另请注意,不要用引号括起命令及其flags / arguments
  #除非你正常执行它(即,执行ls -t / usr,而不是“ls -t / usr”)。
  kubectl exec 123456-7890 -i -t - ls -t / usr

选项:
  -c, - container ='':容器名称。如果省略,将选择pod中的第一个容器
  -p, - pod ='':Pod名称
  -i, - stdin = false:将stdin传递给容器
  -t, - t = false:Stdin是TTY

用法:
  kubectl exec POD [-c CONTAINER] - COMMAND [args ...] [options]

使用“kubectl options”获取全局命令行选项列表(适用于所有命令)。
可以通过-c的选项进行指定。

3,查看pod详细信息。

查看pod的详细信息:

[root@master pod-basic]$kubectl describe pods nginx
Name:         nginx
Namespace:    default
Node:         node/192.168.106.5
Start Time:   Sat, 10 Nov 2018 14:40:33 +0800
Labels:       app=nginx
Annotations:  <none>
Status:       Running
IP:           `10.244.1.18`,那么我们访问一下:


Containers:
  nginx:
    Container ID:   docker://5f35902dbaaf035fa420bab8a2a409660c4ed2b2753a7d2fc298b9d7971a0d33
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:d59a1aa7866258751a261bae525a1842c7ff0662d4f34a355d5f36826abc0341
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 10 Nov 2018 14:40:55 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-rp4h8 (ro)
Conditions:
  Type           Status
  Initialized    True
  Ready          True
  PodScheduled   True
Volumes:
  default-token-rp4h8:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-rp4h8
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

4,访问pod。

现在看到这个pod在集群中的ip是10.244.1.18,那么我们访问一下:

[root@master pod-basic]$curl 10.244.1.18
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

发现在集群当中访问都是可以的,但是我们这个nginx部署之后,是想要让外部人员能够访问的,那么这个时候就要用的kubectl的port-forward了。

先看看介绍:

[root @ master pod-basic] $ kubectl port-forward --help
将一个或多个本地端口转发到pod。

使用资源类型/名称(例如deployment / mydeployment)来选择pod。如果省略,资源类型默认为“pod”。

如果有多个符合条件的广告连播,则会自动选择广告连播。转发会话结束时
选定的pod终止,并且需要重新运行该命令才能恢复转发。

例子:
  #在本地侦听端口5000和6000,将数据转发到容器中的端口5000和6000
  kubectl port-forward pod / mypod 5000 6000

  #在本地侦听端口5000和6000,将数据转发到/从端口5000和6000中选择的端口
部署
  kubectl port-forward deployment / mydeployment 5000 6000

  #在本地端口8888上侦听,在pod中转发到5000
  kubectl port-forward pod / mypod 8888:5000

  #在本地随机端口收听,转发到pod中的5000
  kubectl port-forward pod / mypod:5000

选项:
      --pod-running-timeout = 1m0s:等待至少一个的时间长度(如5s,2m或3h,大于零)
pod正在运行

用法:
  kubectl port-forward TYPE / NAME [LOCAL_PORT:] REMOTE_PORT [... [LOCAL_PORT_N:] REMOTE_PORT_N] [options]

使用“kubectl options”获取全局命令行选项列表(适用于所有命令)。

我们可以通过这个指令将pod里边的端口映射到主机上来,方法如下:

[root@master pod-basic]$kubectl port-forward nginx 8080:80
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

将pod里边的80端口映射到主机的8080端口,那么现在去访问一下看看:

[root@master ~]$curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

发现已经可以了。但是刚刚那个映射的时候,可以看到映射输出在前台不会退出,而一旦退出之后,则这个映射又消失了,怎样才能恒久的映射呢,这个后边再说。


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<十二>k8s基本使用入门-使用Pod
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!