无状态工作负载不会保存任何数据或状态,例如Nginx。您可以通过镜像、编排模板及命令行创建一个无状态应用。通过私有镜像创建应用时,您还可以通过容器服务控制台为私有镜像设置密钥,以确保镜像安全。本文介绍如何在容器服务控制台上使用镜像创建无状态应用。
前提条件
已创建 ACK Serverless集群 。具体操作,请参见 创建ACK Serverless集群 。
步骤一:配置应用基本信息
-
登录 容器服务管理控制台 ,在左侧导航栏选择 集群 。
-
在 集群列表 页面,单击目标集群名称,然后在左侧导航栏,选择 。
-
在 无状态 页面,单击 使用镜像创建 。
-
在 应用基本信息 页面,设置应用的基本信息。
在配置Deployment负载之前,您需要在页面顶部设置应用所在的命名空间。本例中设置命名空间为 default ,应用类型为 无状态(Deployment) 。
配置项
描述
应用名称
设置应用的名称。
副本数量
应用包含的Pod数量。
类型
定义资源对象的类型,可选择 无状态(Deployment) 、 有状态(StatefulSet) 、 任务(Job) 、 定时任务(CronJob) 。
标签
为该应用添加一个标签,标识该应用。
注解
为该应用添加一个注解(Annotation)。
-
单击 下一步 。进入 容器配置 页面。
步骤二:配置容器
在 容器配置 页签中,配置容器的镜像与资源、端口、环境变量、健康检查、生命周期、数据卷等。
在 容器配置 页签上方,单击 添加容器 为应用的Pod设置多个容器。
-
在 基本配置 区域,完成容器的基本配置。
配置项
描述
镜像名称
-
选择镜像
您可以单击 选择镜像 ,选择所需的镜像。支持选择以下三种类型的镜像。
-
容器镜像服务企业版 :可以选择托管在容器镜像服务ACR中的企业版镜像。需要选择镜像所属地域,以及镜像服务实例。关于ACR的更多信息,请参见 什么是容器镜像服务ACR 。
-
容器镜像服务个人版 :可以选择托管在容器镜像服务ACR中的个人版镜像。需要选择镜像所属地域,以及镜像服务实例。
-
制品中心 :包含应用容器化基础OS镜像、基础语言镜像、AI/大数据相关镜像,本示例以制品中心的Nginx镜像为例说明。关于制品中心的更多信息,请参见 制品中心 。
说明容器镜像服务ACR提供制品中心便于您的基础镜像使用,这些基础镜像由阿里云或者龙蜥社区做版本更新及安全修复。如果您有额外的镜像需求或者问题,请加入钉钉群33605007047进行咨询。
您还可以填写私有镜像。填写的格式为
domainname/namespace/imagename:tag
。 -
-
选择镜像拉取策略
ACK支持以下三种镜像拉取策略(imagePullPolicy):
-
优先使用本地镜像(IfNotPresent) :如果本地有该镜像(之前拉取过该镜像至宿主机中),则使用本地镜像,本地不存在时拉取镜像。
-
总是拉取镜像(Always) :表示每次部署或扩容都会从容器镜像服务重新拉取镜像,而不会从本地拉取镜像。
-
仅使用本地镜像(Never) :仅使用本地镜像。
说明当您选中 镜像拉取策略 时,默认不设置镜像拉取策略。
-
-
设置镜像密钥
您可以单击 设置镜像密钥 ,为私有镜像设置密钥以确保安全。
-
对于ACR个人版实例,您可以通过设置镜像密钥的方式拉取容器镜像。设置密钥的更多信息,请参见 管理保密字典 。
-
对于ACR企业版实例,您可以通过免密组件拉取镜像。具体操作,请参见 使用免密组件托管版拉取容器镜像 。
-
所需资源
即为该应用预留资源额度,包括 CPU 和 内存 两种资源,即容器独占这些资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。
容器启动项
-
stdin :将控制台输入发送到容器。
-
tty :将标准输入控制台作为容器的控制台输入。
初始化容器
选中该项,表示创建一个Init Container。Init Container包含一些实用的工具。更多信息,请参见 Init Containers 。
-
-
在 端口设置 区域,单击 新增 设置容器的端口。
-
名称 :设置容器端口名称。
-
容器端口 :设置暴露的容器访问端口或端口名,端口号必须介于1~65535。
-
协议 :支持TCP和UDP。
-
-
在 环境变量 区域,单击 新增 设置环境变量。
支持通过键值对的形式为Pod配置环境变量。用于给Pod添加环境标志或传递配置等。更多信息,请参见 Pod variable 。
-
类型 :设置环境变量的类型,支持 自定义 、 配置项 、 保密字典 、 变量/变量引用 和 资源引用 类型。配置项、密钥支持全部文件的引用。以密钥为例,
选择 保密字典 ,选择 变量 ,默认全部文件引用。
对应的YAML,则引用了整个Secret。
-
变量名称 :设置环境变量名称。
-
变量/变量引用 :设置变量引用的值。
-
-
在 健康检查 区域,根据需要开启 存活检查 和 就绪检查 。
说明如需配 置健康检查 ,请在 基础配置 区域,关闭 初始化容器 开关。
关于健康检查的更多信息,请参见 Configure Liveness, Readiness and Startup Probes 。
参数
请求类型
配置说明
-
存活检查 (Liveness):用于检测何时重启容器。
-
就绪检查 (Readiness):确定容器是否已经就绪,且可以接受流量。
-
启动探测 (Startup Probes):用于检测何时启动容器。
说明仅Kubernetes集群1.18及之后版本支持启动探测。
HTTP请求
即向容器发送一个HTTP GET请求,支持的参数包括:
-
协议 : HTTP / HTTPS 。
-
路径 :访问HTTP Server的路径。
-
端口 :容器暴露的访问端口或端口名,端口号必须介于1~65535。
-
Http头 :即HTTP Headers,HTTP请求中自定义的请求头,HTTP允许重复的Header。支持键值对的配置方式。
-
延迟探测时间 (秒):即 initialDelaySeconds ,容器启动后第一次执行探测时需要等待多少秒,默认为3秒。
-
执行探测频率 (秒):即 periodSeconds ,指执行探测的时间间隔,默认为10秒,最小为1秒。
-
超时时间 (秒):即 timeoutSeconds ,探测超时时间。默认1秒,最小1秒。
-
健康阈值 :探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。
-
不健康阈值 :探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。
TCP连接
即向容器发送一个TCP Socket,Kubelet将尝试在指定端口上打开容器的套接字。 如果可以建立连接,容器被认为是健康的,如果不能就认为是失败的。支持的参数包括:
-
端口 :容器暴露的访问端口或端口名,端口号必须介于1~65535。
-
延迟探测时间 (秒):即 initialDelaySeconds ,容器启动后第一次执行探测时需要等待多少秒,默认为15秒。
-
执行探测频率 (秒):即 periodSeconds ,指执行探测的时间间隔,默认为10秒,最小为1秒。
-
超时时间 (秒):即 timeoutSeconds ,探测超时时间。默认1秒,最小1秒。
-
健康阈值 :探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。
-
不健康阈值 :探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。
命令行
通过在容器中执行探针检测命令,来检测容器的健康情况。支持的参数包括:
-
命令行 :用于检测容器健康情况的探测命令。
-
延迟探测时间 (秒):即 initialDelaySeconds ,容器启动后第一次执行探测时需要等待多少秒,默认为5秒。
-
执行探测频率 (秒):即 periodSeconds ,指执行探测的时间间隔,默认为10秒,最小为1秒。
-
超时时间 (秒):即 timeoutSeconds ,探测超时时间。默认1秒,最小1秒。
-
健康阈值 :探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值是1。对于存活检查(liveness)必须是1。
-
不健康阈值 :探测成功后,最少连续探测失败多少次才被认定为失败。默认是3,最小值是1。
-
-
在 生命周期 区域,设置容器的生命周期。
您可以为容器的生命周期配置启动执行、启动后处理和停止前处理。具体操作,请参见 配置生命周期 。
-
启动执行 :为容器设置预启动命令和参数。
-
启动后处理 :为容器设置启动后的命令。
-
停止前处理 :为容器设置预结束命令。
-
-
在 数据卷 区域,增加本地存储、云存储声明PVC(Persistent Volume Claim)或NAS等。
-
在日志服务区域,配置日志相关参数。具体操作,请参见 使用镜像创建 。
-
单击 下一步 ,进行高级设置。
步骤三:完成高级配置
在 高级配置 页签中设置访问、伸缩和标签注解。
-
在 访问设置 区域,设置暴露后端Pod的方式。
说明针对应用的通信需求,您可灵活进行访问设置:
-
内部应用:对于只在集群内部工作的应用,您可以在创建服务时,根据需要选择 虚拟集群IP 或 节点端口 类型的服务,来进行内部通信。
-
外部应用:对于需要暴露到公网的应用,您可以采用两种方式进行访问设置。
-
创建负载均衡类型的服务:您可以在创建服务时,选择 负载均衡 类型的服务。通过阿里云提供的负载均衡服务SLB(Server Load Balancer),使得该服务提供公网访问能力。
-
创建路由(Ingress):通过创建路由(Ingress)提供公网访问能力。更多信息,请参见 Ingress 。
-
您可以设置暴露后端Pod的方式。本例中选择虚拟集群IP和路由(Ingress),构建一个公网可访问的Nginx应用。
-
配置服务(Service):在 服务(Service) 右侧,单击 创建 设置创建服务配置项。
配置项
描述
名称
输入服务的名称。本例为nginx-svc。
类型
选择服务类型,即服务访问的方式。本例中选择 负载均衡 。
-
虚拟集群IP :即ClusterIP,指通过集群的内部IP暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的ServiceType。
说明您的服务类型为 虚拟集群IP 时,才能设置 实例间发现服务(Headless Service) 。
-
负载均衡 :即LoadBalancer,指阿里云提供的负载均衡服务(SLB),可选择公网访问或私网访问。阿里云负载均衡服务可以路由到NodePort服务和ClusterIP服务。
-
新建SLB:您可以通过单击 修改 ,修改SLB规格。
-
使用已有SLB:您可以在已有的列表中选择SLB规格。
说明负载均衡类型支持新建SLB和使用已有SLB,且多个Kubernetes Service可以复用同一个SLB,但是存在以下限制:
-
使用已有的负载均衡实例会强制覆盖已有监听。
-
Kubernetes通过Service创建的SLB不能复用(会导致SLB被意外删除)。只能复用您手动在控制台(或调用OpenAPI)创建的SLB。
-
复用同一个SLB的多个Service不能有相同的前端监听端口,否则会造成端口冲突。
-
复用SLB时,监听的名称以及虚拟服务器组的名称被Kubernetes作为唯一标识符。请勿修改监听和虚拟服务器组的名称。
-
不支持跨集群复用SLB。
-
端口映射
添加服务端口和容器端口。容器端口需要与后端的Pod中暴露的容器端口一致。本文示例值为:
服务端口 :80
容器端口 :80
外部流量策略
-
Local:流量只发给本机的Pod。
-
Cluster:流量可以转发到其他节点上的Pod。
说明您的服务类型为 节点端口 或 负载均衡 时,才能设置 外部流量策略 。
注解
为该服务添加一个注解(annotation),配置负载均衡的参数。例如设置
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20
表示将该服务的带宽峰值设置为20 Mbit/s,从而控制服务的流量。更多信息,请参见 通过Annotation配置传统型负载均衡CLB 。标签
为该服务添加一个标签,标识该服务。
-
-
配置路由(Ingress):在 路由(Ingress) 右侧,单击 创建 设置后端Pod的路由规则。
详细的路由配置信息,请参见 路由配置说明 。
重要通过镜像创建应用时,您仅能为一个服务创建路由(Ingress)。本例中使用一个虚拟主机名称作为测试域名,您需要在Hosts文件中添加一条域名映射( Ingress外部端点 + Ingress域名 )。在实际工作场景中,请使用备案域名。
101.37.XX.XX foo.bar.com #即Ingress的IP。
Ingress的IP获取方式:在应用详情页面,单击 访问方式 页签, 外部端点 显示的IP即为Ingress的IP。
配置项
说明
名称
输入路由的名称。本例为 nginx-ingress 。
规则
路由规则是指授权入站到达集群服务的规则。更多信息,请参见 路由配置说明 。
-
域名 :输入Ingress域名。本例中使用测试域名
foo.bar.com
。 -
路径 :指定服务访问的URL路径,默认为根路径 / ,本例中不做配置。每个路径(Path)都关联一个Backend(服务),在阿里云SLB将流量转发到Backend之前,所有的入站请求都要先匹配域名和路径。
-
服务 :选择服务的名称和对应端口。本例中为 nginx-svc 。
-
开启TLS :配置安全的路由服务。更多信息,请参见 Nginx Ingress高级用法 。
服务权重
设置该路径下多个服务的权重。服务权重采用相对值计算方式,默认值为100。
灰度发布
开启灰度发布开关。此处建议选择社区版。
Ingress Class
自定义Ingress的类。
注解
单击 添加 按钮,输入注解名称和值,即Ingress的Annotation键值对。关于Ingress的注解,请参见 Annotations 。
标签
为Ingress添加对应的标签,标示该Ingress的特点。
-
在 访问设置 区域,您可以看到创建完毕的服务和路由,您可单击 变更 和 删除 进行二次配置。
-
-
在 伸缩配置 区域,勾选是否开启 指标伸缩 和 定时伸缩 ,从而满足应用在不同负载下的需求。
容器服务支持容器组的弹性伸缩,即根据容器CPU和内存资源占用情况自动调整容器组数量。
说明若要启用自动伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。
配置项
说明
指标
支持CPU和内存,需要和设置的所需资源类型相同。
触发条件
资源使用率的百分比,超过该使用量,容器开始扩容。
最大副本数
该应用可扩容的容器数量上限。
最小副本数
该应用可缩容的容器数量下限。
-
在 标签和注释 区域,单击 添加 设置容器组的标签和注释。
-
Pod标签:为该Pod添加一个标签,标识该应用。
-
Pod注解:为该Pod添加一个注解(Annotation)。
-
-
单击 创建 。
步骤四:查看应用
在 创建完成 页签中查看应用任务。
-
在 创建完成 页签中单击 查看应用详情 。您可以看到新建的 serverless-app-svc 出现在无状态列表下。
-
在集群管理页左侧导航栏中,选择 ,可以看到新建的服务 serverless-app-svc 出现在服务列表下。
-
在浏览器中访问外部端点或域名,您可访问Nginx欢迎页,本示例为Nginx。
重要-
浏览器访问时,需保证服务访问的方式为 负载均衡 。
-
使用域名访问时,需配置Host文件。具体操作,请参见 说明 。
-