全部产品
云市场

在容器服务 K8S 集群中部署应用(镜像)

更新时间:2019-09-26 17:18:57

容器服务 Kubernetes 版提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端极佳的 Kubernetes 容器化应用运行环境。

EDAS 支持通过镜像部署容器服务 Kubernetes 版集群应用,您需准备好镜像,在容器服务 Kubernetes 版控制台中创建容器服务 Kubernetes 版集群,并将该集群导入到 EDAS 控制台,然后创建应用并完成部署。

前提条件

步骤一:创建容器服务 Kubernetes 集群

  1. 登录容器服务 Kubernetes 控制台

  2. 在左侧导航栏单击集群,在集群列表页面右上角单击创建 Kubernetes 集群

    容器服务中可以创建 KubernetesKubernetes 托管版多可用区 Kubernetes三种类型的集群:

    • 创建 Kubernetes 集群:您购买、添加的实例中有 3 个实例需要作为管控(Master)节点,这 3 个实例不能部署应用。您只能在另外购买的实例(Worker)上部署应用。
    • 创建 Kubernetes 托管版集群:您购买、添加的实例中都是 Worker 节点,即可以用于部署应用的实例。
    • 创建多可用区 Kubernetes 集群:跟 Kubernetes 集群的区别是把节点部署在不同的可用区上,当一个区不可用时,还可在其他可用区上使用。您购买、添加的实例中有 3 个实例需要作为管控(Master)节点,这 3 个实例不能部署应用,您只能在另外购买的 Worker 实例上部署应用。

步骤二:在 EDAS 控制台中导入容器服务 K8S 集群

  1. 登录 EDAS 控制台

  2. 在左侧导航栏中选择资源管理 > 集群

  3. 集群列表页面单击容器服务 K8S 集群。在集群列表中选择已创建的容器服务 Kubernetes 集群,在该集群操作列单击导入,然后在导入 Kubernetes 集群的对话框上单击导入

    导入容器服务K8S集群

    1. 当创建的容器服务 K8S 集群的操作列的选项按钮变为删除,且集群状态为运行中,则表示容器服务的 Kubernetes 版集群已成功导入到 EDAS。

步骤三:在容器服务 Kubernetes 版集群中创建应用

  1. 登录 EDAS 控制台。在左侧导航栏中单击应用管理,进入应用列表页面。

  2. 在应用列表页面选择地域(Region)和命名空间,然后在页面右上角单击创建应用

  3. 应用基本信息页面中设置应用的基本信息和参数,然后单击下一步:应用配置

    创建普通应用

    • 命名空间:在左侧下拉选择框选择地域;在右侧下拉选择框选择命名空间,如果不做选择命名空间则设置为默认
    • 集群类型:在左侧下拉选择框中选择集群类型为 容器服务 K8S 集群,右侧下拉选择框内选择具体的集群。
    • K8S Namespace:K8S Namespace 通过将系统内部的对象分配到不同的 Namespace 中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
      • default:没有其他命名空间的对象的默认命名空间。
      • kube-system:系统创建的对象的命名空间。
      • kube-public:此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取。
    • 应用名称:输入应用名称。
    • 应用描述:填写应用的基本情况。
  4. 应用配置页面配置镜像。应用部署方式默认选择为镜像。在我的镜像区域选择您创建的镜像。

    选择镜像

  5. 设置 Pod。

    Pod 是应用最小的部署单元。应用可以有多个 Pod,在负载均衡下,请求会被随机分配给某个 Pod 处理。

    设置 Pod

    1. 设置 Pod 总数

      Pod 在运行失败或出现故障时,可以自动重启或者快速迁移,保证应用的高可用。有状态应用如果使用了持久化存储,能保存实例数据;无状态应用重新部署时不保存实例数据。您最多可以设置 Pod 总数为 50 。

    2. 设置单 Pod 资源配额

      系统默认不做配额限制,即单 Pod 的 CPU 和 Memory 显示为 0。如果需要限制配额,请填设置数字。

  1. (可选)设置启动命令和启动参数。

    注意:若不了解原 Dockerfile 镜像的 CMDENTRYPOINT 内容,不建议修改自定义启动命令和启动参数,错误的自定义命令将导致应用创建失败。

    设置启动命令

    • 启动命令:输入启动命令,如命令 CMD ["/usr/sbin/sshd","-D"],则在输入框内填写 /usr/sbin/sshd –D
    • 启动参数:一个参数写一行。如 args:["-c"; "while sleep 2"; "do echo date"; "done"] 中包含 4 个参数,需要分为 4 行来填写。

  1. (可选)设置环境变量。

    在创建应用过程中,将所填环境变量注入到即将生成的容器中,这样可以避免常用环境变量的重复添加。

    设置环境变量

    假如您使用 MySQL 镜像时,可以参考如下环境变量:

    • MYSQL_ROOT_PASSWORD (必选项): 用于设置 MySQL 的 root 密码,必选项。
    • MYSQL_USER 和 MYSQL_PASSWORD (可选项): 用于添加除 root 之外的账号并设置密码。
    • MYSQL_DATABASE (可选项): 用于设置生成容器时需要新建的数据库。

    如使用其它类型的镜像,请根据实际需求进行配置。

  1. (可选)设置持久化存储。

    在阿里云容器服务 Kubernetes 集群中,原生的 Volume 对象所对应的物理储存为非持久化的,它的生命周期与 Kubernetes Pod 一致,是一个暂态的储存对象。使用持久化的储存服务—文件储存,可以永久保存实例数据,应用在升级或迁移后不丢失。

    说明:设置持久化存储前,请确保您的 EDAS 账号已开通 NAS 服务。同时,由于 NAS 服务的计费方式为按量付费,请确保当前账户拥有足够的余额或计费方式为后付费。

    持久化存储

    • 存储类型:默认为 NAS 文件存储,不可配置。

    • 存储服务类型:目前仅支持 SSD 性能型,不可配置。

    • NAS 选择
      • 新购一个 NAS:选择 NAS 挂载目录和本地挂载目录。单一 Region 内 NAS 文件系统上限为 10 个,若已超过 10 个会创建失败。如有特殊需求,请提交工单。
      • 使用已有 NAS:选择一个已有的 NAS。您最多可以创建两个挂载点。不符合要求的 NAS 将不会显示在下拉列表中。
    • 挂载目录:设置挂载目录命令。

  1. (可选)设置本地存储。

    您可以将宿主机的文件系统的一部分映射到容器内部,以满足您的需求。在使用该功能之前,建议阅读 hostpath,并考虑该方案的合理性。

    ECS存储

    文件类型说明:

    名称 Value 含义
    默认 空字符串 不执行类型检查,直接挂载
    (新建)文件目录 DirectoryOrCreate 文件目录,如果不存在,则新建
    文件目录 Directory 文件目录,不存在则容器启动失败
    (新建)文件 FileOrCreate 文件,如果不存在,则新建
    文件 File 文件,不存在则容器启动失败
    Socket Socket 标准Unix Socket文件,不存在则容器启动失败
    CharDevice CharDevice 字符设备文件,不存在则容器启动失败
    BlockDevice BlockDevice 块储存设备文件,不存在则容器启动失败

    说明:此步骤中,您无需关注 Value 列的内容。但在应用创建完成后,可能会在 API 中使用。

  1. (可选)设置应用生命周期管理。

    容器服务 Kubernetes 版集群应用有两种状态:

    • 无状态应用:支持多副本部署。重新部署时不保存实例数据。适用于以下使用场景:

      • Web 应用,应用升级或迁移时,实例内数据不保留。
      • 需要灵活水平扩展,以应对业务量骤然变化的应用。
    • 有状态应用:区别于无状态应用,有状态应用会存储需要持久化的数据,在应用升级或迁移时,实例内数据不会丢失。适用于以下使用场景:

      • 需要频繁通过 SSH 到容器进行操作。
      • 数据需要持久化存储(如数据库应用 MySQL 等),或者集群之间有选举特性,服务发现的应用,如 ZooKeeper,etcd等。

    有状态应用可以选择设置应用生命周期管理。

    生命周期管理

    生命周期管理脚本说明:

    • Poststart 脚本:一种容器钩子。该钩子在容器被创建后立刻触发,通知容器它已经被创建。该钩子不需要向其所对应的 hook handler 传入任何参数。如果该钩子对应的 hook handler 执行失败,则该容器会被杀死,并根据该容器的重启策略决定是否要重启该容器。参考 Container Lifecycle Hooks

    • PreStop 脚本:一种容器钩子。该钩子在容器被删除前触发,其所对应的 hook handler 必须在删除该容器的请求发送给 Docker daemon 之前完成。在该钩子对应的 hook handler 完成后不论执行的结果如何,Docker daemon 会发送一个 SGTERN 信号量给 Docker daemon 来删除该容器。参考 Container Lifecycle Hooks

    • Liveness 脚本:一种探测容器状态的探针,探测应用是否处于健康状态。如果不健康,则删除重建容器。参考 Pod Lifecycle

    • Readiness 脚本:一种探测容器状态的探针,探测应用是否启动完成并且处于正常服务状态。如果不正常,则更新容器的状态。参考 Pod Lifecycle

  1. (可选)设置日志收集。

    您可开通日志服务 SLS,能将业务文件日志、容器标准输出stdout、stderr 日志输出到SLS,方便您无限制行数的查看日志、自聚合分析日志。日志服务按量计费。

    1. 在日志收集设置区域内,开启日志收集到 SLS 日志服务功能

    2. 勾选文件日志容器标准输出日志

      文件日志需要添加日志路径。

  2. 设置完成后,单击确认创建

    应用创建可能需要几分钟,创建过程中,可以通过应用变更单跟踪创建的过程。Kubernetes 应用无需部署,创建完成即部署完成,创建完成后,返回应用详情页面查看实例部署信息中 Pod 状态若为正常运行则说明应用发布成功。

    查看应用状态

升级容器服务 K8S 集群中的应用

容器服务 K8S 集群中的应用在创建时已经进行了部署,故部署应用功能用来更新应用,您可以更新镜像版本和重新设置环境变量等高级设置选项来升级应用。

  1. 在应用列表中,单击您所创建的容器服务 Kubernetes 应用名称,进入应用详情页面。

  2. 在页面右上角单击部署应用

  3. 部署应用页面,您可更改配置镜像,并配置启动命令环境变量持久化存储本地存储应用生命周期管理等高级设置选项。完成设置后单击确定

    更新容器服务的 Kubernetes 应用

  4. 升级之后,应用详情页面上的镜像版本会变化为升级后的版本。在实例部署信息页面查看应用的运行状态,如果显示为正常运行则表示应用更新成功。

后续操作

应用创建完毕后,可以通过添加公网 SLB 实现公网访问,添加内网 SLB 实现同 VPC 内所有节点够能通过私网负载均衡访问您的应用。相关操作请参阅绑定 SLB 到 K8S 集群中的应用

问题反馈

如果在使用容器服务 Kubernetes 集群过程中有任何疑问,欢迎您扫描下面的二维码加入钉钉群进行反馈。

容器服务 K8S 钉钉群二维码