文档

部署和运维包含容器资源的私有部署服务

更新时间:

创建包含容器资源的私有部署服务时,在模板中除了定义创建服务需要的云资源外,还需要定义ACK集群类型的K8s容器资源。在服务和服务实例运维的过程中,也可以对容器资源进行更新操作。本文介绍在计算巢中如何部署和运维含有容器资源的私有部署服务。

背景信息

在创建包含容器资源的私有部署服务时,你需要了解如下信息:

  • ROS模板是用于定义所需的云计算资源(例如:ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。更多信息,请参见录入模板

  • ACK集群是用于管理容器化应用和服务。更多信息,请参见ACK集群概述

创建包含容器部署的私有部署服务

  1. 创建ROS模板。

    创建模板时,除了定义需要的云资源外,还需要在模板中定义中控机的UserData或者单独的RunCommand。关于创建模板,请参见录入模板

    编写服务ROS模板时,至少需要包含容器服务的两个资源。结构示例

    根据架构图创建一个名为ManagedKubernetesCluster的ACK容器服务集群和EcsInstanceJumpBox的中控机。

    1. ACK容器服务集群(ManagedKubernetesCluster),用于部署容器资源。

    2. 中控机 (EcsInstanceJumpBox),用于访问容器服务集群。容器服务部署和运维时,可以在中控机上应用或更新容器模板。

    模板中定义容器部署流程时,至少包含以下步骤:

    1. 安装需要的容器资源管理客户端(helm/kubectl)。

    2. 保存ACK集群的kubeconfig信息。

    3. 应用定义的容器模板,在集群中创建容器资源。

    示例中只展示了创建一个nginx的Pod的内容,完整的ROS模板内容,请参见参考模板

    说明

    如果您要运行该示例,需要开放VPC公网访问权限,否则可能会运行失败。

          UserData:
            Fn::Sub:
              - |
                #!/bin/bash
                yum install -y kubernetes-client.x86_64
                mkdir -p ~/.kube
                echo '${KubeConfig}' >> ~/.kube/config
                echo '${ApplicationYaml}' > ~/application.yaml
                sleep 10
                kubectl --kubeconfig ~/.kube/config apply -f ~/application.yaml --validate=false
              - KubeConfig:
                  Fn::GetAtt:
                    - ManagedKubernetesCluster
                    - PrivateUserKubConfig
                ApplicationYaml: |
                  apiVersion: v1
                  kind: Pod
                  metadata:
                   name: nginx
                  spec:
                   containers:
                   - name: nginx
                     image: nginx
                     imagePullPolicy: IfNotPresent
  2. 创建私有部署服务。

    关于创建私有部署服务的操作,请参见创建私有部署服务

    在创建服务界面的录入模板区域中的模板内容处,填写步骤1的模板内容或上传已保存的模板内容。

创建和查看服务实例

  1. 创建服务实例。

    创建包含容器资源的服务实例和创建私有部署服务实例步骤一致,更多信息,请参考创建私有部署服务实例

  2. 查看服务实例。

    1. 在左侧导航栏中,单击服务实例

    2. 找到您创建的服务实例,单击服务实例ID。进入服务实例详情页。

    3. 单击资源,在云资源页签的所属产品列中,找到容器服务Kubernetes版的资源,单击资源ID。2024-05-17_16-45-38.png

    4. 在容器服务控制台,您可以查看ACK集群信息和已经创建的Pod。

      容器资源

运维服务实例

如果需要更新容器资源,可以在服务实例的运维管理页面,通过发送远程命令来实现。下文以新建一个Pod为例。

  1. 登录计算巢控制台

  2. 在左侧导航栏中,选择服务实例

  3. 找到您创建的服务实例,单击服务实例ID。进入服务实例详情页面。

  4. 单击运维管理,在应用运维框中单击发送远程命令

  5. 在弹窗的执行命令选型区域,设置参数类型命令内容运行目录超时时间的相关参数。

    其中在命令内容框中,您可以通过以下任意一种方式输入执行命令。

    • 命令内容框中,直接输入执行命令。

      cat <<EOF > ~/nginx.yml
      apiVersion: v1
      kind: Pod
      metadata:
       name: nginx2
      spec:
        containers:
        - name: nginx
          image: nginx
          magePullPolicy: IfNotPresent
      EOF
      
      kubectl apply -f ~/nginx.yml --validate=false

      输入命令

    • 命令内容框中,调用OSS中已经创建的脚本。

      1. 创建YAML文件,文件内容如下:

        apiVersion: v1
        kind: Pod
        metadata:
         name: nginx2
        spec:
          containers:
          - name: nginx
            image: nginx
            imagePullPolicy: IfNotPresent
      2. 将YAML文件上传到OSS。更多信息,请参见控制台上传文件

      3. 通过kubetcl apply命令,调用OSS中已经上传的脚本文件。调用命令

  6. 选择实例区域,设置目标实例信息。

    选择手动选择实例并选择相应的实例。目标实例

  7. 单击下一步,确认设置参数信息,然后单击创建

    可在运维管理页签中,查看任务进度。

    任务进度

    待任务执行完成后,可到ACK集群中查看新创建的Pod。此处是新增了一个名称为niginx2的Pod。

    新建资源

参考模板

此处展示了包含容器资源的私有部署服务完整的ROS模板。

ROSTemplateFormatVersion: '2015-09-01'Description:
 en: Create ACK Cluster And JumpBox Ecs, Deploy with kubectl -f yaml with new vpc.
 zh-cn: 创建ACK集群和跳板机并使用kubectl部署(新建VPC)。
Parameters:
 VpcId:
  AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
  Type: String
  Description:
   zh-cn: '请选择已有的VPC<br><b><font color=''blue''>如找不到VPC,请切换地域。</font></b>'
   en: >-    Please select the existing VPC. <br><b><font color='blue'>If you can't
    find the VPC, please switch Regions.</font></b>
  Label:
   zh-cn: 现有VPC的实例ID
   en: Existing VPC ID
 ZoneId:
  Type: String
  Description:
   zh-cn: 创建实例前,请确认可用区是否支持Redis资源的规格。
   en: Before you create an instance, confirm that the Availability Zone supports the specifications of Redis resources.
  AssociationProperty: ALIYUN::ECS::Instance:ZoneId
  Label:
   en: Zone ID
   zh-cn: 可用区
 VSwitchId:
  AssociationProperty: 'ALIYUN::ECS::VSwitch::VSwitchId'
  AssociationPropertyMetadata:
   VpcId: VpcId
   ZoneId: ZoneId
  Type: String
  Description:
   zh-cn: 现有网络交换机的实例ID。
   en: The instance ID of an existing network switch.
  Label:
   zh-cn: 网络交换机ID
   en: VSwitch ID
 SecurityGroupId:
  AssociationPropertyMetadata:
   VpcId: VpcId
  Description:
   zh-cn: 现有安全组的实例ID。
   en: The instance ID of an existing security group.
  Label:
   zh-cn: 安全组ID
   en: Security Group ID
  AssociationProperty: 'ALIYUN::ECS::SecurityGroup::SecurityGroupId'
  Type: String
 ClusterName:
  Type: String
  Default: default-ack-test
 EcsInstanceType:
  Type: String
  Label:
   en: Instance Type
   zh-cn: 实例类型
  AssociationProperty: ALIYUN::ECS::Instance::InstanceType
  Default: ecs.g6.large
 SystemDiskSize:
  Default: 40
  Type: Number
  Description:
   zh-cn: 系统盘大小, 取值范围:[40,500],单位:GiB。
   en: 'System disk size, range of values: 40-500, units: GiB.'
  Label:
   zh-cn: 系统盘空间
   en: System Disk Space
 SystemDiskCategory:
  Type: String
  Description:
   en: '<font color=''blue''><b>Optional values:</b></font><br>[cloud_efficiency: <font color=''green''>Efficient Cloud Disk</font>]<br>[cloud_ssd: <font color=''green''>SSD Cloud Disk</font>]<br>[cloud_essd: <font color=''green''>ESSD Cloud Disk</font>]<br>[cloud: <font color=''green''>Cloud Disk</font>]<br>[ephemeral_ssd: <font color=''green''>Local SSD Cloud Disk</font>]'
   zh-cn: '<font color=''blue''><b>可选值:</b></font><br>[cloud_efficiency: <font color=''green''>高效云盘</font>]<br>[cloud_ssd: <font color=''green''>SSD云盘</font>]<br>[cloud_essd: <font color=''green''>ESSD云盘</font>]<br>[cloud: <font color=''green''>普通云盘</font>]<br>[ephemeral_ssd: <font color=''green''>本地SSD盘</font>]'
  AllowedValues:
   - cloud_efficiency
   - cloud_ssd
   - cloud
   - cloud_essd
   - ephemeral_ssd
  Label:
   en: System Disk Category
   zh-cn: 系统盘类型
  Default: cloud_essd
 LoginPassword:
  NoEcho: true
  Type: String
  Description:
   en: 'Length 8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - ='.
   zh-cn: 长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)。
  Label:
   en: Instance Password
   zh-cn: 实例密码
  ConstraintDescription:
   en: '8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - ='.
   zh-cn: 8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)。
  MinLength: 8
  MaxLength: 32
 WorkerInstanceTypes:
  Type: Json
  Label:
   en: Worker Nodes Types
   zh-cn: Worker节点规格
  Description:
   zh-cn: Worker节点ECS实例规格。
   en: The worker node ECS instance specification.
  Default:
   - ecs.g6.large
 WorkerSystemDiskSize:
  Type: Number
  Description:
   en: |-
    Worker disk system disk size, the unit is GiB.
    Default to 120.
   zh-cn: |-
    工作磁盘系统磁盘大小,单位为GiB。
    默认为120。
  Label:   
      en: Worker System Disk Size
   zh-cn: Worker节点系统盘大小
  MinValue: 1
  Default: 120
 NumOfNodes:
  Type: Number
  Description:
   en: |-
    Number of worker nodes. The range is [0,300].
    Default to 3.
   zh-cn: 工作节点数。范围为[0,300]。\n默认为3。
  Label:
   en: Num Of Nodes
   zh-cn: Work节点数量
  MinValue: 2
  MaxValue: 300
  Default: 3
 WorkerSystemDiskCategory:
  Type: String
  Description:
   en: '<font color=''blue''><b>Optional values:</b></font><br>[cloud_efficiency: <font color=''green''>Efficient Cloud Disk</font>]<br>[cloud_ssd: <font color=''green''>SSD Cloud Disk</font>]<br>[cloud_essd: <font color=''green''>ESSD Cloud Disk</font>]<br>[cloud: <font color=''green''>Cloud Disk</font>]<br>[ephemeral_ssd: <font color=''green''>Local SSD Cloud Disk</font>]'
   zh-cn: '<font color=''blue''><b>可选值:</b></font><br>[cloud_efficiency: <font color=''green''>高效云盘</font>]<br>[cloud_ssd: <font color=''green''>SSD云盘</font>]<br>[cloud_essd: <font color=''green''>ESSD云盘</font>]<br>[cloud: <font color=''green''>普通云盘</font>]<br>[ephemeral_ssd: <font color=''green''>本地SSD盘</font>]'
  AllowedValues:
   - cloud
   - cloud_efficiency
   - cloud_ssd
   - cloud_essd
   - ephemeral_ssd
  Label:
   en: Worker System Disk Category.
   zh-cn: Worker系统盘磁盘类型。
  Default: cloud_essdResources:
 ManagedKubernetesCluster:
  Type: ALIYUN::CS::ManagedKubernetesCluster
  Properties:
   VSwitchIds:
    - Ref: VSwitchId
   VpcId:
    Ref: VpcId
   WorkerInstanceTypes:
    Ref: WorkerInstanceTypes
   NumOfNodes:
    Ref: NumOfNodes
   ClusterSpec: ack.pro.small
   ContainerCidr: 172.xx.x.x/16
   ServiceCidr: 172.xx.x.x/20
   WorkerSystemDiskCategory:
    Ref: WorkerSystemDiskCategory
   WorkerSystemDiskSize:
    Ref: WorkerSystemDiskSize
   LoginPassword:
    Ref: LoginPassword
   SnatEntry: true
   Addons:
    - Name: flannel
     Config: ''
   Name:
    Ref: ClusterName EcsInstanceJumpBox:
  Type: ALIYUN::ECS::InstanceGroup
  DependsOn:
   - ManagedKubernetesCluster
  Properties:
   InstanceName: jumpbox
   ImageId: centos_7
   InstanceType:
    Ref: EcsInstanceType
   VpcId:
    Ref: VpcId
   VSwitchId:
    Ref: VSwitchId
   SecurityGroupId:
    Ref: SecurityGroupId
   AllocatePublicIP: false
   Password:
    Ref: LoginPassword
   MaxAmount: 1
   SystemDiskSize:
    Ref: SystemDiskSize
   InstanceChargeType: PostPaid
   SystemDiskCategory:
    Ref: SystemDiskCategory
   UserData:
    Fn::Sub:
     - |
      #!/bin/bash
      yum install -y kubernetes-client.x86_64
      mkdir -p ~/.kube
      echo '${KubeConfig}' >> ~/.kube/config
      echo '${ApplicationYaml}' > ~/application.yaml
      sleep 10
      kubectl --kubeconfig ~/.kube/config apply -f ~/application.yaml --validate=false
     - KubeConfig:
       Fn::GetAtt:
       - ManagedKubernetesCluster
       - PrivateUserKubConfig
      ApplicationYaml: |
       apiVersion: v1
       kind: Pod
       metadata:
       name: nginx
       spec:
       containers:
       - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
Outputs: {}
Metadata:
 ALIYUN::ROS::Interface:
  ParameterGroups:
   - Parameters:
     - ZoneId
     - VpcId
     - VSwitchId
     - SecurityGroupId
     - ClusterName
     - LoginPassword
    Label:
     en: Basic Configuration
     zh-cn: 基础配置
   - Parameters:
     - WorkerInstanceTypes
     - WorkerSystemDiskCategory
     - WorkerSystemDiskSize
     - NumOfNodes
    Label:
     en: Kubernetes Configuration
     zh-cn: Kubernetes配置
   - Parameters:
     - EcsInstanceType
     - SystemDiskSize
     - SystemDiskCategory
    Label:
     en: ECS jump server Configuration
     zh-cn: ECS跳板机配置

  • 本页导读 (0)