上云无忧 > 文档中心 > 天翼云容器云服务引擎CCSE工作负载 - 无状态
容器云服务引擎CCSE
天翼云容器云服务引擎CCSE工作负载 - 无状态

文档简介:
本节介绍了无状态服务的用户指南。 基本概念: 无状态工作负载:即kubernetes中的“Deployment”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress等。
*产品来源:中国电信天翼云。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本节介绍了无状态服务的用户指南。

基本概念

无状态工作负载:即kubernetes中的“Deployment”,无状态工作负载支持弹性伸缩与滚动升级,适用于实例完全独立、功能相同的场景,如:nginx、wordpress等。

操作场景

在运行中始终不保存任何数据或状态的工作负载称为“无状态负载 Deployment”,例如nginx。您可以通过控制台或kubectl命令行创建无状态负载。

前提条件

在创建容器工作负载前,您需要存在一个可用集群。若没有可用集群 ,请参照集群开通中内容进行创建。

若工作负载需要被外网访问,请确保集群中至少有一个节点已绑定弹性IP,或已购买负载均衡实例。

创建多个工作负载时,请确保容器使用的端口不冲突 ,否则部署会失败。

操作步骤及说明

创建Deployment的参数较多,下面将分模块来介绍创建Deployment的参数,请务必留意这里的参数解释,其他四种类型的工作负载的参数与Deployment的参数相似

创建一个Deployment的参数最小配置(tomcat为例)

如上图的配置即可成功启动一个tomcat

参数解释

数据卷

Deployment的数据卷共6种类型,总结如下表:

数据卷类型 对应k8s中的类型 用途 解释
临时目录 emptyDir 主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录 当Pod分配到Node上时,将会创建emptyDir,当Pod(不管任何原因)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除。
主机目录 hostPath hostPath允许挂载Node上的文件系统到Pod里面去。如果Pod需要使用Node上的文件,可以使用hostPath。 在使用hostPath volume卷时,即便pod已经被删除了,volume卷中的数据仍在。但是Pod调度到其他节点之后就无法使用这个目录了。
secret secret 用于将敏感信息(如密码)传递给pod 将k8s中的Secret资源对象挂载到Pod中
configMap configMap 用于挂载配置文件到Pod中 将k8s中的ConfigMap资源对象挂载到Pod中
使用已有PVC persistentVolumeClaim 用来挂载持久化磁盘 需要提前创建持久卷声明(PVC)
downwardAPI downwardAPI 将Pod的信息挂载到容器中(如上图中将Pod的标签挂载到容器中,并且用”labels”这个文件存储Pod的标签),pod版本号要么不填要么填’v1’ Downward API提供了两种方式用于将POD的信息注入到容器内部,一是此处介绍的Volume挂载,二是下面我们将介绍的环境变量

实例数量

实例的数量指的是Pod的数量,设置Pod的数量有2种方式

手动设置:我们可以手动指定Pod的数量是多少,默认为1,这种方式下Pod的数量在我们手动更新之前是不会改变的

自动设置:这种方式下,Pod的数量会根据Pod的资源使用情况自动的调整,因此,自动伸缩需要我们设置Pod自动调整数量的规则以及自动调整数量的范围

伸缩规则:即告诉Pod通过什么规则来自动调整数量,目前我们可以通过cpu的使用百分比、cpu的使用量、内存的使用百分比、内存的使用量这四个规则来自动调整Pod数量

伸缩范围:即告诉Pod在哪个范围内自动调整数量,自动调整数量时不会超出这个范围

容器参数设置

可以添加多个容器在一个Pod中

容器的名称、镜像、镜像版本号是必填参数

镜像拉取策略:

IfNotPresent:仅当主机上没有没有指定的镜像时才去拉取

Always:不管主机上是否有指定镜像,都会重新拉取

Never:从不拉取镜像

如果有多个容器,那么数据卷可以挂载到任意容器的挂载点上

挂载点与上面介绍的数据卷是一一对应的关系

容器路径:必填且不能为/,表示要将数据卷挂载到容器里的哪个路径下

子路径:选填且不能以/开头,表示仅将数据卷中的子对象项挂载到容器路径下,子对象可以理解为目录的子目录或者ConfigMap的一个data项

request数据:用于预分配资源,可以理解为容器设置需要的最小资源,为了防止出现Pod无法调度的问题,强烈建议request数据设置的尽可能小

limit数据:用于限制运行时容器占用的资源

目前支持四种类型的环境变量设置

keyValue:key-value键值对形式为容器设置环境变量

configMapKeyRef:需要提前创建ConfigMap并且包含data项,这里会将data中的value值引用为环境变量

secretKeyRef:需要提前创建Secret并且包含data项,这里会将data中的value值引用为环境变量 方式一:把两行内容都写到一个文件里,使用导入YAML吧文件导入就行; 方式二:使用保密字典,上传文本文件,第一个文件,文件名是MINIO_ACCESS_KEY,文件内容是sunseaiot;第二个文件,文件名是MINIO_SECRET_KEY,文件内容是sunseaiot1 方式三:使用配置项,上传文件,第一个文件,文件名是MINIO_ACCESS_KEY,文件内容是sunseaiot;第二个文件,文件名是MINIO_SECRET_KEY,文件内容是sunseaiot1

fieldRef:引用Pod中的某个字段作为环境变量,如引用Pod的名称使用metadata.name、引用Pod所在命名空间使用metadata.namespace

CCSE 2.7.9版本开始支持从文件导入环境变量,目前仅支持导入KeyValue类型的环境变量,因此文件格式应该是一行一行的键值对,并通过:连接

需要提前安装日志插件

需要填写容器的日志输出在哪个目录,只有填写了正确的容器日志目录才能被日志插件采集到

启动执行:用于指定容器在启动时执行的命令和参数。虽然启动执行里有添加命令和添加参数两个按钮,但是我们可以只是用添加命令、或者只使用添加参数、或者两者同时使用,其达到的效果是完全一致的。

启动后处理:配置容器在启动完成后执行的命令。用法上和上面的启动执行完全一致

停止前处理:配置容器在停止前执行的命令。用法上和上面的启动执行完全一致

容器的健康检查支持就绪检查核存活检查两种,建议给容器都配上这两种健康检查方式

就绪检查:会检查容器是否处于ready状态,不就绪则停止转发流量到当前实例

存活检查:检查容器是否正常,不正常则重启实例

三种健康检查方式的公共参数解释:

目前支持三种健康检查方式:

Http方式:需要填写端口、协议、请求路径等参数,然后kubelet 会向容器内运行的程序发送一个 HTTP GET 请求来执行探测。如果容器的处理程序返回成功码,则kubelet认为容器是存活/就绪的。如果处理程序返回失败码,则kubelet会杀死这个容器并且重新启动它/认为它没有就绪。

Tcp方式:需要填写主机、端口等参数,然后kubelet 会尝试在指定端口和容器建立套接字链接。如果能建立链接,这个容器就被看作是健康的/就绪的,如果不能则这个容器就被看作是有问题的/没有就绪的。

命令方式:需要添加命令,然后kubelet 在容器中执行该命令来进行检测。如果命令执行成功并且返回值为0,kubelet会认为这个容器是健康存活的/就绪的。如果这个命令返回非 0 值,kubelet 会杀死这个容器并重新启动它/认为它没有就绪。

特权级容器:即给容器赋予主机的root用户权限,一般情况下都不需要设置。一个常见的使用场景是,使用主机目录挂载时,如果该目录是root用户权限的,那么容器想要操作这么目录,那么必须开启特权级容器,开启特权容器后,容器内的用户会设置为root用户。

Deployment高级设置

支持给Deployment设置注解,注解将会以key-value形式写入Deployment - 支持给Deployment设置标签,标签将会以key-value形式写入Deployment

支持给Deployment设置镜像拉取凭证

镜像拉取凭证主要适用于:如果我们给Deployment设置的镜像属于私有仓库中的镜像,那么一定要先创建镜像拉取凭证,然后再此处添加镜像拉取凭证

支持发布Deployment到指定节点上,选择了key-value之后,可以通过查看节点查看Deployment可以发布到哪些节点上,特别注意:如果所有的节点都无法满足节点选择器,那么Pod将不会调度,会出现类似的事件0/3 nodes match node selector

如果我们希望给运行在k8s上的Pod增加一些域名的解析(例如宿主机的主机名),那么我们可以通过主机别名配置往容器的/etc/hosts文件中添加域名解析

给Deployment设置的主机别名可以等容器启动后,进入容器终端执行命令cat/etc/hosts查看

如果我们想要固定容器的hostname,那么可以设置Pod主机名

设置了Pod主机名后,这个Pod里的所有容器的hostname都会变成我们设定的这个值

通过再master节点上执行命令kubectl exec hostname可以查看容器的hostname

选择使用主机网络,那么pod中运行的应用程序可以直接看到宿主主机的网络接口 - 使用主机网络,Pod IP和节点IP将会一样 - 如果不加上dnsPolicy:

ClusterFirstWithHostNet ,pod默认使用所在宿主主机使用的DNS,这样也会导致容器内不能通过service name 访问k8s集群中其他POD - 一般情况下,请再使用主机网络之前优先考虑使用NodePort

快速升级:选择快速升级时,每次全量替换升级Deployment的时候,会删除所有已存在的pod,重新创建新的;

滚动升级:选择滚动升级时,每次全量替换升级Deployment的时候,会采取逐步替换的策略,等新创建出来的Pod处于running状态之后才会销毁旧的Pod,参数详解:

maxSurge:升级过程中最多可以比原先设置多出的POD数量,如maxSurage=1,replicas=5,则表示k8s会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个POD

maxUnavaible: 升级过程中最多有多少个POD处于无法提供服务的状态,当maxSurge不为0时,该值也不能为0,例如:maxUnavaible=1,则表示Deployment整个升级过程中最多会有1个POD处于无法服务的状态

开启访问设置

表示创建Deployment的同时,创建一个配套的服务(Service),详见Service的介绍

相似文档
  • 本节介绍了有状态服务的用户指南。 基本概念: 有状态工作负载:即kubernetes中的“StatefulSet”,有状态工作负载支持实例有序部署和删除,支持持久化存储,适用于实例间存在互访的场景,如ETCD、mysql-HA等。
  • 本节介绍了守护进程的用户指南。 基本概念: 创建守护进程集:即kubernetes中的“DaemonSet”,守护进程集确保全部(或者某些)节点都运行一个Pod实例,支持实例动态添加到新节点,适用于实例在每个节点上都需要运行的场景,如ceph、fluentd、Prometheus Node Exporter等。
  • 本节介绍了任务的用户指南。 基本概念: 普通任务:即kubernetes中的“Job”,普通任务是一次性运行的短任务,部署完成后即可执行。使用场景为在创建工作负载前,执行普通任务,将镜像上传至镜像仓库。
  • 本节介绍了定时任务的用户指南。 基本概念: 定时任务:即kubernetes中的“CronJob”,定时任务是按照指定时间周期运行的短任务。使用场景为在某个固定时间点,为所有运行中的节点做时间同步。
  • 本节介绍了容器组的用户指南。 基本概念: 容器组(Pod)是Kubernetes中最小的可部署单元。一个Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、一个唯一的网络IP地址、以及一些确定容器该如何运行的选项。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部