创建无状态负载(Deployment)
操作场景
在运行中始终不保存任何数据或状态的工作负载称为“无状态负载 Deployment”,例如nginx。您可以通过控制台或kubectl命令行创建无状态负载。
前提条件
- 在创建容器工作负载前,您需要存在一个可用集群。若没有可用集群 ,请参照创建集群中内容创建。
- 若工作负载需要被外网访问,请确保集群中至少有一个节点已绑定弹性IP,或已创建负载均衡实例。
单个实例(Pod)内如果有多个容器,请确保容器使用的端口不冲突 ,否则部署会失败。
通过控制台创建
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建负载”。
- 配置工作负载的信息。
基本信息容器配置
- 容器信息
Pod中可以配置多个容器,您可以单击右侧“添加容器”为Pod配置多个容器。
- 基本信息:配置容器的基本信息。
参数
说明
容器名称
为容器命名。
更新策略
镜像更新/拉取策略。可以勾选“总是拉取镜像”,表示每次都从镜像仓库拉取镜像;如不勾选则优使用节点已有的镜像,如果没有这个镜像再从镜像仓库拉取。
镜像名称
单击后方“选择镜像”,选择容器使用的镜像。
如果需要使用第三方镜像,请参见使用第三方镜像。
镜像版本
选择需要部署的镜像版本。
CPU配额
- 申请:容器需要使用的最小CPU值,默认0.25Core。
- 限制:允许容器使用的CPU最大值。建议设容器配额的最高限额,避免容器资源超额导致系统故障。
如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。
内存配额
- 申请:容器需要使用的内存最小值,默认512MiB。
- 限制:允许容器使用的内存最大值。如果超过,容器会被终止。
如不填写申请值和限制值,表示不限制配额。申请值和限制值的配置说明及建议请参见设置容器规格。
GPU配额(可选)
当集群中包含GPU节点时,才能设置GPU配额,且集群中需安装gpu-device-plugin插件。
- 不限制:表示不使用GPU。
- 独享:单个容器独享GPU。
- 共享:容器需要使用的GPU百分比,例如设置为10%,表示该容器需使用GPU资源的10%。
关于如何在集群中使用GPU,请参见使用Kubernetes默认GPU调度。
特权容器(可选)
特权容器是指容器里面的程序具有一定的特权。
若选中,容器将获得超级权限,例如可以操作宿主机上面的网络设备、修改内核参数等。
初始化容器(可选)
选择容器是否作为初始化(Init)容器。初始化(Init)容器不支持设置健康检查。
Init容器是一种特殊容器,可以在Pod中的其他应用容器启动之前运行。每个Pod中可以包含多个容器,同时Pod中也可以有一个或多个先于应用容器启动的Init容器,当所有的Init 容器运行完成时,Pod中的应用容器才会启动并运行。详细说明请参见Init 容器。
- 生命周期(可选):在容器的生命周期的特定阶段配置需要执行的操作,例如启动命令、启动后处理和停止前处理,详情请参见设置容器生命周期。
- 健康检查(可选):根据需求选择是否设置存活探针、就绪探针及启动探针,详情请参见设置容器健康检查。
- 环境变量(可选):支持通过键值对的形式为容器运行环境设置变量,可用于把外部信息传递给Pod中运行的容器,可以在应用部署后灵活修改,详情请参见设置环境变量。
- 数据存储(可选):在容器内挂载本地存储或云存储,不同类型的存储使用场景及挂载方式不同,详情请参见存储。
负载实例数大于1时,不支持挂载云硬盘类型的存储。
- 安全设置(可选):对容器权限进行设置,保护系统和其他容器不受其影响。请输入用户ID,容器将以当前用户权限运行。
- 容器日志(可选):容器标准输出日志将默认上报至 AOM 服务,无需独立配置。您可以手动配置日志采集路径,详情请参见使用ICAgent采集容器日志。
如需要关闭当前负载的标准输出,您可在标签与注解中添加键为kubernetes.AOM.log.stdout,值为[]的注解,即可关闭当前负载下全部容器的标准输出。该注解的使用方法请参见表1。
- 基本信息:配置容器的基本信息。
- 镜像访问凭证:用于访问镜像仓库的凭证,默认取值为default-secret,使用default-secret可访问SWR镜像仓库的镜像。default-secret详细说明请参见default-secret。
- GPU显卡(可选):默认为不限制。当集群中存在GPU节点时,工作负载实例可以调度到指定GPU显卡类型的节点上。
服务配置(可选)
服务(Service)可为Pod提供外部访问。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以为这些Pod自动实现负载均衡。
您也可以在创建完工作负载之后再创建Service,不同类型的Service概念和使用方法请参见服务概述。
高级配置(可选)- 升级策略:指定工作负载的升级方式及升级参数,支持滚动升级和替换升级,详情请参见工作负载升级策略。
- 调度策略:通过配置亲和与反亲和规则,可实现灵活的工作负载调度,支持节点亲和与Pod亲和/反亲和。详情请参见调度策略(亲和与反亲和)。
- 容忍策略:容忍策略与节点的污点能力配合使用,允许(不强制)负载调度到带有与之匹配的污点的节点上,也可用于控制负载所在的节点被标记污点后负载的驱逐策略,详情请参见容忍策略。
- 标签与注解:以键值对形式为工作负载Pod添加标签或注解,填写完成后需单击“确认添加”。关于标签与注解的作用及配置说明,请参见标签与注解。
- DNS配置:为工作负载单独配置DNS策略,详情请参见工作负载DNS配置说明。
- 网络配置:
- Pod入/出口带宽限速:支持为Pod设置入/出口带宽限速,详情请参见Pod互访QoS限速。
- 容器信息
- 单击右下角“创建工作负载”。
通过kubectl命令行创建
本节以nginx工作负载为例,说明kubectl命令创建工作负载的方法。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建一个名为nginx-deployment.yaml的描述文件。其中,nginx-deployment.yaml为自定义名称,您可以随意命名。
vi nginx-deployment.yaml
描述文件内容如下。此处仅为示例,deployment的详细说明请参见kubernetes官方文档。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx #若使用“我的镜像”中的镜像,请在SWR中获取具体镜像地址。 imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret
以上yaml字段解释如表1。
表1 deployment字段详解 字段名称
字段说明
必选/可选
apiVersion
表示API的版本号。
说明:请根据集群版本输入:
- 1.17及以上版本的集群中无状态应用apiVersion格式为apps/v1
- 1.15及以下版本的集群中无状态应用apiVersion格式为extensions/v1beta1
必选
kind
创建的对象类别。
必选
metadata
资源对象的元数据定义。
必选
name
deployment的名称。
必选
spec
用户对deployment的详细描述的主体部分都在spec中给出。
必选
replicas
实例数量。
必选
selector
定义Deployment可管理的容器实例。
必选
strategy
升级类型。当前支持两种升级方式,默认为滚动升级。
- RollingUpdate:滚动升级。
- ReplaceUpdate:替换升级。
可选
template
描述创建的容器实例详细信息。
必选
metadata
元数据。
必选
labels
metadata.labels定义容器标签。
可选
spec:
containers
- image(必选):容器镜像名称。
- imagePullPolicy(可选):获取镜像的策略,可选值包括Always(每次都尝试重新下载镜像)、Never(仅使用本地镜像)、IfNotPresent(如果本地有该镜像,则使用本地镜像,本地不存在时下载镜像),默认为Always。
- name(必选):容器名称。
必选
imagePullSecrets
Pull镜像时使用的secret名称。若使用私有镜像,该参数为必选。
- 需要Pull SWR容器镜像仓库的镜像时,参数值固定为default-secret。
- 当Pull第三方镜像仓库的镜像时,需设置为创建的secret名称。
可选
- 创建deployment。
kubectl create -f nginx-deployment.yaml
回显如下表示已开始创建deployment。
deployment "nginx" created
- 查看deployment状态。
kubectl get deployment
deployment状态显示为Running,表示deployment已创建成功。
NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 4m5s
参数解析:
- NAME:工作负载名称。
- READY:表示工作负载的可用状态,显示为“可用Pod个数/期望Pod个数”。
- UP-TO-DATE:指当前已经完成更新的副本数。
- AVAILABLE:可用的Pod个数。
- AGE:已经运行的时间。
- 若工作负载(即deployment)需要被访问(集群内访问或节点访问),您需要设置访问方式,具体请参见网络创建对应服务。