问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kubernetes Deployment控制器详解:功能、配置与实验

创作时间:
作者:
@小白创作中心

Kubernetes Deployment控制器详解:功能、配置与实验

引用
CSDN
1.
https://blog.csdn.net/weixin_45403773/article/details/121552675

Kubernetes(简称K8S)作为容器编排和自动化运维的开源平台,其核心功能之一就是通过控制器来管理多个Pod。本文将详细介绍Kubernetes中的Deployment控制器,包括其功能、配置方法以及实际操作示例。

一、引入Deployment

对于Kubernetes来说,Pod是资源调度的最小单元。Kubernetes主要通过控制器来管理多个Pod,其中Deployment和ReplicaSet(RS)是最常见的控制器类型。它们之间的关系如下图所示:

二、Deployment支持的功能

  1. 动态水平的弹性伸缩

容器相比虚拟机的最大优势在于可以灵活地进行弹性伸缩。在Kubernetes中,这一功能由控制器实现。Deployment的弹性伸缩本质上是指RS下Pod数量的增加或减少。在创建Deployment时会相应创建一个RS,通过RS实现弹性伸缩的自动化部署,并在很短的时间内完成数量变更。弹性伸缩通过修改YAML文件中的replicas参数实现,修改后通过apply命令重新应用即可实现扩容或缩容。

  1. 支持动态的回滚和滚动更新

定义一个Deployment会创建一个新的RS,通过RS创建Pod。删除Deployment控制器时,也会删除所对应的RS及RS下控制的Pod资源。可以说Deployment是建立在RS之上的一种控制器,可以管理多个RS。每次需要更新Pod时,都会自动生成一个新的RS,把旧的RS替换掉。多个RS可以同时存在,但只有一个RS在运行。新RS里的Pod会依次替换旧RS里的Pod,这个过程大约需要10分钟。Deployment还支持回滚到以前的历史版本。

三、Deployment资源清单文件详解

apiVersion: apps/v1            # 版本
kind: Deployment               # 类型
metadata:                      # Deployment的元数据
  name: httpd                  # Deployment的名字
  labels:                      # 标签
    app: httpd                 # 标签app=httpd
spec:                          # Pod的信息
  replicas: 3                  # Pod的副本数
  selector:                    # 标签选择器
    matchLabels:               # 查找匹配的标签
      app: httpd               # app=httpd
  template:                    # Pod的模板信息,根据模板信息来创建Pod
    metadata:                  # Pod的元数据
      labels:                  # Pod的标签
        app: httpd             # 标签app=httpd
    spec:                      # 容器的信息
      containers:              # 容器
- name: httpd            # 容器名
        image: httpd           # 容器所需的镜像
        ports:                 # 端口
- containerPort: 80    # 容器暴露的端口

当需要查看Deployment资源对象的详细组成时,可以使用以下命令:

kubectl explain deployment

可以一级一级地查看,想查看什么只需要在后面加上.字段名即可。例如查看Deployment下的spec字段:

kubectl explain deployment.spec

在编写YAML文件时,需要注意字段之间的等级,每级之间一般用两个空格隔开,文件中不可以出现tab键。当你不清楚要空几个时,可以用kubectl explain命令查一下,看看你加了几个点,点数2=空格数。如kubectl explain deployment.spec,有一个点,那就是12=2,需空两个格。

四、滚动更新及回滚实验

  1. 创建Deployment
  2. 访问其中一个页面内容
  3. 滚动更新:更改镜像
  4. 查看Pod并访问页面内容,可以看到已经改变
  5. 查看历史版本,实现回滚更新,需要大概等10分钟,才能完全完成

查看Deployment的更新记录:

kubectl rollout history deployment nginx-deployment

查看历史版本2的详细信息:

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

回滚到历史版本2:

kubectl rollout undo deployment nginx-deployment --to-revision=2

五、弹性伸缩实验

  1. 创建一个Deployment,4副本:
kubectl apply -f jpzhttpd.yaml
  1. 缩为3副本:
kubectl apply -f jpzhttpd.yaml
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号