Pod 是 kubernetes 集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于 Pod 中。Pod 可以认为是容器的封装,一个 Pod 中可以存在一个或者多个容器。
    image.png
    kubernetes 在集群启动之后,集群中的各个组件也都是以 Pod 方式运行的。可以通过下面命令查看:

    1. [root@master ~]# kubectl get pod -n kube-system
    2. NAMESPACE NAME READY STATUS RESTARTS AGE
    3. kube-system coredns-6955765f44-68g6v 1/1 Running 0 2d1h
    4. kube-system coredns-6955765f44-cs5r8 1/1 Running 0 2d1h
    5. kube-system etcd-master 1/1 Running 0 2d1h
    6. kube-system kube-apiserver-master 1/1 Running 0 2d1h
    7. kube-system kube-controller-manager-master 1/1 Running 0 2d1h
    8. kube-system kube-flannel-ds-amd64-47r25 1/1 Running 0 2d1h
    9. kube-system kube-flannel-ds-amd64-ls5lh 1/1 Running 0 2d1h
    10. kube-system kube-proxy-685tk 1/1 Running 0 2d1h
    11. kube-system kube-proxy-87spt 1/1 Running 0 2d1h
    12. kube-system kube-scheduler-master 1/1 Running 0 2d1h

    创建并运行
    kubernetes 没有提供单独运行 Pod 的命令,都是通过 Pod 控制器来实现的

    1. # 命令格式: kubectl run (pod控制器名称) [参数]
    2. # --image 指定Pod的镜像
    3. # --port 指定端口
    4. # --namespace 指定namespace
    5. [root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
    6. deployment.apps/nginx created

    查看 pod 信息

    1. # 查看Pod基本信息
    2. [root@master ~]# kubectl get pods -n dev
    3. NAME READY STATUS RESTARTS AGE
    4. nginx-5ff7956ff6-fg2db 1/1 Running 0 43s
    5. # 查看Pod的详细信息
    6. [root@master ~]# kubectl describe pod nginx-5ff7956ff6-fg2db -n dev
    7. Name: nginx-5ff7956ff6-fg2db
    8. Namespace: dev
    9. Priority: 0
    10. Node: node1/192.168.109.101
    11. Start Time: Wed, 08 Apr 2020 09:29:24 +0800
    12. Labels: pod-template-hash=5ff7956ff6
    13. run=nginx
    14. Annotations: <none>
    15. Status: Running
    16. IP: 10.244.1.23
    17. IPs:
    18. IP: 10.244.1.23
    19. Controlled By: ReplicaSet/nginx-5ff7956ff6
    20. Containers:
    21. nginx:
    22. Container ID: docker://4c62b8c0648d2512380f4ffa5da2c99d16e05634979973449c98e9b829f6253c
    23. Image: nginx:1.17.1
    24. Image ID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
    25. Port: 80/TCP
    26. Host Port: 0/TCP
    27. State: Running
    28. Started: Wed, 08 Apr 2020 09:30:01 +0800
    29. Ready: True
    30. Restart Count: 0
    31. Environment: <none>
    32. Mounts:
    33. /var/run/secrets/kubernetes.io/serviceaccount from default-token-hwvvw (ro)
    34. Conditions:
    35. Type Status
    36. Initialized True
    37. Ready True
    38. ContainersReady True
    39. PodScheduled True
    40. Volumes:
    41. default-token-hwvvw:
    42. Type: Secret (a volume populated by a Secret)
    43. SecretName: default-token-hwvvw
    44. Optional: false
    45. QoS Class: BestEffort
    46. Node-Selectors: <none>
    47. Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
    48. node.kubernetes.io/unreachable:NoExecute for 300s
    49. Events:
    50. Type Reason Age From Message
    51. ---- ------ ---- ---- -------
    52. Normal Scheduled <unknown> default-scheduler Successfully assigned dev/nginx-5ff7956ff6-fg2db to node1
    53. Normal Pulling 4m11s kubelet, node1 Pulling image "nginx:1.17.1"
    54. Normal Pulled 3m36s kubelet, node1 Successfully pulled image "nginx:1.17.1"
    55. Normal Created 3m36s kubelet, node1 Created container nginx
    56. Normal Started 3m36s kubelet, node1 Started container nginx

    访问 Pod

    1. # 获取podIP
    2. [root@master ~]# kubectl get pods -n dev -o wide
    3. NAME READY STATUS RESTARTS AGE IP NODE ...
    4. nginx-5ff7956ff6-fg2db 1/1 Running 0 190s 10.244.1.23 node1 ...
    5. #访问POD
    6. [root@master ~]# curl http://10.244.1.23:80
    7. <!DOCTYPE html>
    8. <html>
    9. <head>
    10. <title>Welcome to nginx!</title>
    11. </head>
    12. <body>
    13. <p><em>Thank you for using nginx.</em></p>
    14. </body>
    15. </html>

    删除指定 Pod

    1. # 删除指定Pod
    2. [root@master ~]# kubectl delete pod nginx-5ff7956ff6-fg2db -n dev
    3. pod "nginx-5ff7956ff6-fg2db" deleted
    4. # 此时,显示删除Pod成功,但是再查询,发现又新产生了一个
    5. [root@master ~]# kubectl get pods -n dev
    6. NAME READY STATUS RESTARTS AGE
    7. nginx-5ff7956ff6-jj4ng 1/1 Running 0 21s
    8. # 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建
    9. # 此时要想删除Pod,必须删除Pod控制器
    10. # 先来查询一下当前namespace下的Pod控制器
    11. [root@master ~]# kubectl get deploy -n dev
    12. NAME READY UP-TO-DATE AVAILABLE AGE
    13. nginx 1/1 1 1 9m7s
    14. # 接下来,删除此PodPod控制器
    15. [root@master ~]# kubectl delete deploy nginx -n dev
    16. deployment.apps "nginx" deleted
    17. # 稍等片刻,再查询Pod,发现Pod被删除了
    18. [root@master ~]# kubectl get pods -n dev
    19. No resources found in dev namespace.

    image.png
    配置操作
    创建一个 pod-nginx.yaml,内容如下:

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: nginx
    5. namespace: dev
    6. spec:
    7. containers:
    8. - image: nginx:1.17.1
    9. name: pod
    10. ports:
    11. - name: nginx-port
    12. containerPort: 80
    13. protocol: TCP

    然后就可以执行对应的创建和删除命令了:
    创建:kubectl create -f pod-nginx.yaml
    删除:kubectl delete -f pod-nginx.yaml