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

前提条件

已经导入自建 K8s 集群

创建应用

  1. 登录EDAS 控制台
  2. 在左侧导航栏中选择应用管理 > 应用列表,并在应用列表页面右上角单击创建应用 。
  3. 应用基本信息页面中设置应用的基本信息和参数,然后单击下一步:应用配置
    EDAS部署应用之创建应用
    • 命名空间:在下拉菜单中选择地域命名空间。命名空间如果不选择,会自动选择默认命名空间。
    • 集群类型:在下拉菜单中选择 自建 K8s 集群 并选择一个具体集群。
    • K8s Namespace:根据您的集群选择实际 K8s Namespace。
    • 应用名称:输入应用名称。
    • 应用描述:填写应用的基本情况,输入的描述信息不超过128个字符。
  4. 应用配置页面配置镜像。

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

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

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

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

    • 第三方镜像:第三方镜像主要指Harbor
      1. 单击第三方镜像
      2. 连接第三方镜像仓库对话框中输入第三方镜像地址登录账号密码,单击测试连接EDAS应用部署至拉去第三方镜像

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

      3. 所属项目右侧的下拉列表中选择 Harbor 中的项目,然后在下方选择具体镜像及版本。 EDAS应用部署至第三方镜像
  5. 设置 Pod。

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

    EDAS应用部署之设置pod
    1. 设置 Pod 总数
      Pod 在运行失败或出现故障时,可以自动重启或者快速迁移,保证应用的高可用。
      • 有状态应用如果使用了持久化存储,能保存实例数据。
      • 无状态应用重新部署时不保存实例数据。
    2. 设置单 Pod 资源配额
      系统默认不做配额限制,即单 Pod 的 CPU 和 Memory 显示为 0。如果需要限制配额,请填设置数字。
  6. 设置启动命令和启动参数。
    注意 若不了解原 Dockerfile 镜像的 CMDENTRYPOINT 内容,不建议修改自定义启动命令和启动参数,错误的自定义命令将导致应用创建失败。
    • 启动命令:仅需输入[""]内的内容,列如命令 ,仅需填写 CMD ["/usr/sbin/sshd","-D"]
    • 启动参数:一个参数写一行。列如 args:["-c"; "while sleep 2"; "do echo date"; "done"] 中包含 4 个参数,需要分为 4 行来填写。
  7. 设置环境变量。

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

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

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

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

  8. 本地存储区域设置宿主机挂载目录容器挂载目录读取权限
  9. 设置应用生命周期管理脚本(适用于有状态应用),设置成后单击确认创建

    容器服务 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

结果验证

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

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

后续操作

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

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