利用Packer自定义镜像建立容器集群

阿里云容器服务Kubernetes集群支持CentOS操做系统,在绝大多数状况下能够知足客户的要求。可是有些客户因为业务系统对操做系统依赖比较高,但愿定制化一些操做系统参数,则能够用自定义镜像来建立Kubernetes集群。html

建立自定义操做系统镜像有两种方式,一是在控制台上经过为一台ECS建立快照的方式建立镜像,注意必定要基于阿里云CentOS做为基础镜像,把对操做系统的定制化更新完打成镜像便可。但这种方式的不便之处在于,若是每次对操做系统镜像有更新,则都要手动操做一遍,很难自动化。并且若是是从已有的Kubernetes节点制做镜像,还须要把Docker,Kubelet等清理干净才能制做镜像,步骤繁琐且容易遗漏。node

另一种方式就是本文介绍的用Packer构建镜像。相关的参考文档:使用Packer建立自定义镜像。采用Packer构建镜像的好处是能够把构建方式自动化,构建所需的参数文件中包含了对干净的基础镜像所作的修改,一目了然,而且能够把配置进行版本化管理。后期须要构建新的镜像,只需改变配置从新执行一下Packer构建便可,很是方便,是在生产环境中使用自定义镜像的推荐方式。git

那么有没有一个针对容器服务集群的Packer配置模版呢?容器服务团队开源的ack-image-builder就是一个这样的示例项目。下面咱们就来一块儿动手实践一下。github

安装Packer

能够根据官方文档安装Packer https://www.packer.io/intro/getting-started/install.html 。json

建立自定义镜像

克隆ack-image-builder项目到本地,能够看到config和scripts目录下是一些示例定制化脚本,读者能够根据本身的需求更新改。centos

$ git clone https://github.com/AliyunContainerService/ack-image-builder.git
$ cd ack-image-builder
ack-image-builder $ tree
.
├── LICENSE.txt
├── README.md
├── ack-centos.json
├── config
│   └── default.sh
└── scripts
    ├── cleanUpKerneles.sh
    ├── reboot.sh
    ├── updateKernel.sh
    └── verify.sh

2 directories, 8 files

ack-centos.json 能够配置在把生成好的自定义镜像存在哪一个区(示例中为cn-hangzhou)。ide

{
  "variables": {
    "region": "cn-hangzhou",
    "image_name": "ack_test_image{{timestamp}}",
    "source_image": "centos_7_06_64_20G_alibase_20190218.vhd",
    ...
  },

配置好阿里云帐号的AK,而后执行构建命令。测试

export ALICLOUD_ACCESS_KEY=XXX
export ALICLOUD_SECRET_KEY=XXX
packer build ack-centos.json

大约7-8分钟一个新的自定义镜像就构建成功了。能够进入ECS控制台查看新生成的镜像。ui

利用自定义镜像建立容器集群

开通自定义镜像白名单

读者若是须要尝试自定义镜像能力,须要先开工单,申请在容器服务控制台上开通自定义镜像的白名单。阿里云

建立容器集群

白名单开通后进入容器服务控制台 https://cs.console.aliyun.com/#/k8s/cluster/list,建立Kubernetes集群。选择自定义镜像所在的区,在示例中是cn-hangzhou。

在建立集群的页面中点击"显示高级选项",会出现"自定义镜像"的选择界面:

若是在选择中找不到刚建立的镜像,请检查一下集群和自定义镜像是否在同一个Region。

选择了自定义镜像后点击建立集群便可完成一个自定义镜像集群的建立。

集群扩容与自动伸缩

使用自定义镜像建立集群后,集群的扩容与自动伸缩中所用的都是自定义镜像。

Terraform 中自定义镜像支持

利用Terraform建立容器集群也可使用自定义镜像,具体参数是:

image_id - The ID of node image.

相关连接以下:

专有集群:https://www.terraform.io/docs/providers/alicloud/r/cs_kubernetes.html

托管集群:https://www.terraform.io/docs/providers/alicloud/r/cs_managed_kubernetes.html

讨论

自定义镜像建立集群为不少有对操做系统有定制化要求的客户带来了很大的便利性,在使用自定义镜像的过程当中几个比较好的作法是:根据阿里云的提供的最新的CentOS镜像来定制化,利用自定义建立集群后要充分测试,防止对操做系统的更改引起冲突。在实践中也建议基于Packer示例项目来构建镜像。


原文连接 本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索