在 kubernetes中,Pod 是最小的控制单元,但是 kubernetes 很少直接控制 Pod,一般都是通过 Pod 控制器来完成的。Pod 控制器用于 pod 的管理,确保 pod 资源符合预期的状态,当 pod 的资源出现故障时,会尝试进行重启或重建 pod。所以有的时候删除 pod,发现还会存在就是因为 pod 控制器的存在。在 kubernetes 中 Pod 控制器的种类有很多,Deployment 就是其中的一种。
命令操作
# 命令格式: kubectl run deployment名称 [参数]# --image 指定pod的镜像# --port 指定端口# --replicas 指定创建pod数量,不指定默认就是一个# --namespace 指定namespace[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n devdeployment.apps/nginx created# 查看创建的Pod[root@master ~]# kubectl get pods -n devNAME READY STATUS RESTARTS AGEnginx-5ff7956ff6-6k8cb 1/1 Running 0 19snginx-5ff7956ff6-jxfjt 1/1 Running 0 19snginx-5ff7956ff6-v6jqw 1/1 Running 0 19s# 查看deployment的信息[root@master ~]# kubectl get deploy -n devNAME READY UP-TO-DATE AVAILABLE AGEnginx 3/3 3 3 2m42s# UP-TO-DATE:成功升级的副本数量# AVAILABLE:可用副本的数量[root@master ~]# kubectl get deploy -n dev -o wideNAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORnginx 3/3 3 3 2m51s nginx nginx:1.17.1 run=nginx# 查看deployment的详细信息[root@master ~]# kubectl describe deploy nginx -n devName: nginxNamespace: devCreationTimestamp: Wed, 08 Apr 2020 11:14:14 +0800Labels: run=nginxAnnotations: deployment.kubernetes.io/revision: 1Selector: run=nginxReplicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailableStrategyType: RollingUpdateMinReadySeconds: 0RollingUpdateStrategy: 25% max unavailable, 25% max surgePod Template:Labels: run=nginxContainers:nginx:Image: nginx:1.17.1Port: 80/TCPHost Port: 0/TCPEnvironment: <none>Mounts: <none>Volumes: <none>Conditions:Type Status Reason---- ------ ------Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailableOldReplicaSets: <none>NewReplicaSet: nginx-5ff7956ff6 (3/3 replicas created)Events:Type Reason Age From Message---- ------ ---- ---- -------Normal ScalingReplicaSet 5m43s deployment-controller Scaled up replicaset nginx-5ff7956ff6 to 3# 删除[root@master ~]# kubectl delete deploy nginx -n devdeployment.apps "nginx" deleted

配置操作
创建一个deploy-nginx.yaml,内容如下:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginxnamespace: devspec:replicas: 3selector:matchLabels:run: nginxtemplate:metadata:labels:run: nginxspec:containers:- image: nginx:1.17.1name: nginxports:- containerPort: 80protocol: TCP
然后就可以执行对应的创建和删除命令了:
创建:kubectl create -f deploy-nginx.yaml
删除:kubectl delete -f deploy-nginx.yaml
