Pod是kubernetes集群进行管理的最小单元,程序运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或多个容器。
kubernetes集群启动以后,集群中的各个组件也都是以Pod方式运行,可以通过命令查看。
#查看指定kube-system名称空间中的Pod
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-6955765f44-dzhkh 1/1 Running 0 5d18h
coredns-6955765f44-rn4ds 1/1 Running 0 5d18h
etcd-master 1/1 Running 0 5d18h
kube-apiserver-master 1/1 Running 0 5d18h
kube-controller-manager-master 1/1 Running 7 5d18h
kube-flannel-ds-2p922 1/1 Running 0 5d18h
kube-flannel-ds-fz8bz 1/1 Running 0 5d18h
kube-flannel-ds-plfvb 1/1 Running 0 5d18h
kube-proxy-7k4lf 1/1 Running 0 5d18h
kube-proxy-h485n 1/1 Running 0 5d18h
kube-proxy-m45qq 1/1 Running 0 5d18h
kube-scheduler-master 1/1 Running 5 5d18h
Pod操作指令命令
创建并运行Pod命令(kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现)
- 命令格式:kubectl run (pod控制器名称) [参数]
- --image #指定Pod的镜像
- --port #指定端口
- --namespace #指定Namespace
#创建Namespace,并将Pod运行在指定的Namespace中
[root@master ~]# kubectl create ns dev
namespace/dev created
#指定Pod运行在dev名称空间中(k8s无法设置直接控制pod的启停;由pod控制器操作)
但是可以创建/删除
[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created(pod控制器nginx创建成功)
查看Pod命令
#查看Namespace中Pod基本信息,默认为default名称空间Pod信息
[root@master ~]# kubectl get pods (这是查看的默认namespace下的pod)
NAME READY STATUS RESTARTS AGE
nginx-696649f6f9-t4xm6 1/1 Running 0 5d18h
#查看dev名称空间中的Pod信息
[root@master ~] kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-64777cd554-tjdcw 0/1 ContainerCreating 0 2m1s
#查看Pod详细信息(-o wide)
[root@master ~]# kubectl get pod -n dev -o wide(宽泛查看)
NAME READY STATUS RESTARTS AGE IP NODE
nginx-64777cd554-tjdcw 1/1 Running 0 2m49s 10.244.2.5 node2
#查看Pod详细描述信息
[root@master ~]# kubectl describe pod nginx-64777cd554-tjdcw -n dev
访问Pod命令
#可通过Pod的IP与端口访问Pod中运行的程序
[root@master ~]# curl http://10.244.2.5:80
#查看Pod名称
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-64777cd554-tjdcw 1/1 Running 0 24m
#删除Pod
[root@master ~]# kubectl delete pod nginx-64777cd554-tjdcw -n dev
pod "nginx-64777cd554-tjdcw" deleted
#查看pod信息
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-64777cd554-2cptl 1/1 Running 0 34s
#可以发现刚刚的pod被删除以后,新的pod又自动生成了,该原因是应为pod控制器又自动创建一个新pod,如果想永久删除可以将pod控制器删除(自动修复机制)
#查看pod控制器信息(pod控制器就是deployment部署机制)
[root@master ~]# kubectl get deployment -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 29m
#删除pod控制器(pod控制器也是在namespace里的)
[root@master ~]# kubectl delete deployment nginx -n dev
deployment.apps "nginx" deleted
#查看pod信息
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.
配置文件形式创建pod
[root@master ~]# vim pod_nginx.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:1.17.1
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
#通过配置文件创建Pod
[root@master ~]# kubectl create -f pod_nginx.yml
pod/nginx created
#查看dev名称空间下pod信息
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 75s
#查看pod详细信息
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP
nginx 1/1 Running 0 3m13s 10.244.2.7
#访问pod中nginx程序
[root@master ~]# curl http://10.244.2.7:80
#删除pod
[root@master ~]# kubectl delete -f pod_nginx.yml
pod "nginx" deleted
#查看pod信息
[root@master ~]# kubectl get pod -n dev
No resources found in dev namespace.
(由命令行配置的创建的pod和单纯由命令行创建的pod删除;配置文件的可以直接删除pod)