在 kubernetes中,Pod 是最小的控制单元,但是 kubernetes 很少直接控制 Pod,一般都是通过 Pod 控制器来完成的。Pod 控制器用于 pod 的管理,确保 pod 资源符合预期的状态,当 pod 的资源出现故障时,会尝试进行重启或重建 pod。所以有的时候删除 pod,发现还会存在就是因为 pod 控制器的存在。在 kubernetes 中 Pod 控制器的种类有很多,Deployment 就是其中的一种。
    命令操作

    1. # 命令格式: kubectl run deployment名称 [参数]
    2. # --image 指定pod的镜像
    3. # --port 指定端口
    4. # --replicas 指定创建pod数量,不指定默认就是一个
    5. # --namespace 指定namespace
    6. [root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev
    7. deployment.apps/nginx created
    8. # 查看创建的Pod
    9. [root@master ~]# kubectl get pods -n dev
    10. NAME READY STATUS RESTARTS AGE
    11. nginx-5ff7956ff6-6k8cb 1/1 Running 0 19s
    12. nginx-5ff7956ff6-jxfjt 1/1 Running 0 19s
    13. nginx-5ff7956ff6-v6jqw 1/1 Running 0 19s
    14. # 查看deployment的信息
    15. [root@master ~]# kubectl get deploy -n dev
    16. NAME READY UP-TO-DATE AVAILABLE AGE
    17. nginx 3/3 3 3 2m42s
    18. # UP-TO-DATE:成功升级的副本数量
    19. # AVAILABLE:可用副本的数量
    20. [root@master ~]# kubectl get deploy -n dev -o wide
    21. NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
    22. nginx 3/3 3 3 2m51s nginx nginx:1.17.1 run=nginx
    23. # 查看deployment的详细信息
    24. [root@master ~]# kubectl describe deploy nginx -n dev
    25. Name: nginx
    26. Namespace: dev
    27. CreationTimestamp: Wed, 08 Apr 2020 11:14:14 +0800
    28. Labels: run=nginx
    29. Annotations: deployment.kubernetes.io/revision: 1
    30. Selector: run=nginx
    31. Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
    32. StrategyType: RollingUpdate
    33. MinReadySeconds: 0
    34. RollingUpdateStrategy: 25% max unavailable, 25% max surge
    35. Pod Template:
    36. Labels: run=nginx
    37. Containers:
    38. nginx:
    39. Image: nginx:1.17.1
    40. Port: 80/TCP
    41. Host Port: 0/TCP
    42. Environment: <none>
    43. Mounts: <none>
    44. Volumes: <none>
    45. Conditions:
    46. Type Status Reason
    47. ---- ------ ------
    48. Available True MinimumReplicasAvailable
    49. Progressing True NewReplicaSetAvailable
    50. OldReplicaSets: <none>
    51. NewReplicaSet: nginx-5ff7956ff6 (3/3 replicas created)
    52. Events:
    53. Type Reason Age From Message
    54. ---- ------ ---- ---- -------
    55. Normal ScalingReplicaSet 5m43s deployment-controller Scaled up replicaset nginx-5ff7956ff6 to 3
    56. # 删除
    57. [root@master ~]# kubectl delete deploy nginx -n dev
    58. deployment.apps "nginx" deleted

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

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: nginx
    5. namespace: dev
    6. spec:
    7. replicas: 3
    8. selector:
    9. matchLabels:
    10. run: nginx
    11. template:
    12. metadata:
    13. labels:
    14. run: nginx
    15. spec:
    16. containers:
    17. - image: nginx:1.17.1
    18. name: nginx
    19. ports:
    20. - containerPort: 80
    21. protocol: TCP

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