Deployment管理
概述
用户可以通过表单方式基于镜像创建部署,也可以通过百度智能云提供的 YAML 文件模板创建和修改部署,对已部署应用的资源进行实时监控,同时还可以便捷地对应用及其所关联的服务(Service)、容器组(Pod)的生命周期和部署方式进行控制管理。
前提条件
- 已成功创建 CCE 集群,操作说明参见 创建 CCE 集群。
创建无状态工作负载(Deployment)
用户可以选择通过 CCE 控制台使用表单形式或者通过 yaml 形式创建新的无状态工作负载,也可以选择通过 kubectl 命令创建。
方式一:通过控制台表单形式创建
- 登录 容器引擎CCE控制台。
- 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
- 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 点击无状态工作负载列表左上角新建无状态,进入创建工作负载页面。
- 在基本信息模块完成相关配置,点击下一步进入容器配置。
| 参数 | 说明 | 
|---|---|
| 工作负载名称 | 根据系统提示,配置工作负载的名称。在同一个命名空间下,名称必须唯一。 | 
| 命名空间 | 选择工作负载部署的命名空间,默认为default。支持选择自定义创建的命名空间,自定义命名空间,请参见 命名空间操作。 | 
| 工作负载类型 | 选择无状态工作负载Deployment。 | 
| 期望 Pod 数 | 输入工作负载的 Pod 实例个数。 | 
| K8s标签 | 指定工作负载的标签,对应 Kubernetes 中的 Label,用于识别工作负载的键值对,配合选择器,帮助 Kubernetes 快速筛选目标工作负载。详细信息参考K8S 标签说明。 | 
| 注释(Annotation) | 指定工作负载的注解信息,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。详细信息参考K8S 注释说明。 | 
- 
在容器配置模块完成相关配置,填写容器名称和镜像地址时,可点击选择镜像后在弹窗中选择 CCR 中的镜像地址。点击下一步进入高级配置模块。 说明: - Pod 中可以配置多个容器,您可以单击右侧“添加容器”为 Pod 配置多个容器。
- 若使用了私有镜像,需在当前页面的高级设置中配置仓库访问凭证。
 
| 参数 | 说明 | 
|---|---|
| 容器名称 | 根据系统提示的命名规则,输入容器名称。同一个工作负载下容器名称必须唯一。 | 
| 镜像地址 | 单击后方“选择镜像”,选择容器使用的镜像。支持选择以下两种种类型的镜像。 
 | 
| 镜像版本 | 选择需要部署的镜像版本。 | 
| 镜像拉取策略 | 选择镜像拉取策略。CCE 支持以下三种镜像拉取策略(imagePullPolicy): 
 | 
| 容器配额 | 配置容器资源的resources.limits和容器资源的resources.requests。如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议,请参见Requests and Limits。 
 
 
 | 
| 容器端口 | 设置容器端口名称、协议、端口。 | 
| 环境变量 | 单击 添加环境变量,配置环境变量。Kubernetes 在创建 Pod 时,会将环境变量的信息注入到容器中。 支持以下类型: | 
| 容器启动项 | 为容器添加启动项参数,当前支持以下容器启动项参数: kubectl exec -i -t命令的交互式操作,但区别在于该参数在Pod启动时就已经配置完成。 | 
| 特权容器 | 默认不开启。开启后,特权模式允许容器拥有与所在的Worker节点操作系统近似的权限,例如访问硬件设备、挂载文件系统等。 | 
| 初始化容器 | 默认不开启。选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。 | 
| 健康检查 | 支持配置存活检查、就绪检查和启动检查。允许基于HTTP请求检查、TCP端口检查、执行命令检查和GRCP检查的方式,探测容器中的负载是否正常。以下以配置存活检查为例,介绍配置参数。 
 
 
 
 
 | 
| 生命周期 | 在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。 | 
| 数据卷 | 支持为容器挂载不同类型的数据卷进行数据持久化,支持通过subPath方式挂载卷的子路径;支持通过subPathExpr方式挂载卷的扩展路径: cm1:path1;cm2:path2。sc1:path1;sc2:path2。 | 
| 仓库访问凭证 | 若有容器使用了私有镜像,请务必添加对应的镜像仓库的访问凭证。支持新建访问凭证和选择已有的,详细信息参考配置访问凭证。 | 
- 在高级设置模块中,配置伸缩策略、更新策略和调度策略,点击完成进行工作负载的创建。
| 参数 | 说明 | 
|---|---|
| 伸缩配置 | 支持两种伸缩配置:水平伸缩和定时水平伸缩。 
 | 
| 更新策略 | Pod配置发生变更时,工作负载使用新Pod替换旧Pod的机制,包含两种策略: 
 
 | 
| 调度策略 | 通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持负载亲和与节点亲和。 
 
 
 | 
| Pod标签 | 为该工作负载所属的每个Pod添加标签,对应 Kubernetes 中的 Label,用于识别Pod的键值对,配合选择器,帮助 Kubernetes 快速筛选目标Pod。详细信息参考K8S 标签说明。 | 
| Pod注释 | 为该工作负载所属的每个Pod添加注解,对应 Kubernetes 中的 Annotation,主要记录用于应用部署、安全策略、调度策略的附加信息,不用于标识和区分资源。详细信息参考K8S 注释说明。 | 
方式二:通过 YAML 创建
- 点击部署列表左上角使用YAML创建,进入新建工作负载页面。
- 点击下拉列表选择命名空间,填写 yaml 文件,点击确定。
说明:
- 模板类型:可使用示例模板或“我的模板”创建。
- 复制:复制当前 YAML 文件的内容。
- 另存为:将当前文件模版另存为“我的模版”。
- 取消:返回列表页。
工作负载YAML示例
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: deployment-example
5  labels:
6    app: nginx
7spec:
8  replicas: 2
9  minReadySeconds: 0
10  strategy:
11    type: RollingUpdate # 策略:滚动更新
12    rollingUpdate:
13      maxSurge: 25%
14      maxUnavailable: 25%
15  selector:
16    matchLabels:
17      app: nginx
18  template:
19    metadata:
20      labels:
21        app: nginx
22    spec:
23      restartPolicy: Always
24      # restartPolicy: OnFailure
25      # restartPolicy: Never
26      containers:
27        - name: nginx
28          image: registry.baidubce.com/cce/nginx-alpine-go:latest
29          imagePullPolicy: Always
30          # imagePullPolicy: IfNotPresent
31          # imagePullPolicy: Never
32          ports:
33            - containerPort: 80
34          resources: # 资源限制
35            limits:
36              cpu: 250m
37              memory: 512Mi
38            requests:
39              cpu: 250m
40              memory: 512Mi
41          livenessProbe: # 健康检查:存活探针
42            httpGet:
43              path: /
44              port: 80
45            initialDelaySeconds: 20
46            timeoutSeconds: 5
47            periodSeconds: 5
48          readinessProbe: # 健康检查:就绪探针
49            httpGet:
50              path: /
51              port: 80
52            initialDelaySeconds: 5
53            timeoutSeconds: 1
54            periodSeconds: 5
55          # volumeMounts:
56          #   - name: nginx-volume
57          #     mountPath: "/usr/share/nginx"
58      # volumes:
59      #   - name: nginx-volume
60      #     flexVolume:
61      #       driver: "baidubce/cds"
62      #       fsType: "ext4"
63      #       options:
64      #         volumeID: "{id}" # 填写cds的id,注意:cds必须和pod在同一可用区!!
65      # nodeSelector:
66      #   beta.kubernetes.io/os: linux
67      # tolerations: # 容忍污点
68      #   - effect: NoExecute
69      #     operator: Exists
70      #   - effect: NoSchedule
71      #     operator: Exists
72      # affinity: # 亲和性
73      #   nodeAffinity:
74      #     requiredDuringSchedulingIgnoredDuringExecution:
75      #       nodeSelectorTerms:
76      #         - matchExpressions:
77      #             - key: failure-domain.beta.kubernetes.io/zone
78      #               operator: In
79      #               values:
80      #                 - zoneA
81      #                 - zoneB
82      #                 - zoneC方式三:通过 kubectl 创建
- 准备 Deployment yaml 文件。
- 安装 kubectl,并连接集群,详情参见 通过 kubectl 连接集群。
- 复制下方的YAML文件,并保存到 deployment.yaml中。下方的YAML中定义了一个Deployment以及用于ClusterIP类型Service。
1apiVersion: apps/v1
2kind: Deployment    # 工作负载类型
3metadata:
4  name: nginx-test
5  namespace: default  # 根据需要更改命名空间
6  labels:
7    app: nginx
8spec:
9  replicas: 2  # 指定Pod数量
10  selector:
11    matchLabels:
12      app: nginx
13  template: # Pod配置
14    metadata:
15      labels: # Pod标签
16        app: nginx 
17    spec:
18      containers:
19      - name: nginx  # 容器名称
20        image: registry.baidubce.com/cce/nginx-alpine-go:latest # 使用特定版本的 Nginx 镜像
21        ports:
22        - containerPort: 80  # 容器暴露的端口
23          protocol: TCP  # 指定协议为 TCP/UDP,默认也是 TCP
24---
25# service
26apiVersion: v1
27kind: Service
28metadata:
29  name: nginx-test-svc
30  namespace: default  # 根据需要更改命名空间
31  labels:
32    app: nginx
33spec:
34  selector:
35    app: nginx  # 匹配标签,确保服务指向正确的 Pods
36  ports:
37    - port: 80           # Service 在集群内提供的端口
38      targetPort: 80     # 指向容器内部应用程序监听的端口 (containerPort)
39      protocol: TCP      # 协议,默认是 TCP
40  type: ClusterIP      # 服务类型,默认是 ClusterIP,内部访问
41  sessionAffinity: None # 默认值,不使用客户端会话亲和性- 
执行以下命令,创建Deployment及Service。 Bash1kubectl apply -f deployment.yaml预期输出: Bash1deployment.apps/nginx-test created 2service/nginx-test-svc created
- 
执行以下命令,查看Service的公网IP地址 Bash1kubectl get svc
- 
执行以下命令,验证 Deployment 是否创建成功: Bash1 kubectl get deployments
 
查看工作负载详情
点击列表页任何一行的工作负载名称,即可进入工作负载详情页,详情页内容包括: 工作负载详情、关联容器组、关联服务、更新升级、伸缩策略、调度策略、监控、事件等信息。
 
更新 Pod 数
支持通过控制台快速更新无状态负载中的 Pod 实例个数。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 在目标无状态负载的列表,点击需要调整的无状态行中的“伸缩”,在伸缩的弹框页中,填写需要的容器组数量,点击“确认”。
更新无状态工作负载
支持通过控制台界面或 YAML 文件编辑已创建的无状态负载。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态负载。
- 在目标无状态负载的操作列,单击 更新升级 或 编辑 YAML。
说明:
通过控制台界面更新和编辑 YAML 文件更新,均不支持更新无状态负载名称、命名空间。
1a. 更新:在控制台更新配置信息。详细的参数说明,请参见 [通过控制台创建](https://cloud.baidu.com/doc/CCE/s/cjxpoxrgi)。<br>
2b. 编辑 YAML:编辑 YAML 文件更新配置信息。详细的 YAML 配置说明,请参见[通过 YAML 创建](https://cloud.baidu.com/doc/CCE/s/cjxpoxrgi)。<br>- 更新完成后,单击提交。
重启工作负载
支持通过控制台重启无状态负载。重启后,将重启工作负载下的全部容器组(Pod)。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 选择“无状态”页签,单击工作负载后的“更多 > 重启”。
- 在弹出的提示框中单击“确认”,即可完成工作负载的重启。
标签注解管理
标签是以key/value键值对的形式附加在无状态工作负载上的。添加标签后,可通过标签对无状态工作负载进行管理和选择。您可以给多个工作负载打标签,也可以给指定的某个工作负载打标签。
说明:
标签格式要求如下:以字母和数字开头或结尾,由字母、数字、连接符(-)、下划线(_)、点号(.)组成且63字符以内,详细 K8S标签说明。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 选择“无状态”页签,单击工作负载后的“更多 > 标签注解”。
- 单击添加标签,输入键和值后单击更新。
查看监控
您可以通过 CCE 控制台查看工作负载和容器组的 CPU 和内存占用情况,以确定需要的资源规格。
说明:
查看工作负载的监控信息时,依赖集群接入 Prometheus 监控服务。若集群未接入Prometheues 监控服务,请根据界面提示接入,详细信息请参见使用Prometheus监控集群。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 在目标无状态负载的列表,点击需要调整的无状态行中的“监控”。
- 在监控页面查看无状态负载的监控数据。容器相关监控指标说明,请参见 监控指标说明。
查看日志
您可以通过“日志”功能查看无状态工作负载的日志信息。
说明:
当前显示的日志内容为容器标准输出日志,不具备持久化和高阶运维能力,如需使用更完善的日志能力,可使用日志中心功能。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 在目标无状态负载的列表,单击工作负载后的“更多 > 日志”。
- 在日志页面查看容器日志数据。
删除无状态负载
若工作负载无需再使用,您可以将工作负载删除。
说明:
删除无状态负载可能导致服务不可用,请谨慎操作。
- 
登录无状态负载管理页面。 a. 登录 容器引擎CCE控制台。 
 b. 在左侧导航栏,点击 "集群管理->集群列表",进入集群列表页,点击集群名称,进入集群管理页面。
 c. 在集群管理页面的左侧导航栏中,单击 工作负载 > 无状态。
- 在目标无状态负载的列表,单击工作负载后的“更多 > 删除”。
- 在系统弹出的二次确认对话框,确认信息后,点击确认。
