随着云原生时代的到来,用户应用、业务上云的需求也愈来愈多,不一样的业务场景对容器平台的需求也不尽相同,其中一个很是重要的需求就是使用自定义镜像建立ACK集群。html
ACK支持用户使用自定义镜像建立Kubernetes集群,但用户在制做打包自定义镜像时,每每会遇到如下痛点:
(1)人工操做步骤,效率低
(2)镜像变动历史记录缺失,不便于故障定位
(3)没法对自定义镜像进行校验并判断是否符合ACK集群节点要求git
基于以上痛点,咱们开源了ack-image-builder项目帮助用户快速制做符合ACK集群节点要求的自定义镜像。github
ack-image-builder项目基于开源工具HashiCorp Packer,提供默认配置模板和校验脚本。shell
使用ack-image-builder项目建立ACK集群自定义节点镜像的步骤以下:json
从官方下载页面选择操做系统对应的软件版本,并按照安装说明文档安装和验证packer。centos
$ packer version Packer v1.4.1
说明packer已安装成功。ssh
使用Packer建立自定义镜像时,须要建立一个JSON格式的模板文件。在该模板文件中,您须要指定建立自定义镜像的 Alicloud Image Builder(生成器) 和 Provisioners(配置器)。curl
{ "variables": { "region": "cn-hangzhou", "image_name": "test_image{{timestamp}}", "source_image": "centos_7_06_64_20G_alibase_20190711.vhd", "instance_type": "ecs.n1.large", "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [ { "type": "alicloud-ecs", "access_key": "{{user `access_key`}}", "secret_key": "{{user `secret_key`}}", "region": "{{user `region`}}", "image_name": "{{user `image_name`}}", "source_image": "{{user `source_image`}}", "ssh_username": "root", "instance_type": "{{user `instance_type`}}", "io_optimized": "true" } ], "provisioners": [ { "type": "shell", "scripts": [ "scripts/updateKernel.sh", "scripts/reboot.sh", "scripts/cleanUpKerneles.sh", "config/default.sh", "scripts/updateDNS.sh", "scripts/verify.sh" ], "expect_disconnect": true } ] }
参数 | 描述 |
---|---|
access_key | 您的AccessKeyID |
secret_key | 您的AccessKeySecret |
region | 建立自定义镜像时使用临时资源的地域 |
image_name | 自定义镜像的名称 |
source_image | 基础镜像的名称,能够从阿里云公共镜像列表得到 |
instance_type | 建立自定义镜像时生成的临时实例的类型 |
provisioners | 建立自定义镜像时使用的 Packer 配置器 类型 |
制做自定义镜像的权限要求较大,通常建议用户建立子帐户并受权Packer须要的对应RAM Policy,并建立AK。工具
导入AK:ui
export ALICLOUD_ACCESS_KEY=XXXXXX export ALICLOUD_SECRET_KEY=XXXXXX
制做自定义镜像:
$ packer build alicloud.json alicloud-ecs output will be in this color. ==> alicloud-ecs: Prevalidating source region and copied regions... ==> alicloud-ecs: Prevalidating image name... alicloud-ecs: Found image ID: centos_7_06_64_20G_alibase_20190711.vhd ==> alicloud-ecs: Creating temporary keypair: xxxxxx ==> alicloud-ecs: Creating vpc... alicloud-ecs: Created vpc: xxxxxx ==> alicloud-ecs: Creating vswitch... alicloud-ecs: Created vswitch: xxxxxx ==> alicloud-ecs: Creating security group... alicloud-ecs: Created security group: xxxxxx ==> alicloud-ecs: Creating instance... alicloud-ecs: Created instance: xxxxxx ==> alicloud-ecs: Allocating eip... alicloud-ecs: Allocated eip: xxxxxx alicloud-ecs: Attach keypair xxxxxx to instance: xxxxxx ==> alicloud-ecs: Starting instance: xxxxxx ==> alicloud-ecs: Using ssh communicator to connect: 47.111.127.54 ==> alicloud-ecs: Waiting for SSH to become available... ==> alicloud-ecs: Connected to SSH! ==> alicloud-ecs: Provisioning with shell script: scripts/verify.sh alicloud-ecs: [20190726 11:04:10]: Check if kernel version >= 3.10\. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if systemd version >= 219\. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if sshd is running and listen on port 22\. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if cloud-init is installed. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if wget is installed. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if curl is installed. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if kubeadm is cleaned up. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if kubelet is cleaned up. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if kubectl is cleaned up. Verify Passed! alicloud-ecs: [20190726 11:04:10]: Check if kubernetes-cni is cleaned up. Verify Passed! ==> alicloud-ecs: Stopping instance: xxxxxx ==> alicloud-ecs: Waiting instance stopped: xxxxxx ==> alicloud-ecs: Creating image: test_image1564110199 alicloud-ecs: Detach keypair xxxxxx from instance: xxxxxxx ==> alicloud-ecs: Cleaning up 'EIP' ==> alicloud-ecs: Cleaning up 'instance' ==> alicloud-ecs: Cleaning up 'security group' ==> alicloud-ecs: Cleaning up 'vSwitch' ==> alicloud-ecs: Cleaning up 'VPC' ==> alicloud-ecs: Deleting temporary keypair... Build 'alicloud-ecs' finished. ==> Builds finished. The artifacts of successful builds are: --> alicloud-ecs: Alicloud images were created: cn-hangzhou: m-bp1aifbnupnaktj00q7s
其中scripts/verify.sh为对检查项的校验部分。
登陆容器服务控制台,选择建立 Kubernetes 专有版 集群, 配置集群建立须要的相关基础信息后,点开 显示高级选项 并选择自定义镜像进行集群建立。
本文为云栖社区原创内容,未经容许不得转载。