Pod 是 kubernetes 集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于 Pod 中。Pod 可以认为是容器的封装,一个 Pod 中可以存在一个或者多个容器。
kubernetes 在集群启动之后,集群中的各个组件也都是以 Pod 方式运行的。可以通过下面命令查看:
[root@master ~]# kubectl get pod -n kube-systemNAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-6955765f44-68g6v 1/1 Running 0 2d1hkube-system coredns-6955765f44-cs5r8 1/1 Running 0 2d1hkube-system etcd-master 1/1 Running 0 2d1hkube-system kube-apiserver-master 1/1 Running 0 2d1hkube-system kube-controller-manager-master 1/1 Running 0 2d1hkube-system kube-flannel-ds-amd64-47r25 1/1 Running 0 2d1hkube-system kube-flannel-ds-amd64-ls5lh 1/1 Running 0 2d1hkube-system kube-proxy-685tk 1/1 Running 0 2d1hkube-system kube-proxy-87spt 1/1 Running 0 2d1hkube-system kube-scheduler-master 1/1 Running 0 2d1h
创建并运行
kubernetes 没有提供单独运行 Pod 的命令,都是通过 Pod 控制器来实现的
# 命令格式: kubectl run (pod控制器名称) [参数]# --image 指定Pod的镜像# --port 指定端口# --namespace 指定namespace[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace devdeployment.apps/nginx created
查看 pod 信息
# 查看Pod基本信息[root@master ~]# kubectl get pods -n devNAME READY STATUS RESTARTS AGEnginx-5ff7956ff6-fg2db 1/1 Running 0 43s# 查看Pod的详细信息[root@master ~]# kubectl describe pod nginx-5ff7956ff6-fg2db -n devName: nginx-5ff7956ff6-fg2dbNamespace: devPriority: 0Node: node1/192.168.109.101Start Time: Wed, 08 Apr 2020 09:29:24 +0800Labels: pod-template-hash=5ff7956ff6run=nginxAnnotations: <none>Status: RunningIP: 10.244.1.23IPs:IP: 10.244.1.23Controlled By: ReplicaSet/nginx-5ff7956ff6Containers:nginx:Container ID: docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253cImage: nginx:1.17.1Image ID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7Port: 80/TCPHost Port: 0/TCPState: RunningStarted: Wed, 08 Apr 2020 09:30:01 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro)Conditions:Type StatusInitialized TrueReady TrueContainersReady TruePodScheduled TrueVolumes:default-token-hwvvw:Type: Secret (a volume populated by a Secret)SecretName: default-token-hwvvwOptional: falseQoS Class: BestEffortNode-Selectors: <none>Tolerations: node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300sEvents:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled <unknown> default-scheduler Successfully assigned dev/nginx-5ff7956ff6-fg2db to node1Normal Pulling 4m11s kubelet, node1 Pulling image "nginx:1.17.1"Normal Pulled 3m36s kubelet, node1 Successfully pulled image "nginx:1.17.1"Normal Created 3m36s kubelet, node1 Created container nginxNormal Started 3m36s kubelet, node1 Started container nginx
访问 Pod
# 获取podIP[root@master ~]# kubectl get pods -n dev -o wideNAME READY STATUS RESTARTS AGE IP NODE ...nginx-5ff7956ff6-fg2db 1/1 Running 0 190s 10.244.1.23 node1 ...#访问POD[root@master ~]# curl http://10.244.1.23:80<!DOCTYPE html><html><head><title>Welcome to nginx!</title></head><body><p><em>Thank you for using nginx.</em></p></body></html>
删除指定 Pod
# 删除指定Pod[root@master ~]# kubectl delete pod nginx-5ff7956ff6-fg2db -n devpod "nginx-5ff7956ff6-fg2db" deleted# 此时,显示删除Pod成功,但是再查询,发现又新产生了一个[root@master ~]# kubectl get pods -n devNAME READY STATUS RESTARTS AGEnginx-5ff7956ff6-jj4ng 1/1 Running 0 21s# 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建# 此时要想删除Pod,必须删除Pod控制器# 先来查询一下当前namespace下的Pod控制器[root@master ~]# kubectl get deploy -n devNAME READY UP-TO-DATE AVAILABLE AGEnginx 1/1 1 1 9m7s# 接下来,删除此PodPod控制器[root@master ~]# kubectl delete deploy nginx -n devdeployment.apps "nginx" deleted# 稍等片刻,再查询Pod,发现Pod被删除了[root@master ~]# kubectl get pods -n devNo resources found in dev namespace.

配置操作
创建一个 pod-nginx.yaml,内容如下:
apiVersion: v1kind: Podmetadata:name: nginxnamespace: devspec:containers:- image: nginx:1.17.1name: podports:- name: nginx-portcontainerPort: 80protocol: TCP
然后就可以执行对应的创建和删除命令了:
创建:kubectl create -f pod-nginx.yaml
删除:kubectl delete -f pod-nginx.yaml
