K8S实践Ⅲ(Pod控制器)

一、Deployment

Deployment的主要功能就是自动部署一个容器应用的多份副本,以及持续监控副本的数量,在集群内始终维持用户指定的副本数量

1.配置参数

Selector(选择器):
  .spec.selector是可选字段,用来指定 label selector ,圈定Deployment管理的pod范围。如果被指定, .spec.selector 必须匹配 .spec.template.metadata.labels,否则它将被API拒绝。如果 .spec.selector 没有被指定, .spec.selector.matchLabels 默认是.spec.template.metadata.labels。

2.Deployment配置实例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
        app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
# kubectl get deploy
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           58s
# kubectl get pods
NAME                               READY   STATUS             RESTARTS   AGE
liveness-http                      0/1     CrashLoopBackOff   473        28h
nginx-deployment-6dd86d77d-6hk7w   1/1     Running            0          71s
nginx-deployment-6dd86d77d-mxr8l   1/1     Running            0          71s
nginx-deployment-6dd86d77d-xxhpd   1/1     Running            0          71s
# kubectl get pods --show-labels
NAME                               READY   STATUS    RESTARTS   AGE    LABELS
nginx-deployment-6dd86d77d-6hk7w   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-mxr8l   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d
nginx-deployment-6dd86d77d-xxhpd   1/1     Running   0          2m5s   app=nginx,pod-template-hash=6dd86d77d

当 Deployment 创建或者接管 ReplicaSet 时,Deployment controller 会自动为 Pod 添加 pod-template-hash label。这样做的目的是防止 Deployment 的子ReplicaSet 的 pod 名字重复

3.Deployment更新升级

现将nginx镜像更新为1.9.1版本,可以通过kubectl set image命令为Deployment设置新的镜像版本

# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
deployment.extensions/nginx-deployment image updated
# kubectl rollout status deployment/nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out
# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6dd86d77d    0         0         0       70m
nginx-deployment-784b7cc96d   3         3         3       21m

# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-784b7cc96d-4575d   1/1     Running   0          2m13s
nginx-deployment-784b7cc96d-c98s8   1/1     Running   0          91s
nginx-deployment-784b7cc96d-r6sm9   1/1     Running   0          2m51s
#此处名称已经更新

查看Deployment详细信息

# kubectl describe deployment/nginx-deployment
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 1
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 2
  Normal  ScalingReplicaSet  17m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 2
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 1
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled up replica set nginx-deployment-784b7cc96d to 3
  Normal  ScalingReplicaSet  16m   deployment-controller  Scaled down replica set nginx-deployment-6dd86d77d to 0

另一种更新方法是使用kubectl edit命令修改 Deployment配置:
#kubectl edit deployment/nginx-deployment

4.Deployment版本回滚
查看deployment升级记录

# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
  • 默认情况下,kubernetes 会在系统中保存前两次 Deployment 的 rollout 历史记录,可以修改revision history limit来更改保存的revision数。
  • 这里在创建Deployment时没有增加--record参数,所以并不能看到revision的变化。在创建 Deployment 的时候加上--record参数就可以看到每个版本使用的命令。
  • Deployment的更新操作是在进行rollout时触发的,这意味着当且仅当 Deployment 的 Pod template(如.spec.template)被更改时才会创建新的revision,其他的更新操作(增加副本数)将不会触发Deployment的更新操作,这意味着当回滚到之前的版本时,只有 Deployment 中的 Pod template 部分才会回退。

查看特点版本的详细信息

# kubectl rollout history deployment/nginx-deployment --revision=2

回滚至上一个版本

# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back

也可以使用--to-revision参数指定某个历史版本

# kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment.extensions/nginx-deployment rolled back

5.Deployment暂停和恢复

原文地址:https://blog.51cto.com/lullaby/2406041

时间: 2024-11-09 15:34:02

K8S实践Ⅲ(Pod控制器)的相关文章

k8s之pod控制器

Pod控制器类型: ReplicationController  à Replicaset Replicaset:维持用户期望的pod副本数  标签选择器:以便选定由自己选定管理的pod副本  pod资源模板:完成pod资源的新建 特点:管理无状态的pod资源,精确反映用户所定义的目标数量 K8s不建议直接使用Replicaset,而是使用Deployment Deployment:工作在replicaset上,通过控制replicaset来控制pod Deployment具备replicase

k8s的pod控制器

pod控制器 二.ReplicaSet控制器 三.Deployment控制器 Replicas(副本数量): Selector(选择器): Pod Template(Pod模板): strategy(更新策略): revisionHistoryLimit(历史版本记录): rollbackTo: progressDeadlineSeconds: paused: 3.Deployment更新升级 4.Deployment扩容 5.修改滚动更新策略 6.金丝雀发布 7.Deployment版本回退

k8s实践(四):Controller

环境说明: 主机名 操作系统版本 ip docker version kubelet version 配置 备注 master Centos 7.6.1810 172.27.9.131 Docker 18.09.6 V1.14.2 2C2G 备注 node01 Centos 7.6.1810 172.27.9.135 Docker 18.09.6 V1.14.2 2C2G 备注 node02 Centos 7.6.1810 172.27.9.136 Docker 18.09.6 V1.14.2

k8s实践(七):存储卷和数据持久化(Volumes and Persistent Storage)

环境说明: 主机名 操作系统版本 ip docker version kubelet version 配置 备注 master Centos 7.6.1810 172.27.9.131 Docker 18.09.6 V1.14.2 2C2G master主机 node01 Centos 7.6.1810 172.27.9.135 Docker 18.09.6 V1.14.2 2C2G node节点 node02 Centos 7.6.1810 172.27.9.136 Docker 18.09.

还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)

作者 | 阿里云售后技术专家?声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较为晦涩的机制,不易理解.但是,我们又不能绕过控制器,因为它是集群的"大脑".今天这篇文章,作者通过分析一个简易冰箱的设计过程,来帮助读者深入理解集群控制器的产生,功能以及实现方法. K8s 集群核心组件大图 下图是 K8s 集群的核心组件,包括数据库 etcd,调度器 Scheduler,

k8s实践(八):ConfigMap and Secret

环境说明: 主机名 操作系统版本 ip docker version kubelet version 配置 备注 master Centos 7.6.1810 172.27.9.131 Docker 18.09.6 V1.14.2 2C2G master主机 node01 Centos 7.6.1810 172.27.9.135 Docker 18.09.6 V1.14.2 2C2G node节点 node02 Centos 7.6.1810 172.27.9.136 Docker 18.09.

Kubernetes/7.Pod控制器-Deployment

Pod控制器-Deployment 本章节开始,将对控制器逐个进行讲解和分析,我们先讲解最基础且最常用的控制器:Deployment! 控制器对象的分类 What is Deployment? Deployment的更新机制 ReplicaSet 命令补充 Deployment-demo 备注 1.控制器对象的分类 1.守护进程型 1.无状态应用:非系统级应用(Nginx等) 推荐使用:Deployment,ReplicaSet 2.无状态应用:系统级应用 应用场景:日志和监控收集客户端:场景就

Kubernetes/8.Pod控制器-DaemonSet

Pod控制器-DaemonSet 本章节给你带来第二个控制器:DaemonSet的讲解.你将了解到:什么是DaemonSet,以及他的配置实战,最后我还引出了污点和容忍度的专有名词,如果你已经有了一定的基础,可以选择性地直接去阅读该章节(看个人). What is DaemonSet? 命令补充 实战配置 知识点补充 备注 1.What is DaemonSet? DaemonSet是一个确保每个符合规则的node节点有且仅有一个Pod的控制器.你要注意以下两点: 1.新节点加入集群,也会新增一

Kubernetes之标签与Pod控制器详解

一.标签 标签的主要作用:解决同类型的资源对象越来越多,为了更好的管理,按照标签分组: 常用的标签分类:release(版本):stable(稳定版).canary(金丝雀版本.可以理解为测试版).beta(测试版)environment(环境变量):dev(开发).qa(测试).production(生产)application(应用):ui.as(应用软件).pc.sctier(架构层级):frontend(前端).backend(后端).cache(缓存.隐藏)partition(分区):

Kubernetes Pod 控制器

在机器人技术和自动化中,控制环是一个控制系统状态的不终止的循环 这是一个控制环的例子:"房间里的温度自动调节器"当你设置了温度,告诉了温度自动调节器你的"期望状态",房间的实际温度是"当前状态".通过对设备的开关控制,温度自动调节器让其当前状态无限接近于期望状态.控制器通过 k8s的apiserver 去监控集群的公共状态,并致力于将当前状态转变为所期望的状态. 中文参考官方:怎么描述Kubernetes架构控制器的 kubernetes 之Po