Deployments 控制器

Deployments 控制器,具体概念请阅读官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/

使用Deployments创建POD资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
apiVersion: apps/v1
kind: Deployment
metadata:
name: dp-pod
labels:
controller: dp
spec:
replicas: 3
revisionHistoryLimit: 3
paused: false
progressDeadlineSeconds: 600
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 30%
maxUnavailable: 30%
selector:
matchLabels:
app: nginx-pod
matchExpressions:
- {key: app, operator: In, values: [nginx-pod]}
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.14.0
ports:
- containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
apiVersion: apps/v1 # 版本号
kind: Deployment # 资源类型
metadata: # 元数据
name: dp-pod # 名称
labels: # 标签
controller: dp
spec: # 详情描述
replicas: 3 # 副本数量
revisionHistoryLimit: 3 # 保留历史版本,默认是10,用于版本回退时使用
paused: false # 暂停部署,默认是false,即Deployment创建好后是否立即开始部署和创建pod
progressDeadlineSeconds: 600 # 部署超时时间(s),默认是600
strategy: # 策略
type: RollingUpdate # 滚动更新策略
rollingUpdate: # 滚动更新
maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
maxUnavailable: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers: # 容器
- name: nginx # 容器名称
image: nginx:1.14.0 # 镜像名称:镜像版本
ports: # 声明80端口
- containerPort: 80
1
2
# 创建资源清单命令
kubectl apply -f dp.yaml

image-20221002152121224

1
2
# 查看Deployments
kubectl get deployments.apps

image-20221002152349201

在检查集群中的 Deployment 时,所显示的字段有:

  • NAME 列出了名字空间中 Deployment 的名称。
  • READY 显示应用程序的可用的“副本”数。显示的模式是“就绪个数/期望个数”。
  • UP-TO-DATE 显示为了达到期望状态已经更新的副本数。
  • AVAILABLE 显示应用可供用户使用的副本数。
  • AGE 显示应用程序运行的时间。

ReplicaSet 控制器

ReplicaSet 控制器,具体概念请阅读官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/replicaset/

使用ReplicaSet创建POD资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-pod
labels:
controller: rs
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
matchExpressions:
- {key: app, operator: In, values: [nginx-pod]}
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.14.0
ports:
- containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 资源类型
metadata: # 元数据
name: rs-pod # rs名称
labels: # 标签
controller: rs # 键值都是自定义的
spec: # 详情描述
replicas: 3 # 副本数量
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers: # 容器
- name: nginx # 容器名称
image: nginx:1.14.0 # 镜像名称:镜像版本
ports: # 声明80端口
- containerPort: 80
1
2
# 创建资源清单命令
kubectl apply -f rs-pod.yaml

image-20221001171425440

1
2
# 通过命令动态收缩扩容
kubectl scale rs rs-pod --replicas=4

image-20221001171928296

1
2
# 查看RS
kubectl get rs

image-20221002153146306

ReplicaSet 输出中包含以下字段:

  • NAME 列出名字空间中 ReplicaSet 的名称;
  • DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态;
  • CURRENT 显示当前运行状态中的副本个数;
  • READY 显示应用中有多少副本可以为用户提供服务;
  • AGE 显示应用已经运行的时间长度。

ReplicaSet 的替代方案

Deployment 是一个可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pod 滚动更新的对象。 尽管 ReplicaSet 可以独立使用,目前它们的主要用途是提供给 Deployment 作为编排 Pod 创建、删除和更新的一种机制。当使用 Deployment 时,你不必关心如何管理它所创建的 ReplicaSet,Deployment 拥有并管理其 ReplicaSet。 因此,建议你在需要 ReplicaSet 时使用 Deployment。

DaemonSet 控制器

DaemonSet 控制器,具体概念请阅读官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/

使用DaemonSet创建POD资源清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ds
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.0
ports:
- containerPort: 80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1
kind: DaemonSet # 资源类型
metadata: # 元数据
name: nginx-ds # 资源名称
labels: # 标签
app: nginx # 自定义标签键值对
spec: # 详情描述
selector: # 选择器
matchLabels: # Labels匹配规则
app: nginx
template: # 模板
metadata:
labels:
app: nginx
spec:
containers: # 容器
- name: nginx # 容器名称
image: nginx:1.14.0 # 镜像名称:镜像版本
ports: # 端口
- containerPort: 80 # 声明80端口

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本

image-20221002154122794

DaemonSet 的一些典型用法:

  • 在每个节点上运行集群守护进程
  • 在每个节点上运行日志收集守护进程
  • 在每个节点上运行监控守护进程

1
2
# 查看DS
kubectl get ds

image-20221002155049232

ReplicaSet 输出中包含以下字段:

  • NAME 列出名字空间中 ReplicaSet 的名称;
  • DESIRED 显示应用的期望副本个数,即在创建 Deployment 时所定义的值。 此为期望状态;
  • CURRENT 显示当前运行状态中的副本个数;
  • UP-TO-DATE 显示为了达到期望状态已经更新的副本数。
  • AVAILABLE 显示应用可供用户使用的副本数。
  • READY 显示应用中有多少副本可以为用户提供服务;
  • AGE 显示应用已经运行的时间长度。