全部产品
云市场

部署应用(自建 K8S 集群)

更新时间:2019-01-15 20:59:04

当您导入自建 K8S 集群后,可以在自建 K8S 集群中通过镜像部署应用。

前提条件

已经导入自建 K8S 集群

创建应用

  1. 登录 EDAS 控制台

  2. 在左侧导航栏中选择应用管理 > 应用列表

  3. 应用列表页面右上角单击创建应用

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

    创建应用

    • 命名空间:在下拉菜单中选择地域命名空间。命名空间如果不选择,会自动选择默认命名空间。
    • 集群类型:在下拉菜单中选择 自建 K8S 集群 并选择一个具体集群。
    • K8S Namespace:根据您的集群选择实际 K8S Namespace。
    • 应用名称:输入应用名称。
    • 应用描述:填写应用的基本情况,输入的描述信息不超过128个字符。
  5. 应用配置页面配置镜像。

    应用部署方式默认选择镜像,不可配置。

    1. 配置镜像区域选择镜像仓库和具体镜像。

      • 阿里云镜像:单击阿里云镜像,在所属项目右侧的下拉列表中选择阿里云镜像仓库中的项目,然后在下方选择具体镜像及版本。

        选择阿里云镜像

        如果您还没有阿里云镜像,请参考仓库构建镜像基本操作,创建镜像参考、并上传镜像。

      • 第三方镜像:第三方镜像主要指Harbor

        1. 单击第三方镜像
        2. 连接第三方镜像仓库对话框中输入第三方镜像地址登录账号密码,单击测试连接

          连接测试

          测试成功后,则会显示该仓库中的镜像。

        3. 所属项目右侧的下拉列表中选择 Harbor 中的项目,然后在下方选择具体镜像及版本。

          选择 Harbor 镜像

  6. 设置 Pod。

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

    ![设置 Pod](http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/84466/cn_zh/1545224975485/edas-appMgmt-acsk8s-app-configPd.png)

    1. 设置 Pod 总数

      Pod 在运行失败或出现故障时,可以自动重启或者快速迁移,保证应用的高可用。

      • 有状态应用如果使用了持久化存储,能保存实例数据。
      • 无状态应用重新部署时不保存实例数据。
    2. 设置单 Pod 资源配额

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

  7. 设置启动命令和启动参数。

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

    • 启动命令:仅需输入[“”]内的内容,如命令 CMD [“/usr/sbin/sshd”,”-D”] ,仅需填写 /usr/sbin/sshd –D
    • 启动参数:一个参数写一行。如 args:[“-c”; “while sleep 2”; “do echo date”; “done”] 中包含 4 个参数,需要分为 4 行来填写。
  8. 设置环境变量。

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

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

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

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

  9. 本地存储区域设置宿主机挂载目录容器挂载目录读取权限

  10. 设置应用生命周期管理脚本(适用于有状态应用)。

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

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

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

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

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

    生命周期管理

    生命周期管理脚本说明:

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

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

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

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

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

结果验证

应用创建可能需要几分钟,创建过程中,可以通过应用变更单跟踪创建的过程。创建完成后,返回应用详情页面查看基本信息中应用状态是否为运行正常

在自建 K8S 集群中创建的应用无需部署,创建成功即部署成功了。

后续操作

在应用部署之后,您可以对应用进行升级或回滚应用扩容和缩容。不再使用该应用后,可以删除应用。

除了生命周期管理外,您还可以对查看应用的变更记录实时日志,进行日志管理等运维操作。