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

前提条件

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

  1. 登录容器服务 Kubernetes 控制台
  2. 在左侧导航栏单击集群,在集群列表页面右上角单击创建 Kubernetes 集群

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

    • 创建 Kubernetes 集群:您购买、添加的实例中有 3 个实例需要作为管控(Master)节点,这 3 个实例不能部署应用。您只能在另外购买的实例(Worker)上部署应用。
    • 创建 Kubernetes 托管版集群:您购买、添加的实例中都是 Worker 节点,即可以用于部署应用的实例。
    说明 如果您在创建容器服务 Kubernetes 集群时创建了 Internet SLB 且设置了白名单,需要在白名单中添加 10 网段地址及 11.193.253.0/24 扩展网段地址,以确保 EDAS 可以访问容器服务 Kubernetes 集群的资源。

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

  1. 登录 EDAS 控制台
  2. 在左侧导航栏中选择资源管理 > 集群
  3. 集群列表页面单击容器服务K8s集群。在集群列表中选择已创建的容器服务 Kubernetes 集群,在该集群操作列单击导入,然后在导入 Kubernetes 集群的对话框上单击导入
    edas-AppDeploy-createCSK8Scluster-k8s
    • 如果您需要查看导入日志,请单击操作列日志
    • 如果需要取消,请单击操作列取消导入
    • 如果导入失败,请单击操作列重试
    当导入的容器服务 K8s 集群的导入状态显示为导入成功,且集群状态为运行中,则表示容器服务的 Kubernetes 版集群已成功导入到 EDAS。
  4. 集群列表页面单击容器服务 K8s 集群。在集群列表中选择已创建的容器服务 Kubernetes 集群,在该集群操作列单击导入,然后在导入 Kubernetes 集群的对话框上单击导入
    edas-AppDeploy-createCSK8Scluster1 (1).png

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

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

说明 WAR 和 JAR 的部署步骤一致,本文以通过 JAR 为例介绍如何部署应用。
  1. 设置应用基本信息。
    1. 登录 EDAS 控制台
    2. 在控制台左上角选择地域(Region)。
    3. 在左侧导航栏中选择 应用管理 > 应用列表,并在应用列表页面单击创建应用
    4. 应用基本信息页面中设置应用的基本信息和参数,然后单击下一步
      • 集群类型选择 Kubernetes集群
      • 应用运行环境
        • JAR 方式部署,选择Java,并设置 Java 环境。
        • WAR 方式部署:

          如果创建 Dubbo 或者 Spring Boot 应用,请选择Tomcat,并设置 Java 环境和容器版本。

          如果创建 HSF 应用,请选择EDAS-Container(HSF),并配置 Java 环境 、容器版本、Pandora 版本和 Ali-Tomcat 版本。

        说明 目前Java 环境支持 Open JDK 8 和 Open JDK 7;容器版本支持 Apache Tomcat 8.5.42和 Apache Tomcat 7.0.91
      • 应用名称:输入应用名称。
      • 应用描述:填写应用的基本情况。
  2. 应用配置页签中设置应用的部署信息和参数。
    应用部署配置
    • 命名空间:在左侧下拉选择框选择地域;在右侧下拉选择框选择命名空间,如果不做选择命名空间则设置为默认
    • 集群:在右侧下拉选择框内选择具体的集群。
    • K8s Namespace:K8s Namespace 通过将系统内部的对象分配到不同的 Namespace 中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
      • default:没有其他命名空间的对象的默认命名空间。
      • kube-system:系统创建的对象的命名空间。
      • kube-public:此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取。
  3. 配置部署包信息。
    • 自定义程序

      文件上传方式

      • 上传JAR包:选择下载好的 JAR 包并上传。
      • JAR包地址:将 Demo 包地址输入。
    • 官方Demo
      EDSA提供的Demo类型有Spring Cloud服务端应用Spring Cloud客户端应用Dubbo服务端应用Dubbo客户端应用,请依据实际需求选择。
      说明 使用官方Demo程序成功创建应用后,可即时体验微服务调用、监控、运维等功能
  4. 配置应用的版本、时区和 Pod 信息,并单击下一步
    • 版本:填写该应用的版本。
    • 时区设置应用的时区信息。
    • Pod 总数:设置该应用要部署的 Pod 个数。
    • 单 Pod 资源配额:设置单个 Pod 的 CPU 和 Memory。
  5. 可选: 设置启动命令和启动参数。
    说明 若不了解原 Dockerfile 镜像的 CMDENTRYPOINT 内容,不建议修改自定义启动命令和启动参数,错误的自定义命令将导致应用创建失败。
    edas-AppDeploy-CSK8S-setLaunchCMDandParameter (1).png
    • 启动命令:输入启动命令,如命令 CMD ["/usr/sbin/sshd","-D"],则在输入框内填写 /usr/sbin/sshd –D
    • 启动参数:一个参数写一行。如 args:["-c"; "while sleep 2"; "do echo date"; "done"] 中包含 4 个参数,需要分为 4 行来填写。
  6. 可选: 设置环境变量。

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

    edas-AppDeploy-CSK8S-setEnvironmentVars (1).png

    如果您需要设置 JVM 堆内存、JVM 属性参数、javaagent等参数,可以在设置环境变量这一步添加相关参数:

    变量名:CATALINA_OPTS ,变量值:[您需要添加的参数] $(EDAS_CATALINA_OPTS)

    例如: k8s应用添加环境变量操作.png
    在应用 Pod 里面看到的效果:k8s应用添加环境变量效果.png

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

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

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

  7. 可选: 设置持久化存储。

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

    说明 设置持久化存储前,请确保您的 EDAS 账号已开通 文件存储 NAS 服务。同时,由于 NAS 服务的计费方式为按量付费,请确保当前账户拥有足够的余额或计费方式为后付费。
    edas-AppDeploy-CSK8S-setNAS (1).png
    • 存储类型:默认为 NAS 文件存储,不可配置。
    • 存储服务类型:目前仅支持 SSD 性能型,不可配置。
    • NAS 选择
      • 新购一个 NAS:选择 NAS 挂载目录和本地挂载目录。单一 Region 内 NAS 文件系统上限为 10 个,若已超过 10 个会创建失败。如有特殊需求,请提交工单。
      • 使用已有 NAS:选择一个已有的 NAS。您最多可以创建两个挂载点。不符合要求的 NAS 将不会显示在下拉列表中。
    • 挂载目录:设置挂载目录命令。
  8. 可选: 设置本地存储。

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

    文件类型说明:

    名称 Value 含义
    默认 空字符串 不执行类型检查,直接挂载
    (新建)文件目录 DirectoryOrCreate 文件目录,如果不存在,则新建
    文件目录 Directory 文件目录,不存在则容器启动失败
    (新建)文件 FileOrCreate 文件,如果不存在,则新建
    文件 File 文件,不存在则容器启动失败
    Socket Socket 标准 Unix Socket 文件,不存在则容器启动失败
    CharDevice CharDevice 字符设备文件,不存在则容器启动失败
    BlockDevice BlockDevice 块储存设备文件,不存在则容器启动失败
    说明 此步骤中,您无需关注 Value 列的内容。但在应用创建完成后,可能会在 API 中使用。
  9. 可选: 设置应用生命周期管理。

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

    • 无状态应用:支持多副本部署。重新部署时不保存实例数据。适用于以下使用场景:
      • Web 应用,应用升级或迁移时,实例内数据不保留。
      • 需要灵活水平扩展,以应对业务量骤然变化的应用。
    • 有状态应用:区别于无状态应用,有状态应用会存储需要持久化的数据,在应用升级或迁移时,实例内数据不会丢失。适用于以下使用场景:
      • 需要频繁通过 SSH 到容器进行操作。
      • 数据需要持久化存储(如数据库应用 MySQL 等),或者集群之间有选举特性,服务发现的应用,如 ZooKeeper,etcd等。

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

    edas-AppDeploy-CSK8S-setLifecycle (1).png

    生命周期管理脚本说明:

    • 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
  10. 可选: 设置日志收集。

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

    1. 在日志收集设置区域内,开启日志收集到 SLS 日志服务功能
    2. 勾选文件日志容器标准输出日志

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

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

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

    edas-AppDeploy-CSK8S-Instancedeploymentdetails (1).png

后续步骤

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

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

edas_ding