k8s工作负载型控制器
工作负载是在kubernetes上运行的应用程序。
无论你的负载是单一组件还是由多个一同工作的组件构成,在Kubernetes中你可以在一组Pods中运行它。在Kuberneres中,pod代表的是集群上处于运行状态的一组容器。
Kubernetes Pods有确定的生命周期。例如,当某Pod在你的集群中运行时,Pod运行所在的节点出现致命错误时,所有该节点上的Pods都会失败。Kubernetes将这类失败视为最终状态:即使该节点后来恢复正常运行,你也需要创建新的Pod来恢复应用。
不过,为了让用户的日子略微好过一点,你并不需要直接管理每个Pod。相反,你可以使用负载资源来替你管理一组Pods。这些资源配置控制器来确保合适类型的、处于运行状态的Pod个数是正确的,与你所指定的状态相一致。
常用的工作负载控制器:
-
Deployment:无状态应用部署
-
StatefulSet:有状态应用部署
-
DaemonSet:确保所有Node运行同一个Pod
-
Job:一次性任务
-
CronJob:定时任务
控制器的作用: -
管理Pod对象
-
使用标签与Pod关联
-
控制器实现了Pod的运维,例如滚动更新、伸缩、副本管理、维护Pod状态等
Deployment
一个Deployment为Pods和ReplicaSets提供声明式的更新能力。
你负责描述Deployment中的目标状态,而Deployment控制器以受控速率更改实际状态,使其变为期望状态。你可以定义Deployment以创建新的ReplicaSet,或删除现有Deployment,并通过新的Deployment收养其资源。
Deployment很适合用来管理你的集群上的无状态应用,Deployment中的所有pod都是相互等价的,并且在需要的时候被换掉。
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
创建Deployment
[root@master kubenetres]# vim deploy.yml
[root@master kubenetres]# cat deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
[root@master kubenetres]# kubectl apply -f deploy.yml
deployment.apps/deploy created
[root@master kubenetres]# kubectl get pod
NAME READY STATUS RESTARTS AGE
deploy-8d545c96d-6vmnd 1/1 Running 0 49s
deploy-8d545c96d-l4kx4 1/1 Running 0 49s
deploy-8d545c96d-nk25r 1/1 Running 0 49s
在该例中:
- 创建了名为deploy(由
.metadata.name
字段标明)的deployment - 该deployment创建三个(由
replicas
字段标明)pod副本 selector
字段定义 Deployment 如何查找要管理的 Pods。 在这里,你选择在 Pod 模板中定义的标签(app: nginx
)。 不过,更复杂的选择规则是也可能的,只要 Pod 模板本身满足所给规则即可。template
字段包含以下子字段:- Pod 被使用
labels
字段打上app: nginx
标签。 - Pod 模板规约(即
.template.spec
字段)指示 Pods 运行一个nginx
容器, 该容器运行版本为 1.14.2 的nginx
Docker Hub镜像。 - 创建一个容器并使用
name<
- Pod 被使用