跳转至

创建无状态负载(Deployment)

无状态负载(Deployment)是运行在 Kubernetes 上的一种不保存任何数据和状态的应用。 和其它工作负载类似,无状态负载也是由 Pod 构成。通过 Daocloud 容器管理平台,您可以基于所拥有的权限轻松管理多云多集群上的工作负载,包括对无状态负载的创建、更新、删除、弹性扩缩、重启、版本回退等全生命周期管理。

本文介绍如何通过镜像创建无状态负载。

前提条件

在使用镜像创建无状态负载之前,需要满足以下前提条件:

镜像创建

参考以下步骤,使用镜像创建一个无状态负载。

基本信息配置

  1. NS Edit 用户成功登录后,点击左侧导航栏上的集群列表进入集群列表页面。点击一个集群名称,进入集群详情页面。

    集群详情

  2. 在集群详情页面,点击左侧导航栏的工作负载进入工作负载列表后,点击页面右上角的镜像创建按钮。

    工作负载

  3. 创建无状态负载页面中,根据下表输入基本信息后,点击下一步

    基本信息

    • 负载名称:输入新建工作负载的名称,命名必须唯一。请注意名称最长 63 个字符,只能包含小写字母、数字及分隔符(“_”),且必须以小写字母或数字开头及结尾,例如 deployment-01。
    • 集群:选择新建工作负载所在的集群。在集群内创建工作负载时,将在当前集群中创建工作负载。集群不可更改。当在集群外部创建工作负载时,将在所选集群创建工作负载,例如 Cluster-01。
    • 命名空间:选择新建工作负载所在的命名空间。关于命名空间更多信息请参考命名空间概述。若您不设置命名空间,系统会默认使用 default 命名空间。
    • 实例数:输入工作负载的 Pod 实例数量。若您不设置实例数量,系统会默认创建 2 个 Pod 实例。
    • 描述:输入工作负载的描述信息,内容自定义。字符数量应不超过 512 个。例如:这是一个无状态负载,主要用来运行 Nginx 服务。

容器配置

在配置容器相关参数时,您必须正确配置容器的名称、镜像参数,否则将无法进入下一步。如果您需在一个容器组中添加多个容器,可点击右侧的 + 添加多个容器。

完成以下所有容器配置信息后,点击下一步

基本信息

按照以下输入信息后,点击确认

  • 容器名称:请注意名称最长63个字符,只能包含小写字母、数字及分隔符(“_”),且必须以小写字母或数字开头及结尾。例如 nginx-01。
  • 容器镜像:选择镜像仓库后输入镜像名称或镜像地址来选择镜像。请注意,镜像名称必须为镜像仓库中已有的镜像名,否则将无法获取)。例如 您可以选择公共镜像仓库 后 输入 “nginx” 来部署 nginx 镜像。
  • 更新策略:当对容器执行更新时,镜像拉取策略。默认不启用总是拉取镜像策略,即在工作负载每次重启/升级时拉取本地镜像,当镜像在本地不存在时将会从镜像仓库重新拉取。如果启用总是拉取镜像策略将默认从仓库重新拉取镜像。
  • 特权容器:默认情况下,容器不可以访问宿主机上的任何设备,开启特权容器后,容器即可访问宿主机上的所有设备,享有宿主机上的运行进程的所有权限。默认启用。
  • CPU 配额:容器 CPU 资源的最低使用量和最高使用量。申请:容器需要使用的最小 CPU 用量。限制:允许容器使用的最大 CPU 用量。请根据需要为容器配置 CPU 配额,避免资源浪费和因容器资源超额导致系统故障。默认为 0.25,0.25。
  • 内存配额:容器内存资源的最低使用量和最高使用量。申请:容器需要使用的最小内用量。限制:允许容器使用的内存最大用量。请根据需要为容器配置 CPU 配额,避免资源浪费和因容器资源超额导致系统故障。默认为 512 MB,512 MB。
  • GPU 配额:为集群配置 GPU 使用配额,需要管理员预先在集群节点上安装 GPU 卡及驱动插件,并在 集群设置 上开启了 GPU 特性后,您才能为集群配置 GPU 配额。GPU 配额设置支持为容器设置独享整张 GPU 卡或部分 vGPUs。例如,您有一张 8 核心的 GPU 卡,您可以输入数字 8 让容器独享整长卡,也可以输入数字 1 为容器配置 1 核心的 vGPU。

容器生命周期配置用于设置容器启动时、启动后、停止前需要执行的命令。具体详情请参照容器生命周期配置

生命周期

容器健康检查用于判断容器和应用的健康状态。有助于提高应用的可用性。具体详情请参考容器健康检查配置

健康检查

容器环境变量配置用于配置 Pod 内的容器参数,为 Pod 添加环境变量或传递配置等。具体详情请参考容器环境变量配置

环境变量

容器数据存储配置用于配置容器挂载数据卷和数据持久化设置。具体详情请参考容器数据存储配置

数据存储

通过 Linux 内置的账号权限隔离机制来对容器进行安全隔离。您可以通过使用不同权限的账号 UID(数字身份标记)来限制容器的权限。如使用 root 账号的权限,请输入 0

安全设置

服务配置

为无状态负载配置服务,使无状态负载能够被外部访问。

  1. 点击创建服务按钮。

    服务配置

  2. 参考创建服务,配置服务参数。

    创建服务

  3. 点击确定,点击下一步

高级配置

除了基本信息配置,Daocloud 容器管理平台还提供了丰富的高级配置,可对工作负载的升级策略、调度策略、标签与注解等高级功能进行配置。

升级策略

  • 升级方式:滚动升级 将逐步用新版本的实例替换旧版本的实例,升级的过程中,业务流量会同时负载均衡分布到新老的实例上,因此业务不会中断。重建升级 将先把您工作负载的老版本实例删除,再安装指定的新版本,升级过程中业务会中断。
  • 最大无效 Pod 数:用于指定 Deployment 在更新过程中不可用状态的 Pod 数量的上限,如果等于实例数有服务的风险。默认 25%。
  • 最大浪涌:更新 Pod 的过程中 Pod 总数量超过 Pod 期望副本数量部分的最大值或比率。默认 25%。
  • 最大保留版本数:为回滚时保留的旧版本的数量。默认 10。
  • Pod 可用最短时间(s):Pod 就绪的最短时间,只有超出这个时间 Pod 才被认为可用,默认 0 秒。
  • 升级最大持续时间(s):在标记 deployment 失败之前,等待部署进行的最大持续时间,默认 600 秒。
  • 缩容时间窗(s):工作负载停止前命令的执行时间窗(0-9,999秒),默认 30 秒。

用户可以设置容忍时间来定义当工作负载所在的节点损坏时,将工作负载调度到其它节点的容忍时间。也支持基于节点标签和 Pod 标签对工作负载所部署的节点进行调度。具体详情请参考调度策略

调度策略

  • 容忍时间:工作负载实例所在的节点不可用的情况下,将工作负载实例重新调度到其它可用节点的时间,单位为秒。
  • 节点亲和性:根据节点上的标签来约束 Pod 可以调度到哪些节点上。
  • 工作负载亲和性:更新 Pod 的过程中 Pod 总数量超过 Pod 期望副本数量部分的最大值。
  • 工作负载反亲和性:基于已经在节点上运行的 Pod 的标签来约束 Pod 不可以调度到的节点。

可以点击添加按钮为工作负载和容器组添加标签和注解。

标签与注解

应用在某些场景下会出现冗余的 DNS 查询。Kubernetes 为应用提供了与 DNS 相关的配置选项,通过对应用进行 DNS 配置,能够在某些场景下有效地减少冗余的 DNS 查询,提升业务并发量。具体详情请参考 DNS 配置

DNS 配置

  • DNS 策略:对应用进行 DNS 配置,减少冗余的 DNS 查询,提升业务并发量。

    • Default:容器的域名解析文件使用 kubelet 的 --resolv-conf 参数指向的域名解析文件。该配置只能解析注册到互联网上的外部域名,无法解析集群内部域名,且不存在无效的 DNS 查询。
    • ClusterFirstWithHostNet:应用对接主机的域名文件。
    • ClusterFirst:应用对接 Kube-DNS/CoreDNS。
    • None:Kubernetes v1.9(Beta in v1.10)中引入的新选项值。设置为 None 之后,必须设置 dnsConfig,此时容器的域名解析文件将完全通过 dnsConfig 的配置来生成。
  • 域名服务器:根据节点上的标签来约束 Pod 可以调度到哪些节点上。

  • 搜索域:域名查询时的 DNS 搜索域列表。指定后,提供的搜索域列表将合并到基于 dnsPolicy 生成的域名解析文件的 search 字段中,并删除重复的域名。Kubernetes 最多允许 6 个搜索域。
  • Options:DNS 的配置选项,其中每个对象可以具有 name 属性(必需)和 value 属性(可选)。该字段中的内容将合并到基于 dnsPolicy 生成的域名解析文件的 options 字段中,dnsConfig 的 options 的某些选项如果与基于 dnsPolicy 生成的域名解析文件的选项冲突,则会被 dnsConfig 所覆盖。
  • 主机别名:为主机设置的别名。

完成创建

确认所有参数输入完成后,点击确定按钮,完成工作负载创建,系统将自动返回无状态负载列表。 点击列表右侧的 ,可以对工作负载执行执行更新、删除、弹性扩缩、重启、版本回退等操作。

操作菜单

等待工作负载状态变为运行中。 如果工作负载状态出现异常,请查看具体异常信息,可参考工作负载状态

YAML 创建

除了上述按镜像方式创建 Deployment 之外,还可以通过 YAML 来创建。

基本信息配置

  1. NS Edit 用户成功登录后,点击左侧导航栏上的集群列表进入集群列表页面。点击一个集群名称,进入集群详情页面。

    集群详情

  2. 在集群详情页面,点击左侧导航栏的工作负载进入工作负载列表后,点击页面右上角的YAML 创建按钮。

    工作负载

  3. 完成上述步骤后,您将跳转至创建无状态负载的详细配置页面,请参照下面的步骤完成无状态负载的创建。

输入 YAML

参考下面的 YAML 模板,创建一个名为 nginx-deployment 的无状态负载。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

完成创建

确认所有参数输入完成后,点击确定按钮,完成工作负载创建,自动返回无状态负载列表。 点击列表右侧的 ,可以对工作负载执行执行更新、删除、弹性扩缩、重启、版本回退等操作。

操作菜单

等待工作负载状态变为运行中。如果工作负载状态出现异常,请查看具体异常信息,可参考工作负载状态

评论