5、k8s-deployment增删改查(pod控制器)

4.4 Deployment

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,**会尝试进行重启或重建pod。

在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment。

如我创建容器时告诉pod控制器我需要3个应用程序 这时候pod控制器 就会创建出三个来 如果一个出现故障 pod控制器就会尝试重启 重启失败就会销毁重建 总之确保一直有3个运行。

要想删除必须删掉pod控制器

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/10/image_84b19db3db82366663125705661cd6dc.png

一. 命令操作

1.创建2副本pod

参数说明:

  • –image 指定pod的镜像
  • –port 指定端口
  • –replicas 指定pod的数量
  • –namespace 指定ns (需要多节点才能成功运行)

本身deployment是有标签选择器的 他就会选中相同标签的pod进而管理pod

1
2
3
4
5
6
7
# 为了不影响接下来的操作我们删除ns dev 这样dev下面的pod都会被删除
kubectl delete ns dev
# 验证是否删除成功
kubectl get deployment,pod -n dev
# 创建一个资源用于测试(命令行方式)
kubectl create ns dev
kubectl run nginx-pod --image=registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:nginx-latest --port=80 --replicas=3 -n dev

扩展手动给nginx-pod打上标签

kubectl label pod nginx-pod version=2.0 -n dev –overwrite

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/10/image_e138646456edcc13cc512eef8b032bb5.png

此时可以看到标签选择器选择的标签化与我们查看的标签一致

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/10/image_799b6282dd3639776922530e3d941c19.png

2.删除pod控制器deployment(直接删除pod会重建 删除pod控制器即删除完成)

没有pod控制器的直接就删除完成了

1
2
3
4
# 删除nginx-pod、pod的pod控制器
kubectl delete deploy nginx-pod -n dev
# 验证(此时便没有了)
kubectl get pods -n dev

二. 使用配置文件方式定义deployment(pod控制器)

nginx-pod.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1  # 版本
kind: Deployment # 类型
metadata: # 源数据
name: svc-nginx # 当前deployment所属的名字
namespace: dev # 及ns
spec:
replicas: 3 # 定义副本数
selector: # 标签选择器
matchLabels: # 选择nginx标签
run: nginx
template: # 以下为pod 模板
metadata:
labels: # 标签
run: nginx # 定义标签为nginx
spec:
containers:
- image: nginx:latest
name: nginx-pod
ports:
- containerPort: 80
protocol: TCP

然后就可以执行对应的创建和删除命令了:

创建:kubectl create -f deploy-nginx.yaml

删除:kubectl delete -f deploy-nginx.yaml