compute-nest-best-practice/opensource/kubernetes/single.yaml (473 lines of code) (raw):

ROSTemplateFormatVersion: "2015-09-01" Description: zh-cn: 单机K8S集群部署,含实例类型选择、网络配置、存储设定及安全组管理,自动安装 Ack-Distro镜像并配置监控。 en: Single-node K8S cluster deployment, encompassing instance type selection, network configuration, storage setup, and security group management, with automated installation of Ack-Distro image and configuration of monitoring. Parameters: PayType: Type: String Label: en: ECS Instance Charge Type zh-cn: 付费类型 Default: PostPaid AllowedValues: - PostPaid - PrePaid AssociationProperty: ChargeType AssociationPropertyMetadata: LocaleKey: InstanceChargeType PayPeriodUnit: Type: String Label: en: Pay Period Unit zh-cn: 购买资源时长周期 Default: Month AllowedValues: - Month - Year AssociationProperty: PayPeriodUnit AssociationPropertyMetadata: Visible: Condition: Fn::Not: Fn::Equals: - ${PayType} - PostPaid PayPeriod: Type: Number Description: en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60. <br><b><font color='red'> When ECS instance types are PrePaid valid </b></font> zh-cn: 当购买资源时长为Month时,Period取值:1~9 <br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font> Label: en: Period zh-cn: 购买资源时长 Default: 1 AllowedValues: - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 AssociationProperty: PayPeriod AssociationPropertyMetadata: Visible: Condition: Fn::Not: Fn::Equals: - ${PayType} - PostPaid ZoneId: Type: String AssociationProperty: ALIYUN::ECS::Instance::ZoneId Label: en: VSwitch Availability Zone zh-cn: 交换机可用区 VpcId: AssociationProperty: ALIYUN::ECS::VPC::VPCId Type: String Description: en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud zh-cn: 现有虚拟专有网络的实例ID。 Label: en: VPC ID zh-cn: 专有网络VPC实例ID VSwitchId: AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId AssociationPropertyMetadata: VpcId: ${VpcId} ZoneId: ${ZoneId} Type: String Description: en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query zh-cn: 现有业务网络交换机的实例ID。 Label: en: VSwitch ID zh-cn: 交换机实例ID AutoCreateSecurityGroup: Type: Boolean Default: true Label: zh-cn: 自动创建安全组 en: auto create security group SecurityGroupId: Type: String AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId AssociationPropertyMetadata: VpcId: ${VpcId} Visible: Condition: Fn::Equals: - ${AutoCreateSecurityGroup} - false Default: '' Description: en: Please search the business security group ID starting with(sg-xxx)from console-ECS-Network & Security zh-cn: 现有业务安全组的实例ID。 Label: en: Business Security Group ID zh-cn: 业务安全组ID EcsInstanceType: Type: String Description: en: Master nodes must have a minimum of 2 cores and 4GB of RAM. zh-cn: 实例类型,节点不可小于2核4G。 Label: en: Instance Type zh-cn: 实例类型 AssociationProperty: ALIYUN::ECS::Instance::InstanceType AssociationPropertyMetadata: ZoneId: ${ZoneId} InstanceChargeType: ${InstanceChargeType} SystemDiskSize: Default: 40 Type: Number Description: zh-cn: 系统盘大小, 取值范围:[40, 500], 单位:GB。 en: 'System disk size of each node, range of values: 40-500, units: GB.' MinValue: 40 MaxValue: 500 Label: zh-cn: 系统盘空间 en: System Disk Space SystemDiskCategory: Default: cloud_essd Label: zh-cn: 系统盘类型 en: System Disk Type Type: String Description: zh-cn: 系统盘类型,须选择实例支持的磁盘类型。 en: System disk type, you must select the type of disk that the instance. AllowedValues: - cloud_efficiency - cloud_ssd - cloud_essd AssociationPropertyMetadata: LocaleKey: DiskCategory DataDiskSize: Default: 40 Type: Number Description: zh-cn: 数据盘大小, 取值范围:[40, 500], 单位:GB。 en: 'System disk size of each node, range of values: 40-500, units: GB.' MinValue: 40 MaxValue: 500 Label: zh-cn: 数据盘空间 en: Data Disk Space AssociationPropertyMetadata: Visible: Condition: Fn::Equals: - ${NeedCreateDataDisk} - true InternetMaxBandwidthOut: Default: 100 Type: Number Label: zh-cn: Master节点公网带宽 en: Master Node Internet Max Bandwidth Out MinValue: 1 MaxValue: 100 Description: zh-cn: 取值范围1-100。 en: The value range is from 1 to 100. InternetChargeType: Default: PayByTraffic Type: String Label: zh-cn: 流量付费类型 en: Internet Charge Type AllowedValues: - PayByBandwidth - PayByTraffic AssociationPropertyMetadata: LocaleKey: InternetChargeType InstancePassword: NoEcho: true Type: String Description: en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) zh-cn: 节点登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。 AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$' Label: en: Instance Password zh-cn: 实例密码 ConstraintDescription: en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)。 MinLength: 8 MaxLength: 30 AssociationProperty: ALIYUN::ECS::Instance::Password AckDistroVersion: Type: String Label: zh-cn: Ack-Distro基础镜像版本 en: Ack-Distro base image version. AllowedValues: - v1-22-15-ack-10 - v1-20-11-ack-23 Default: v1-22-15-ack-10 Description: zh-cn: Ack-Distro镜像版本,<a href="https://github.com/AliyunContainerService/ackdistro/releases/">版本说明</a>。 en: Ack-Distro Image Version,<a href="https://github.com/AliyunContainerService/ackdistro/releases/">Version Description</a>. NeedCreateDataDisk: Type: Boolean Default: false Label: zh-cn: 创建节点数据盘 en: Create node data disk. Conditions: IfAutoCreateSecurityGroup: Fn::Equals: - Ref: AutoCreateSecurityGroup - true IfCreateDataDisk: Fn::Equals: - Ref: NeedCreateDataDisk - true Resources: EcsSecurityGroup: Type: ALIYUN::ECS::SecurityGroup Condition: IfAutoCreateSecurityGroup Properties: SecurityGroupName: Ref: ALIYUN::StackName VpcId: Ref: VpcId # 只开放访问外网的规则 SecurityGroupEgress: - PortRange: '-1/-1' Priority: 1 IpProtocol: all DestCidrIp: 0.0.0.0/0 NicType: intranet SecurityGroupIngress: - PortRange: 6443/6443 Priority: 1 SourceCidrIp: 0.0.0.0/0 IpProtocol: tcp NicType: internet # 定义waitCondition和waitConditionHandle来等待命令执行完毕部署成功 WaitCondition: Type: ALIYUN::ROS::WaitCondition Properties: Count: 1 Handle: Ref: WaitConditionHandle Timeout: 1000 WaitConditionHandle: Type: ALIYUN::ROS::WaitConditionHandle MasterEcsInstanceGroup: Type: ALIYUN::ECS::InstanceGroup Properties: ZoneId: Ref: ZoneId # 实例名 InstanceName: Fn::Join: - '-' - - Ref: ALIYUN::StackName - '[1,4]' IoOptimized: optimized # 付费类型 InstanceChargeType: Ref: PayType PeriodUnit: Ref: PayPeriodUnit Period: Ref: PayPeriod # 网络配置 VpcId: Ref: VpcId VSwitchId: Ref: VSwitchId SecurityGroupId: Fn::If: - IfAutoCreateSecurityGroup - Ref: EcsSecurityGroup - Ref: SecurityGroupId # 磁盘类型和大小 SystemDiskCategory: Ref: SystemDiskCategory SystemDiskSize: Ref: SystemDiskSize DiskMappings: Fn::If: - IfCreateDataDisk - - Category: cloud_essd Size: Ref: DataDiskSize - Ref: ALIYUN::NoValue MaxAmount: 1 # 镜像 ImageId: centos_7 # 实例类型 InstanceType: Ref: EcsInstanceType Password: Ref: InstancePassword AllocatePublicIP: true InternetMaxBandwidthOut: Ref: InternetMaxBandwidthOut InternetChargeType: Ref: InternetChargeType # 到机器上执行命令 InstanceRunCommand: Type: ALIYUN::ECS::RunCommand DependsOn: - MasterEcsInstanceGroup Properties: CommandContent: Fn::Sub: - | #!/bin/bash # 安装sealer ARCH=amd64 get_arch=`arch` if [[ $get_arch != "x86_64" ]];then ARCH=arm64 fi # 部署物功能暂不支持参数化和特殊符合如中划线等,所以只能暂时这么写了 if [[ ${!ARCH} == "amd64" ]];then # 根据版本选择对应的部署物 echo "deploy amd64" # 使用-q是为了避免云助手执行时影响后续输出 wget -q '{{ computenest::file::sealerAmd64 }}' -O sealer-latest-linux-amd64.tar.gz && \ tar -xvf sealer-latest-linux-${!ARCH}.tar.gz -C /usr/bin if [[ ${AckDistroVersion} == "v1-22-15-ack-10" ]];then wget -q '{{ computenest::file::ackdistroAmd64V12215Ack10 }}' elif [[ ${AckDistroVersion} == "v1-20-11-ack-23" ]];then wget -q '{{ computenest::file::ackdistroAmd64V12011Ack23 }}' fi else echo "deploy arm64" wget -q '{{ computenest::file::sealerArm64 }}' -O sealer-latest-linux-arm64.tar.gz && \ tar -xvf sealer-latest-linux-${!ARCH}.tar.gz -C /usr/bin if [[ ${AckDistroVersion} == "v1-22-15-ack-10" ]];then wget -q '{{ computenest::file::ackdistroArm64V12215Ack10 }}' elif [[ ${AckDistroVersion} == "v1-20-11-ack-23" ]];then wget -q '{{ computenest::file::ackdistroArm64V12011Ack23 }}' fi fi sealer load -i ackdistro-${!ARCH}-${AckDistroVersion}.tar sealer run ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/ackdistro:${AckDistroVersion} -m ${Master} -p ${Password} >> deployK8sOutput.txt 2>&1 # cert for external ip sed 's#https://apiserver.cluster.local:6443#https://${ExternalIp}:6443#g' ~/.kube/config > ~/.kube/external_ip_config sealer cert --alt-names ${ExternalIp} echo "公网方式 通过 kubectl 连接 Kubernetes 集群" echo "1. 安装和设置 kubectl 客户端。有关详细信息请参见: https://kubernetes.io/docs/tasks/tools/" echo "2. 配置集群凭证:将以下内容复制到本地计算机 $HOME/.kube/config 文件中(没有~/.kube目录请新建),配置完成后,即可使用 kubectl 从计算机访问 Kubernetes 集群。" cat ~/.kube/external_ip_config echo " " sed 's#https://apiserver.cluster.local:6443#https://${Master}:6443#g' ~/.kube/config > ~/.kube/internal_ip_config echo "私网方式 通过 kubectl 连接 Kubernetes 集群" echo "1. 安装和设置 kubectl 客户端。有关详细信息请参见: https://kubernetes.io/docs/tasks/tools/" echo "2. 配置集群凭证:将以下内容复制到本地计算机 $HOME/.kube/config 文件中(没有~/.kube目录请新建),配置完成后,即可使用 kubectl 从计算机访问 Kubernetes 集群。" cat ~/.kube/internal_ip_config # 安装监控 ARGUS_VERSION=3.5.7 /bin/bash -c "$(curl -sS https://cms-agent-${RegionId}.oss-${RegionId}-internal.aliyuncs.com/Argus/agent_install_ecs-1.7.sh)" >> /root/install_cms_agent.log 2>&1 # 执行成功回调WaitCondition结束waitCondition的等待 ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}" > /dev/null 2>/dev/null - Master: Fn::Select: - 0 - Fn::GetAtt: - MasterEcsInstanceGroup - PrivateIps ExternalIp: Fn::Select: - 0 - Fn::GetAtt: - MasterEcsInstanceGroup - PublicIps Password: Ref: InstancePassword AckDistroVersion: Ref: AckDistroVersion CurlCli: Fn::GetAtt: - WaitConditionHandle - CurlCli Type: RunShellScript InstanceIds: - Fn::Select: - 0 - Fn::GetAtt: - MasterEcsInstanceGroup - InstanceIds Timeout: '1000' Outputs: MasterPublicIp: Description: zh-cn: Master公网IP地址 en: Master Private IP Addresses Value: Fn::GetAtt: - MasterEcsInstanceGroup - PublicIps MasterPrivateIp: Description: zh-cn: Master内网IP地址 en: Master Private IP Addresses Value: Fn::GetAtt: - MasterEcsInstanceGroup - PrivateIps ConnectApiServer: Description: zh-cn: 如何连接ApiServer en: How Connect With Api Server Value: Fn::Sub: - | 获取集群访问凭证方式: <br> 方式1:运维管理页中,选择执行"获取集群凭证"运维项,在执行结果中查看凭证。<br> 方式2:远程连接master节点,公网访问凭证:~/.kube/external_ip_config,私网访问凭证: ~/.kube/internal_ip_config <br> 方式3:<br> 1.登录阿里云ECS控制台:${AssistantAddress}。<br> 2.查看该命令执行Id: ${InvokeId} 的执行结果。 - AssistantAddress: Fn::Sub: - | https://ecs.console.aliyun.com/cloud-assistant/region/${RegionId}/ - RegionId: Ref: ALIYUN::Region InvokeId: Fn::GetAtt: - InstanceRunCommand - InvokeId Metadata: ALIYUN::ROS::Interface: # 分组信息 ParameterGroups: - Parameters: - PayType - PayPeriodUnit - PayPeriod Label: default: en: PayType Configuration zh-cn: 付费类型配置 - Parameters: - ZoneId Label: default: zh-cn: 可用区配置 en: Zone Configuration - Parameters: - AckDistroVersion Label: default: zh-cn: Ack-Distro镜像版本 en: Ack-Distro image version - Parameters: - VpcId - VSwitchId - AutoCreateSecurityGroup - SecurityGroupId Label: default: zh-cn: 网络配置 en: Choose existing Infrastructure Configuration - Parameters: - EcsInstanceType - InternetChargeType - InternetMaxBandwidthOut - SystemDiskCategory - SystemDiskSize - NeedCreateDataDisk - DataDiskSize - InstancePassword Label: default: en: Instance Configuration zh-cn: 节点配置