您可以在安全沙箱Kubernetes集群中使用镜像创建一个可公网访问的Nginx应用。
索引
前提条件
创建一个安全沙箱集群。详情请参见创建安全沙箱节点池。
步骤一:登录容器服务控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面,单击使用镜像创建。
步骤二:配置应用基本信息
在应用基本信息页签中,设置应用的基本信息。
说明本例中选择无状态(Deployment)类型。
配置项
描述
应用名称
应用的名称。
副本数量
即应用包含的Pod数量,默认数量为2。
类型
定义资源对象的类型,可选择无状态(Deployment)、有状态(StatefulSet)、任务(Job)、定时任务(CronJob)、守护进程集(DaemonSet)。
标签
为该应用添加一个标签,标识该应用。
注解
为该应用添加一个注解(Annotation)。
时区同步
容器与节点是否使用相同的时区。
单击下一步。
步骤三:配置容器
在容器配置页签上方,单击添加容器为应用的Pod设置多个容器。
在容器配置页签,设置容器相关的配置。
基本配置
参数
描述
镜像名称
选择镜像
您可以单击选择镜像,选择所需的镜像。支持选择以下三种类型的镜像。
容器镜像服务企业版:可以选择托管在容器镜像服务ACR中的企业版镜像。需要选择镜像所属地域,以及镜像服务实例。关于ACR的更多信息,请参见什么是容器镜像服务ACR。
容器镜像服务个人版:可以选择托管在容器镜像服务ACR中的个人版镜像。需要选择镜像所属地域,以及镜像服务实例。
制品中心:包含应用容器化基础OS镜像、基础语言镜像、AI/大数据相关镜像,本示例以制品中心的Nginx镜像为例说明。关于制品中心的更多信息,请参见制品中心。
说明容器镜像服务ACR提供制品中心便于您的基础镜像使用,这些基础镜像由阿里云或者龙蜥社区做版本更新及安全修复。如果您有额外的镜像需求或者问题,请加入钉钉群33605007047进行咨询。
您还可以填写私有镜像。填写的格式为
domainname/namespace/imagename:tag
。选择镜像拉取策略
ACK支持以下三种镜像拉取策略(imagePullPolicy):
优先使用本地镜像(IfNotPresent):如果本地有该镜像(之前拉取过该镜像至宿主机中),则使用本地镜像,本地不存在时拉取镜像。
总是拉取镜像(Always):表示每次部署或扩容都会从容器镜像服务重新拉取镜像,而不会从本地拉取镜像。
仅使用本地镜像(Never):仅使用本地镜像。
说明当您选中镜像拉取策略时,默认不设置镜像拉取策略。
设置镜像密钥
您可以单击设置镜像密钥,为私有镜像设置密钥以确保安全。
对于ACR个人版实例,您可以通过设置镜像密钥的方式拉取容器镜像。设置密钥的更多信息,请参见创建保密字典。
对于ACR企业版实例,您可以通过免密组件拉取镜像。具体操作,请参见使用免密组件拉取容器镜像。
资源限制
可指定该应用所能使用的资源上限,包括CPU、内存和Ephemeral-Storage三种资源,以防止占用过多资源。关于设置资源限制的更多信息,请参见资源画像。
所需资源
为该应用预留资源额度,包括CPU、内存和Ephemeral-Storage三种资源,即容器独占这些资源,防止因资源不足而被其他服务或进程争夺资源,导致应用不可用。关于设置所需资源的更多信息,请参见资源画像。
容器启动项
stdin:表示为该容器开启标准输入。
tty:表示为该容器分配一个虚拟终端,以便于向容器发送信号。
通常这两个选项是一起使用的,表示将终端(tty)绑定到容器的标准输入(stdin)上。例如,一个交互式的程序从用户获取标准输入,并显示到终端中。
特权容器
选择特权容器,则privileged=true,开启特权模式。
不选择特权容器,则privileged=false,关闭特权模式。
初始化容器
选中该选项,表示创建一个初始化容器。
初始化容器提供了一种机制来阻塞或延迟应用容器的启动,初始化容器执行成功后,Pod内的应用容器会并行启动。例如,检测依赖服务的可用性。初始化容器可以包括一些应用镜像中不存在的实用工具和安装脚本,用来初始化应用容器的运行环境,例如设置内核参数、生成配置文件。更多信息,请参见Init Containers。
(可选)端口设置
设置容器的端口。
参数
描述
名称
设置容器端口名称。
容器端口
设置暴露的容器访问端口或端口名,端口号必须介于1~65535。
协议
支持TCP和UDP。
(可选)环境变量
支持通过键值对的形式为Pod配置环境变量。用于给Pod添加环境标志或传递配置等。
参数
描述
类型
设置环境变量的类型,支持以下类型:
自定义
配置项
保密字典
变量/变量引用
资源引用
配置项、保密字典支持对全部文件的引用,以保密字典为例。选择保密字典类型,只选择目标保密字典,则默认引用全部文件。
对应的YAML,也引用了整个密钥(Secret)。
选择资源引用,主要使用
resourceFieldRef
参数,从Pod规范中引用容器已经声明的资源值,然后将这些值作为环境变量传递给容器。对应的YAML如下:变量名称
设置环境变量名称。
变量/变量引用
设置变量引用的值。
(可选)健康检查
支持存活检查(liveness)、就绪检查(Readiness)和启动探测。关于健康检查的更多信息,请参见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)。本例中配置了一个云存储类型的数据卷声明disk-ssd,将其挂载到容器的/tmp路径下。
参数
描述
增加本地存储
本地存储:支持主机目录(HostPath)、配置项(ConfigMap)、保密字典(Secret)和临时目录,将对应的挂载源挂载到容器路径中。更多信息,请参见volumes。
增加云存储声明(PersistentVolumeClaim)
支持通过PVC挂载云存储卷。在选择目标挂载源前,您需要创建云存储声明。具体操作,请参见创建持久化存储卷声明。
(可选)日志配置
配置日志服务,您可进行采集配置和自定义Tag设置。
重要请确保已部署Kubernetes集群,并且在此集群上已安装日志插件。
配置项
描述
采集配置
日志库:即在日志服务中生成一个对应的Logstore,用于存储采集到的日志。
容器内日志路径:支持Stdout和文本日志。
Stdout:表示采集容器的标准输出日志。
文本日志:表示收集容器内指定路径的日志,本例中表示收集/var/log/nginx下所有的文本日志,也支持通配符的方式。
自定义Tag
您还可以设置自定义Tag,设置Tag后,会将该Tag一起采集到容器的日志输出中。自定义Tag可帮助您给容器日志打上Tag,方便进行日志统计和过滤等分析操作。
完成容器配置后,单击下一步。
(可选)步骤四:高级配置
在高级配置页签,设置高级配置参数,完成后单击创建。
访问设置
针对应用的通信需求,您可灵活进行访问设置:
内部应用:对于只在集群内部工作的应用,您可以在创建服务时,根据需要选择虚拟集群IP或节点端口类型的服务,来进行内部通信。
外部应用:对于需要暴露到公网的应用,您可以采用两种方式进行访问设置。
创建负载均衡类型的服务:您可以在创建服务时,选择负载均衡类型的服务。通过阿里云提供的负载均衡服务SLB(Server Load Balancer),使得该服务提供公网访问能力。
创建路由(Ingress):通过创建路由(Ingress)提供公网访问能力。更多信息,请参见Ingress。
您可以设置暴露后端Pod的方式。本例中选择ClusterIP服务和路由(Ingress),构建一个公网可访问的Nginx应用。
配置项 | 描述 |
服务(Service) | 在服务(Service)右侧,单击创建设置创建服务配置项。配置项的详情,请参见Service快速入门。本例中服务类型选择ClusterIP。 |
路由(Ingress) | 在路由(Ingress)右侧,单击创建。在弹出的对话框中,为后端Pod配置路由规则。详细的路由配置信息,请参见路由配置说明。 说明 通过镜像创建应用时,您仅能为一个服务创建路由(Ingress)。本例中使用一个虚拟主机名称作为测试域名,您需要在hosts中添加一条记录。在实际工作场景中,请使用备案域名。
|
在访问设置区域中,您可看到创建完毕的服务和路由,您可单击变更和删除进行二次配置。
伸缩配置
在伸缩配置区域,配置是否开启指标伸缩和定时伸缩,从而满足应用在不同负载下的需求。
若要启用自动伸缩,您必须为容器设置所需资源,否则容器自动伸缩无法生效。
容器服务支持容器组的指标伸缩,即根据容器CPU和内存资源占用情况自动调整容器组数量。
参数 | 描述 |
指标 | 支持CPU和内存,需要和设置的所需资源类型相同。 |
触发条件 | 资源使用率的百分比,超过该使用量,容器开始扩容。 |
最大副本数 | 该负载类型可扩容的容器数量上限。 |
最小副本数 | 该负载类型可缩容的容器数量下限。 |
调度设置
您可设置升级方式、节点亲和性、应用亲和性、应用反亲和性和调度容忍,详情请参见Affinity and anti-affinity。
亲和性调度依赖节点标签和Pod标签。您可使用内置的标签进行调度,也可预先为节点、Pod配置相关的标签。
配置项 | 描述 |
升级方式 | 选择升级方式。包括滚动升级(rollingupdate)和替换升级(recreate),关于升级方式的更多信息,请参见Deployments。 |
节点亲和性 | 设置节点亲和性,通过Worker节点的Label标签进行设置。 节点调度支持硬约束和软约束(Required/Preferred),以及丰富的匹配表达式(In, NotIn, Exists, DoesNotExist. Gt, and Lt):
|
应用亲和性 | 决定应用的Pod可以和哪些Pod部署在同一拓扑域。例如,对于相互通信的服务,可通过应用亲和性调度,将其部署到同一拓扑域(如同一个主机)中,减少它们之间的网络延迟。 根据节点上运行的Pod的标签(Label)来进行调度,支持硬约束和软约束,匹配的表达式有:
|
应用反亲和性 | 决定应用的Pod不与哪些Pod部署在同一拓扑域。应用非亲和性调度的场景包括:
说明 应用非亲和性调度的设置方式与亲和性调度相同,但是相同的调度规则代表的意思不同,请根据使用场景进行选择。 |
调度容忍 | 容忍被应用于Pod,允许这个Pod被调度到相应的污点上。关于如何配置污点(键对值及效果Effect)与容忍,请参见Kubernetes官方文档污点与容忍。 |
调度到虚拟节点 | 设置是否调度到虚拟节点,仅ACK集群Pro版支持,如果您的集群中没有虚拟节点,则无法设置该配置项。关于如何将Pod调度至虚拟节点,请参见指定ECS和ECI的资源分配。 |
标签和注释
参数 | 描述 |
Pod标签 | 为该Pod添加一个标签,标识该应用。 |
Pod注解 | 为该Pod添加一个注解(Annotation)。 |
查看结果
创建成功后,默认进入创建完成页面,会列出应用包含的对象。您可以单击查看应用详情查看nginx-deployment的详情。
执行结果
在集群管理页左侧导航栏中,选择网络>路由。
可以看到路由列表下出现一条规则。
在浏览器中访问路由测试域名,您可访问Nginx欢迎页。