利用Packer自定义镜像创建容器集群
阿里云容器服務Kubernetes集群支持CentOS操作系統,在絕大多數情況下可以滿足客戶的要求。但是有些客戶由于業務系統對操作系統依賴比較高,希望定制化一些操作系統參數,則可以用自定義鏡像來創建Kubernetes集群。
創建自定義操作系統鏡像有兩種方式,一是在控制臺上通過為一臺ECS創建快照的方式創建鏡像,注意一定要基于阿里云CentOS作為基礎鏡像,把對操作系統的定制化更新完打成鏡像即可。但這種方式的不便之處在于,如果每次對操作系統鏡像有更新,則都要手動操作一遍,很難自動化。而且如果是從已有的Kubernetes節點制作鏡像,還需要把Docker,Kubelet等清理干凈才能制作鏡像,步驟繁瑣且容易遺漏。
另外一種方式就是本文介紹的用Packer構建鏡像。相關的參考文檔:使用Packer創建自定義鏡像。采用Packer構建鏡像的好處是可以把構建方式自動化,構建所需的參數文件中包含了對干凈的基礎鏡像所做的修改,一目了然,并且可以把配置進行版本化管理。后期需要構建新的鏡像,只需改變配置重新執行一下Packer構建即可,非常方便,是在生產環境中使用自定義鏡像的推薦方式。
那么有沒有一個針對容器服務集群的Packer配置模版呢?容器服務團隊開源的ack-image-builder就是一個這樣的示例項目。下面我們就來一起動手實踐一下。
安裝Packer
可以根據官方文檔安裝Packer?https://www.packer.io/intro/getting-started/install.html?。
創建自定義鏡像
克隆ack-image-builder項目到本地,可以看到config和scripts目錄下是一些示例定制化腳本,讀者可以根據自己的需求更新改。
$ 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.sh2 directories, 8 files在ack-centos.json?可以配置在把生成好的自定義鏡像存在哪個區(示例中為cn-hangzhou)。
{"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控制臺查看新生成的鏡像。
利用自定義鏡像創建容器集群
開通自定義鏡像白名單
讀者如果需要嘗試自定義鏡像能力,需要先開工單,申請在容器服務控制臺上開通自定義鏡像的白名單。
創建容器集群
白名單開通后進入容器服務控制臺?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示例項目來構建鏡像。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的利用Packer自定义镜像创建容器集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于深度学习模型WideDeep的推荐
- 下一篇: 五分钟教你如何用函数计算部署钉钉群发机器