介绍
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是 通过Pod控制器来完成的。
Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment。
创建
命令格式:
kubectl run pod控制器名称 --image=pod的镜像 --port=端口 --replicas=创建pod数量 --n 指定namespace
参数解释:
--image:指定pod的镜像--port:指定端口--replicas:指定创建pod数量--n:指定namespace,也可以是--ns或--namespace
例子
之前文章中,test 命名空间下已经有了很多pod,为了防止发生冲突,先创建 test2 命名空间
kubectl create ns test2
kubectl run nginx --image=nginx:latest --port=80 --replicas=3 -n test2
显示如下表示成功:
deployment.apps/nginx created
查看Pod
kubectl get pods -n test2
显示如下:
NAME READY STATUS RESTARTS AGE
nginx-5ff7956ff6-6k8cb 1/1 Running 0 19s
nginx-5ff7956ff6-jxfjt 1/1 Running 0 19s
nginx-5ff7956ff6-v6jqw 1/1 Running 0 19s
查看deployment的信息
kubectl get deploy -n test2
显示如下:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 2m42s
显示扩展信息
kubectl get deploy -n test2 -o wide
显示如下:
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx 3/3 3 3 2m51s nginx nginx:latest run=nginx
解释:
- UP-TO-DATE:成功升级的副本数量
- AVAILABLE:可用副本的数量
查看详细信息
kubectl describe deploy nginx -n test2
显示如下:
Name: nginx # 控制器名字
Namespace: test2 # 控制器所在命名空间
CreationTimestamp: Sun, 01 Oct 2023 10:29:22 +0800
Labels: run=nginx # 控制器标签
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable # 副本
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=nginx
Containers:
nginx:
Image: nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-dd6b5d745 (3/3 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 33m deployment-controller Scaled up replica set nginx-dd6b5d745 to 3
删除
注意:删除控制器后,对应的pod也会删除
kubectl delete deploy nginx -n test2
执行结果如下,表示删除成功:
deployment.apps "nginx" deleted
查看 test2 命名空间下的pod:
kubectl get pod -n test2
yaml 配置文件
创建 deploy-nginx.yaml 文件:
vim deploy-nginx.yaml
按 i 键
复制粘贴下面内容:
apiVersion: apps/v1
kind: Deployment # 表示是 pod控制器 的配置
metadata:
name: nginx # pod控制器名称
namespace: test2 # 所在空间
spec:
replicas: 3 # 副本数量
selector: # 指定 标签选择器
matchLabels: # 匹配标签
run: nginx # 该控制器 控制 下面 标签是 run: nginx 的pod
template: # pod 模板,是对pod的配置
metadata:
labels:
run: nginx # pod标签
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
按 esc,:wq 保存退出
创建
kubectl create -f deploy-nginx.yaml
查看
kubectl get deploy -n test2
显示如下:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 2/3 3 3 36s
提示: READY 显示 2/3,需要过会才能全部启动成功
删除
提示:可直接删除 pod和控制器
kubectl delete -f deploy-nginx.yaml
