创建包含容器资源的私有部署服务时,在模板中除了定义创建服务需要的云资源外,还需要定义ACK集群类型的K8s容器资源。在服务和服务实例运维的过程中,也可以对容器资源进行更新操作。本文介绍在计算巢中如何部署和运维含有容器资源的私有部署服务。
背景信息
创建包含容器部署的私有部署服务
创建ROS模板。
创建模板时,除了定义需要的云资源外,还需要在模板中定义中控机的UserData或者单独的RunCommand。关于创建模板,请参见录入模板。
编写服务ROS模板时,至少需要包含容器服务的两个资源。
根据架构图创建一个名为ManagedKubernetesCluster的ACK容器服务集群和EcsInstanceJumpBox的中控机。
ACK容器服务集群(ManagedKubernetesCluster),用于部署容器资源。
中控机 (EcsInstanceJumpBox),用于访问容器服务集群。容器服务部署和运维时,可以在中控机上应用或更新容器模板。
模板中定义容器部署流程时,至少包含以下步骤:
安装需要的容器资源管理客户端(helm/kubectl)。
保存ACK集群的kubeconfig信息。
应用定义的容器模板,在集群中创建容器资源。
示例中只展示了创建一个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
创建私有部署服务。
关于创建私有部署服务的操作,请参见创建私有部署服务。
在创建服务界面的录入模板区域中的模板内容处,填写步骤1的模板内容或上传已保存的模板内容。
创建和查看服务实例
创建服务实例。
创建包含容器资源的服务实例和创建私有部署服务实例步骤一致,更多信息,请参考创建私有部署服务实例。
查看服务实例。
在左侧导航栏中,单击服务实例。
找到您创建的服务实例,单击服务实例ID。进入服务实例详情页。
单击资源,在云资源页签的所属产品列中,找到容器服务Kubernetes版的资源,单击资源ID。
在容器服务控制台,您可以查看ACK集群信息和已经创建的Pod。
运维服务实例
如果需要更新容器资源,可以在服务实例的运维管理页面,通过发送远程命令来实现。下文以新建一个Pod为例。
登录计算巢控制台。
在左侧导航栏中,选择服务实例。
找到您创建的服务实例,单击服务实例ID。进入服务实例详情页面。
单击运维管理,在应用运维框中单击发送远程命令。
在弹窗的执行命令选型区域,设置参数类型、命令内容、运行目录和超时时间的相关参数。
其中在命令内容框中,您可以通过以下任意一种方式输入执行命令。
在命令内容框中,直接输入执行命令。
cat <<EOF > ~/nginx.yml apiVersion: v1 kind: Pod metadata: name: nginx2 spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent EOF kubectl apply -f ~/nginx.yml --validate=false
在命令内容框中,调用OSS中已经创建的脚本。
创建YAML文件,文件内容如下:
apiVersion: v1 kind: Pod metadata: name: nginx2 spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent
将YAML文件上传到OSS。更多信息,请参见控制台上传文件。
通过
kubectl apply
命令,调用OSS中已经上传的脚本文件。
在选择实例区域,设置目标实例信息。
选择手动选择实例并选择相应的实例。
单击下一步,确认设置参数信息,然后单击创建。
可在运维管理页签中,查看任务进度。
待任务执行完成后,可到ACK集群中查看新创建的Pod。此处是新增了一个名称为nginx2的Pod。
参考模板
此处展示了包含容器资源的私有部署服务完整的ROS模板。
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建ACK集群和跳板机并使用kubectl部署(新建VPC)。
en: Create ACK Cluster And JumpBox Ecs, Deploy with kubectl -f yaml with new vpc.
Parameters:
VpcId:
Type: String
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Description:
zh-cn: 请选择已有的VPC,如找不到VPC,请切换地域。
en: Please select the existing VPC. If you can't find the VPC, please switch Regions.
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
Label:
zh-cn: 系统盘空间
en: System Disk Spac
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系统盘磁盘类型。
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: Null
Fn::GetAtt:
- ManagedKubernetesCluster
- PrivateUserKubConfig
ApplicationYaml: |
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- WorkerInstanceTypes
- WorkerSystemDiskCategory
- WorkerSystemDiskSize
- NumOfNodes
Label:
en: Kubernetes Configuration
zh-cn: Kubernetes配置
- Parameters:
- ZoneId
- VpcId
- VSwitchId
- SecurityGroupId
- ClusterName
- LoginPassword
Label:
en: Basic Configuration
zh-cn: 基础配置
- Parameters:
- EcsInstanceType
- SystemDiskSize
- SystemDiskCategory
Label:
en: ECS jump server Configuration
zh-cn: ECS跳板机配置