Kubernetes认证考试自学系列 | 创建及删除pod

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客


步骤1:查看有多少pod。

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

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

步骤2:要列出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 ~]#
复制代码

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

[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 ~]#
复制代码

5.1.1 创建pod

命令行的语法如下。

kubectl run 名字 --image=镜像
复制代码

在这里也可以指定pod的标签,语法如下。

kubectl run 名字 --image=镜像 --1abels=标签=值
复制代码

如果要多个标签,则用多个--labels选项即可。

还可以指定pod里使用的变量,语法如下。

kubectl run 名字 --image=镜像 --env="变量名=值"
复制代码

如果要指定多个变量,则使用多个--env选项即可。

也可以指定pod里容器使用的端口,使用选项port。

kubectl run 名字 --image=镜像 --port=端口号
复制代码

还可以指定镜像下载策略。

kubectl run名字 --image=镜像 --image-pull-policy=镜像下载策略
复制代码

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

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

步骤2:查看pod。

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

步骤3:要查看此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。

5.1.2 删除pod

本小节讲如何删除pod,删除pod的语法如下。

kubectl delete pod 名字 --force 
复制代码

这里--force是可选的,作用是可以加快删除pod的速度。

步骤1:删除pod1。

[root@vms10 ~]# kubectl delete pod pod1
pod "pod1" deleted 
[root@vms10 ~]#
复制代码

步骤2:查看现有pod。

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

5.1.3 生成yaml文件创建pod

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

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

这里--dry-run=client的意思是模拟创建pod,但并不会真的创建,-o yaml的意思是以yaml文件的格式输出,然后把结果重定向到pod.yaml里。

步骤1:本章所涉及的文件单独放在一个pod目录里,创建目录pod并cd进去。

[root@vms10 ~]# mkdir pod ; cd pod 
[root@vms10 pod]#
复制代码

步骤2:创建pod1的yaml文件pod1.yaml。

[root@vms10 pod]# kubectl run pod1 --image=nginx --dry-run=client -o yaml > pod1.yaml
[root@vms10 pod]#
复制代码

步骤3:修改pod1.yaml的内容,添加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]#
复制代码

通过此yaml文件创建pod的语法如下。

kubectl apply -f yaml 文件
复制代码

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

步骤4:创建pod。

[root@vms10 pod]# kubectl apply -f pod1.yaml 
pod/pod1 created 
[root@vms10 pod]#
复制代码

步骤5:查看pod。

[root@vms10 pod]# kubectl get pods 
NAME   READY   STATUS      RESTARTS   AGE 
pod1    1/1    Running        0        2s 
[root@vms10 pod]#
复制代码

练习:生成一个pod的yaml文件

步骤1:要求在此pod里执行echo aa,然后休眠1000秒。

[root@vms10 pod]# kubectl run pod2 --imgage=nginx --image-pull-policy=IfNotPresent --dry-run=client -o yaml -- sh -c "echo aa ; sleep 1000" > pod2.yaml  
[root@vms10 pod]#
复制代码

内容如下。

[root@vms10 pod]# cat pod2.yaml 
apiVersion: v1
kind: Pod 
metadata:
  creationTimestamp: null 
  labels:
    run: pod2
  name: pod2
spec:
  containers:
  - args:
    - sh
    - -c
    - echo aa ; sleep 1000
    image: nginx 
    imagePullPolicy: IfNotPresent 
    name: pod2
    resources: {}
  dnsPolicy: ClusterFirst 
  restartPolicy: Always 
status: {}
[root@vms10 pod]#
复制代码

这样当pod2运行的时候,容器里运行的就不是镜像nginx里CMD指定的进程了。

containers:
- command:
  - sh
  - -c
  - echo aa ; sleep 1000
  image: nginx
复制代码

这里命令是分成多行写的,也可以写成一行,用json文件的格式写成如下格式。

containers:
- command: ["sh", "-c", "echo aa ; sleep 1000"]
  image: nginx  
复制代码

注意:在考试时,可以利用此命令快速生成yaml文件,然后进行修改。

步骤2:创建pod 2。

[root@vms10 pod]# kubectl apply -f pod2.yaml 
pod/pod2 created 
[root@vms10 pod]#
复制代码

步骤3:查看现有pod。

[root@vms10 pod]# kubectl get pods 
NAME    READY  STATUS   RESTARTS   AGE 
pod1    1/1    Running    0        6m8s 
pod2    1/1    Running    0        3s 
[root@vms10 pod]#
复制代码

步骤4:删除pod 2。

[root@vms10 pod]# kubectl delete -f pod2.yaml 
pod "pod2" deleted 
[root@vms10 pod]#
复制代码

步骤5:修改pod2.yaml的内容,如图5-4所示。

步骤6:创建此pod。

[root@vms10 pod]# kubectl apply -f pod2.yaml 
pod/pod2 created 
[root@vms10 pod]#
复制代码

步骤7:查看pod。

[root@vms10 pod]# kubectl get pods 
NAME   READY   STATUS    RESTARTS  AGE 
pod1   1/1     Running     0       9m8s
pod2   2/2     Running     0       3s 
[root@vms10 pod]#
复制代码

这里pod2显示的是2/2,说明pod里有2个容器,这两个容器都是正常运行的。

在kubernetes里,所有的资源,比如节点、pod,还有后面会讲的deployment、service等都有标签。

步骤8:查看pod及标签信息。

[root@vms10 pod]# kubectl get pods --show-labels 
NAME  READY  STATUS   RESTARTS   AGE      LABELS 
pod1  1/1    Running    0        10m18s   run=pod1
pod2  2/2    Running    0         7s      run=pod2
[root@vms10 pod]#
复制代码

步骤9:用-l(label的首字母)来指定标签,用于列出含有特定标签的pod,比如查看标签run=pod1的pod。

[root@vms10 pod]# kubectl get pods -l run=pod1
NAME  READY  STATUS   RESTARTS AGE 
pod1   1/1   Running    0      11m49s
[root@vms10 pod]#

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130572604