CKA-创建及删除pod

查看有多少pod

[root@vms10 ~]# kubectl get pods
No resources found in default namespace.
[root@vms10 ~]#

当前还没有任何的pod,这里列出的是当前命名空间里的pod,如果要列出指定的命名的pod的话,需要用-n来指定命名空间,比如要列出kube-system里的命名空间,则用:

[root@vms10 ~]# kubectl get pods -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
calico-kube-controllers-675d8749dd-sq6mn   1/1     Running   0          20m
calico-node-nvj6x                          1/1     Running   0          20m
....
[root@vms10 ~]#

如果要列出所有命名空间的pod,需要加上--all-namespaces选项,比如:

[root@vms10 ~]# kubectl get pods  --all-namespaces 
NAMESPACE       NAME              READY   STATUS    RESTARTS   AGE
...输出...
kube-system  calico-kube-controllers-675d8749dd-sq6mn  1/1  Running   0 22m
kube-system  calico-node-nvj6x                        1/1   Running   0 22m
...输出...
[root@vms10 ~]#

创建pod

创建pod的时候可以直接用命令行或者yaml文件的方式,命令行的语法如下:

kubectl run 名字  --image=镜像

在这里也可以指定pod的标签,语法为

kubectl run 名字  --image=镜像 --labels=标签=值

下面创建一个名字为pod1的pod,镜像使用nginx:

[root@vms10 ~]# kubectl run pod1 --image=nginx
pod/pod1 created
[root@vms10 ~]# 

查看pod:

[root@vms10 ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1     1/1     Running     0          38s
[root@vms10 ~]#

要查看此pod运行在哪个节点上,则需要加上-o wide

[root@vms10 ~]# kubectl get pods  -o  wide
NAME   READY   STATUS   RESTARTS   AGE   IP               NODE      ..      
pod1     1/1     Running   0          59s   10.244.14.18   vms12.rhce.cc   ...
[root@vms10 ~]#

注:这里因为结果太长,只截取了部分结果。
从这里可以看到pod是在vms12.rhce.cc上运行的,pod的IP是10.244.14.18

删除pod

删除pod的语法是

kubectl delete pod 名字 --force

这里--force是可选的,不过加快删除pod的速度

[root@vms10 ~]# kubectl delete pod pod1 
pod "pod1" deleted
[root@vms10 ~]# 
[root@vms10 ~]# kubectl get pods
No resources found in  default namespace.
[root@vms10 ~]# 

生成yaml文件创建pod

更建议使用yaml的方式来创建pod,因为这样可以在yaml文件里指定各种属性,生成yaml文件的命令是:

kubectl run 名字  --image=镜像 --dry-run=client -o yaml > pod.yaml

这里--dry-run=client的意思是 模拟创建pod但并不会真的创建, -o yaml的意思是以yaml文件的格式输出。

创建pod1的yaml文件pod1.yaml:

[root@vms10 ~]# mkdir pod ; cd pod
[root@vms10 pod]#
[root@vms10 pod]# kubectl run pod1 --image=nginx --dry-run=client -o yaml > pod1.yaml
[root@vms10 pod]#

yaml文件的格式

file
yaml文件里的写法是分级的,子级和父级之间要缩进2个空格(记住不能按tab键),子级的第一个位置可以以”-”开头,这个”-”和父级对齐,如上图箭头指定的位置。下面来看下pod的yaml文件的结构:
file

kind指的是创建资源的类型,这里是Pod,后面会讲其他资源比如deployment、secret等
apiVersion 指的是此对象对应的apiversion类型,这个是固定的不能随便写。
metadata里指定的是:
name-用于指定pod的名称
labels-用于定义pod的标签
还可以用namespace定义,此pod在哪个命名空间里创建
spec里定义的是pod的设置,包括:
containers用于定义容器,里面常见的选项包括:
- image-创建容器所使用的镜像
name-容器的名字
imagePullPolicy-镜像下载策略有三个值:Always, Never, IfNotPresent
env: 用于指定pod所能用的变量
- name: 变量名
value: 变量的值, 此处值如果是数字的话,需要使用引号引起来
resources-指定资源限制--后面章节会用到
restartPolicy-指定pod的重启策略

这里重点说下containers里的镜像下载策略imagePullPolicy,他的三个值是:
Always 不管本地有没有镜像,都会到网络上去下载(默认值)
Never 只使用本地镜像,如果本地不存在镜像,则报错
IfNotPresent 优先使用本地镜像,如果本地没有才到网络去下载(建议)
这里默认值是Always,假设镜像虽然已经下载了,但有时可能遇到如下问题:
1.本地网络带宽很高,但是创建pod仍然很慢,原因是创建pod时不管本地有没有,优先去下载镜像,但国内访问国外站点速度很慢,所以创建pod会很慢
2.如果worker不能连接互联网,则创建pod时直接报错,因为根本下载不了,也不会使用本地镜像
所以建议大家把镜像策略改成imagePullPolicy: IfNotPresent,如下图:

[root@vms10 pod]# cat pod1.yaml 
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod1  #这里pod标签设置为run=pod1
  name: pod1  #pod名为pod1
spec:
  containers:
  - image: nginx  #pod所使用的镜像
    imagePullPolicy: IfNotPresent
    name: pod1   #这个是容器名
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
[root@vms10 pod]# 

注意:这里镜像下载策略,可以在命令行里指定

kubectl run 名字 --image=镜像 --image-pull-policy=镜像下载策略

yaml文件里需要的字段都可以通过”kubectl explain 资源类型.一级.二级” 来查看,比如查看pod的yaml里定义容器里哪些属性可以写,可以用kubectl explain pods.spec.containers
来进行查询。
通过此yaml文件创建pod的语法为

kubectl apply -f yaml文件

如果要指定命名空间则用 kubectl apply -f yaml -n 命名空间

创建pod:

[root@vms10 pod]# kubectl apply -f pod1.yaml 
pod/pod1 created
[root@vms10 pod]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
pod1   1/1     Running       0          2s
[root@vms10 pod]#

此pod里运行的进程是由镜像CMD里指定,创建pod时我们也可以指定pod运行其他进程,可以用如下命令:

kubectl run 名字  --image=镜像 --dry-run=client -o yaml  --  “命令” > pod.yaml
或者
kubectl run 名字 --image=镜像 --dry-run=client -o yaml  --  sh -c “命令” > pod.yaml

这两种都可以,注意:

  1. -- 两边要有空格
  2. --dry-run=client -o yaml 写在 -- 前面 ,命令写在 -- 右边 ,不要写错了。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读