利用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示例項目來構建鏡像。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索