书籍来源:《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]#