Deployment 管理

最近更新时间:2024-07-30 17:06:21

我的收藏

简介

Deployment 声明了 Pod 的模板和控制 Pod 的运行策略,适用于部署无状态的应用程序。您可以根据业务需求,对 Deployment 中运行的 Pod 的副本数、调度策略、更新策略等进行声明。

Deployment 控制台操作指引

创建 Deployment

1. 登录容器服务控制台,选择左侧导航栏中的 集群
2. 单击需要创建 Deployment 的集群 ID,进入集群的基本信息页面。
3. 在左侧导航栏选择工作负载 > Deployment
4. 单击新建,进入新建 Deployment 页面。根据实际需求,设置 Deployment 参数。关键参数信息如下:
名称:自定义工作负载名称。
命名空间:根据实际需求进行选择。
Labels:一个键 - 值对(Key-Value),用于对资源进行分类管理。
数据卷(选填):为容器提供存储,目前支持临时路径、主机路径、云硬盘数据卷、文件存储 NFS、配置文件、PVC,还需挂载到容器的指定路径中。
实例内容器:根据实际需求,为 Deployment 的一个 Pod 设置一个或多个不同的容器。
名称:自定义。
镜像:根据实际需求进行选择。
镜像版本(Tag):根据实际需求进行填写。
镜像拉取策略:提供以下3种策略,请按需选择。 若不设置镜像拉取策略,当镜像版本为空或 latest 时,使用 Always 策略,否则使用 IfNotPresent 策略。
Always:总是从远程拉取该镜像。
IfNotPresent:默认使用本地镜像,若本地无该镜像则远程拉取该镜像。
Never:只使用本地镜像,若本地没有该镜像将报异常。
环境变量:设置容器中的变量。
CPU/内存限制:可根据 Kubernetes 资源限制 进行设置 CPU 和内存的限制范围,提高业务的健壮性。
GPU 资源:配置该工作负载使用的最少 GPU 资源。
高级设置:可设置工作目录运行命令运行参数容器健康检查特权级等参数。
实例数量:根据实际需求选择调节方式,设置实例数量。
手动调节:设定实例数量,可单击“+”或“-”控制实例数量。
自动调节:满足任一设定条件,则自动调节实例(pod)数目。详情请参见 自动伸缩
镜像访问凭证:默认无需配置访问凭证,工作负载会基于镜像地址中的域名,自动匹配命名空间下已有的访问凭证。也支持手动指定一个或多个访问凭证,以及新建访问凭证。
5. 单击创建 Deployment,完成创建。如下图所示: 当运行数量 = 期望数量时,即表示 Deployment 下的所有 Pod 已创建完成。



更新 Deployment

更新 YAML

1. 登录容器服务控制台,选择左侧导航栏中的 集群
2. 单击集群 ID,进入集群的基本信息页面。
3. 在左侧导航栏选择工作负载 > Deployment,在需要更新 YAML 的 Deployment 行中,单击更多 > 编辑 yaml
4. 编辑 Yaml 页面中进行编辑,单击完成

更新 Pod 配置

1. 在集群管理页面,单击集群 ID,进入集群的基本信息页面。
2. 在左侧导航栏选择工作负载 > Deployment,在需要更新 Pod 配置的 Deployment 行中,单击更新 Pod 配置。如下图所示:


3. 更新 Pod 配置页面,根据实际需求修改更新方式,设置参数。
4. 单击更新 Pod 配置即可。

回滚 Deployment

1. 登录容器服务控制台,选择左侧导航栏中的 集群
2. 单击集群 ID,进入集群的基本信息页面。
3. 在左侧导航栏选择工作负载 > Deployment,单击需要回滚的 Deployment 名称,进入 Deployment 信息页面。
4. 选择修订历史页签,在需要回滚的版本行中,单击回滚。如下图所示:


5. 在弹出的回滚资源提示框中,单击确定即可完成回滚。

调整 Pod 数量

1. 登录容器服务控制台,选择左侧导航栏中的 集群
2. 单击集群 ID,进入集群的基本信息页面。
3. 在左侧导航栏选择工作负载 > Deployment,在需要调整 Pod 数量的 Deployment 行中,单击更新 Pod 数量。如下图所示:


4. 更新 Pod 数量页面,根据实际需求调整 Pod 数量,单击更新实例数量即可完成调整。

Kubectl 操作 Deployment 指引

YAML 示例

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
说明:
kind:标识 Deployment 资源类型。
metadata:Deployment 的名称、Namespace、Label 等基本信息。
metadata.annotations:对 Deployment 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
spec.replicas:Deployment 管理的 Pod 数量。
spec.selector:Deployment 管理 Selector 选中的 Pod 的 Label。
spec.template:Deployment 管理的 Pod 的详细模板配置。
更多参数详情可查看 Kubernetes Deployment 官方文档

Kubectl 创建 Deployment

1. 参考 YAML 示例,准备 Deployment YAML 文件。
2. 安装 Kubectl,并连接集群。操作详情请参见 通过 Kubectl 连接集群
3. 执行以下命令,使用准备好的 YAML 文件创建 Deployment:
kubectl create -f Deployment YAML 文件名称
例如,使用一个文件名为 nginx.yaml 的 Deployment YAML 文件,则执行以下命令:
kubectl create -f nginx.yaml
4. 执行以下命令,验证 Deployment 是否创建成功:
kubectl get deployments
返回类似以下信息,即表示创建成功。
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
first-workload 1 1 1 0 6h
ng 1 1 1 1 42m

Kubectl 更新 Deployment

通过 Kubectl 更新 Deployment 有以下三种方法:
说明:
方法一方法二均支持 RecreateRollingUpdate 两种更新策略。
Recreate 更新策略为先销毁全部 Pod,再重新创建 Deployment。
RollingUpdate 更新策略为滚动更新策略,逐个更新 Deployment 的 Pod。RollingUpdate 还支持暂停、设置更新时间间隔等。
方法一
方法二
方法三
执行以下命令,更新 Deployment。
kubectl edit deployment/[name]
此方法适用于简单的调试验证,不建议在生产环境中直接使用。您可以通过此方法更新任意的 Deployment 参数。
执行以下命令,更新指定容器的镜像。
kubectl set image deployment/[name] [containerName]=[image:tag]
建议保持 Deployment 的其他参数不变,业务更新时,仅更新容器镜像。
执行以下命令,滚动更新指定资源。
kubectl rolling-update [NAME] -f FILE

Kubectl 回滚 Deployment

1. 执行以下命令,查看 Deployment 的更新历史。
kubectl rollout history deployment/[name]
2. 执行以下命令,查看指定版本详情。
kubectl rollout history deployment/[name] --revision=[REVISION]
3. 执行以下命令,回滚到前一个版本。
kubectl rollout undo deployment/[name]
如需指定回滚版本号,可执行以下命令。
kubectl rollout undo deployment/[name] --to-revision=[REVISION]

Kubectl 调整 Pod 数量

手动更新 Pod 数量
自动更新 Pod 数量
执行以下命令,手动更新 Pod 数量。
kubectl scale deployment [NAME] --replicas=[NUMBER]
前提条件
开启集群中的 HPA 功能。您在容器服务 TKE 中创建的集群默认开启 HPA 功能。
操作步骤
执行以下命令,设置 Deployment 的自动扩缩容。
kubectl autoscale deployment [NAME] --min=10 --max=15 --cpu-percent=80

Kubectl 删除 Deployment

执行以下命令,删除 Deployment。
kubectl delete deployment [NAME]