基于容器服务 ACK 发行版打造 CNStack 社区版
簡介:本文將介紹如何使用 ACK Distro 作為基礎鏡像打造 CNStack 社區版以及CNStack 社區版中的容器服務 ACK 敏捷版產品如何幫助用戶更好的使用容器平臺能力。
作者:臨石
CNStack 社區版(CNStack Community Edition, CNStack CE)是阿里云云原生 Stack(CNStack)產品家族中的一員。CNStack 社區版可以免費下載使用,支持在有限的資源上進行部署和運行。CNStack 社區版使用 sealer 進行打包和交付,采用容器服務 ACK 發行版(ACK Distro)作為 Kubernetes 基礎。
本文將介紹:(1)如何使用 ACK Distro 作為基礎鏡像打造 CNStack 社區版。您可以將這個過程看做是以 ACK Distro 為基礎鏡像,利用 sealer 打包和交付應用的一個例子(2)CNStack 社區版中的容器服務 ACK 敏捷版產品如何幫助用戶更好的使用容器平臺能力。
容器服務 ACK 敏捷版是第一個集成到 CNStack 社區版的阿里云云原生產品。
基于 ACK Distro 構建 CNStack 社區版
當前 CNStack 社區版發布的內容包括了“容器服務 ACK 敏捷版”部分,使用 sealer 的集群鏡像技術對產品進行打包和交付。ACK Distro 和容器服務 ACK 敏捷版組成的 CNStack 社區版集群鏡像結構如下。
基于 ACK Distro 制作 CNStack 社區版集群鏡像
CNStack 社區版采用 ACK Distro 作為 Kubernetes 基礎鏡像,通過 sealer 打包新的集群鏡像。
社區版集群通過集群鏡像文件 Kubefile 完成了以下工作:
- 在部署 ACK Distro 前對環境進行必要的配置(如創建 CNStack 社區版應用所需的本地目錄)
- 聲明和部署 CNStack 社區版的組件和配置
- 對部署完成的 ACK Distro 集群進行配置
Kubefile 內容如下:
# 采用ack-distro:v1.20.4-ack-2作為基礎鏡像 FROM ack-agility-registry.cn-shanghai.cr.aliyuncs.com/ecp_builder/ackdistro:v1.20.4-ack-2 COPY imageList manifests COPY kubeadm-cluster-config.yaml.tmpl etc # 部署/清理階段的prehook和posthook COPY plugin_localpv.yaml plugin COPY plugin_iptables.yaml plugin COPY plugin_clean.yaml plugin # 組件的chart和配置文件 COPY ../component/charts/localpv charts COPY ../component/charts/aecp-installer-operator charts COPY ../component/charts/aecp charts COPY ../component/charts/cluster-addon-configuration charts COPY ../component/clusterconfig.yaml manifests # 部署組件 CMD helm install localpv charts/localpv CMD helm install aecp-installer-operator charts/aecp-installer-operator CMD helm install aecp charts/aecp # 基于ACK-Distro部署的集群,針對ACK敏捷版進行配置 CMD kubectl create ns cluster-local CMD kubectl -n kube-system scale deploy hybridnet-webhook --replicas=1 CMD kubectl -n kube-system scale deploy hybridnet-manager --replicas=1 CMD kubectl taint nodes $(hostname | tr A-Z a-z) node-role.kubernetes.io/master=:NoSchedule- CMD kubectl label nodes $(hostname | tr A-Z a-z) lb=nginx CMD kubectl label nodes $(hostname | tr A-Z a-z) addon-local-repo=true # 等待組件ready。視機器性能不同,等待時間有差別,在我們的測試場景中,約3min左右結束 CMD for i in `seq 0 1 2000`;do if kubectl get addonconfiguration 2> /dev/null;then helm install cluster-addon-configuration charts/cluster-addon-configuration && break;fi; echo "wait CRD ready ... $i out of 2000 tries" && sleep 1; done CMD kubectl apply -f manifests/clusterconfig.yaml # 基礎功能需要適配無數據盤的場景,因此沒有使用本地存儲池功能 opne-local。在后面的Clusterfile部署方式中,可以再次開啟 CMD helm uninstall -n kube-system open-local這里介紹一下 CNStack 社區版在基于 ACK Distro 構建集群鏡像時使用的幾個主要功能:
- plugin 插件
- 通過 helm 部署組件
- 對集群進行配置,例如 label node 等操作
集群部署開始前、部署結束后、清理后執行的 hook 可以通過 plugin 插件實現。以 plugin_localpv.yaml 為例,通過.spec.action: PreInit 聲明上述動作是在集群部署開始前執行,動作內容描述在 data 中。data 描述中所創建的目錄是為 CNStack 社區版不使用額外數據盤場景下使用的,供應用容器掛載 hostpath 的 volume 使用。注意這些目錄僅會在用戶沒有使用 open-local 組件時使用,如果使用 open-local ,CNStack 社區版的組件將使用 open-local 提供的動態存儲資源池中的本地存儲(后續章節會介紹如何使用)。plugin_localpv.yaml 內容如下:
apiVersion: sealer.aliyun.com/v1alpha1 kind: Plugin metadata:name: prepare_local_dir # Specify this plugin name,will dump in $rootfs/plugin dir. spec:type: SHELLaction: PreInit # PreInit PreInstall PostInstalldata: |rm -rf /var/lib/cnstackcerm -rf /opt/aecpvgremove open-local-pool-0 --force || echo "No vg: open-local-pool-0 found. OK"mkdir -p /var/lib/cnstackce/data/storage-loki-0mkdir -p /var/lib/cnstackce/data/addon-package-standard-pvmkdir -p /var/lib/cnstackce/data/caas-api-pvmkdir -p /var/lib/cnstackce/data/caas-core-pvmkdir -p /var/lib/cnstackce/data/caas-db-caas-db-0mkdir -p /var/lib/cnstackce/data/grafana-pvmkdir -p /var/lib/cnstackce/data/prometheus-k8s-db-prometheus-k8s-0touch /var/lib/cnstackce/data/checker容器服務 ACK 敏捷版的所有組件都是以 helm 形式部署的,在 Kubefile 中僅需要體現為(1)將 helm chart 拷貝到 charts 目錄;(2)在部署時執行 helm install。由 ecp-installer 根據 manifests/clusterconfig.yaml 中聲明的參數自動部署其它容器服務 ACK 敏捷版組件。
最后,在 Kubefile 中通過 CMD 聲明在集群部署完成后對集群進行一些配置,例如節點打標(幫助容器服務 ACK 敏捷版選擇 LB 節點和 ingress 入口)、去掉污點等操作。
CNStack 社區版的 build 工程目錄如下,整個目錄可在文末獲取。
[root@cnstackcebuilder]~# tree charts -L 3 charts ├── build-cnstack-ce │ ├── build.sh │ ├── imageList │ ├── kubeadm-cluster-config.yaml.tmpl │ ├── Kubefile │ ├── plugin_clean.yaml │ ├── plugin_iptables.yaml │ ├── plugin_localpv.yaml │ └── readme.md └── component├── charts│ ├── aecp│ ├── aecp-installer-operator│ ├── cluster-addon-configuration│ └── localpv└── clusterconfig.yaml在 charts/build-cnstack-ce 下直接運行 bash build.sh test001(test001是 tag 名稱),sealer 工具將自動被下載和打包集群鏡像,可以通過 sealer images 查詢構建結果。
通過 Clusterfile 進行靈活的配置
前一個章節介紹生成的集群鏡像,可以在單機版環境上直接一鍵部署:
# 獲取sealer工具 wget -c "http://sealer.oss-cn-beijing.aliyuncs.com/sealers/sealer-v0.5.2-linux-amd64.tar.gz" && tar -xvf sealer-v0.5.2-linux-amd64.tar.gz -C /usr/binsealer run registry.cn-qingdao.aliyuncs.com/sealer-apps/cnstack-ce:1.1.0 -m `hostname -i` -p $passwd上述集群鏡像直接部署得到的集群,包括 CNStack 社區版的基礎功能集。專有云產品的用戶,根據自身需求不同,可能對產品使用體驗有著不同的要求:
- 有的用戶打算先行體驗最基礎的功能,查看功能列表、管理界面風格等。這些用戶期望的是部署十分簡單,最好一鍵就能完成,并且快速看到結果。
- 有的用戶希望在提供必要資源的條件下,體驗盡可能多的功能,例如進行 PoC
- 有的用戶希望通過細致的配置和資源規劃將容器平臺服務與自己的生產環境適配。
回到我們剛剛制作的集群鏡像,基礎功能集僅需要用戶準備一個 8C12G 的虛擬機,無需額外的數據盤,即可完成部署。(基礎功能集不包括監控、日志、彈性等高級功能。)ACK Distro 強大的地方在于,可以通過 sealer 配置 Clusterfile,開啟 ACK Distro 中 open-local 動態存儲池管理的能力,并在修改集群鏡像中默認的容器服務 ACK 敏捷版配置,部署出具備監控、日志、彈性等高級能力的全功能集版本。
當前 CNStack 社區版提供了 3 種部署規格,如下表格:
表格:CNStack 社區版當前的部署規模。
下面我們介紹如何通過修改 Clusterfile 開啟全功能集。
首先為開啟 open-local,需要在各個節點上配置 vg 資源。
apiVersion: sealer.aliyun.com/v1alpha1 kind: Plugin metadata:name: prepare_vg # Specify this plugin name,will dump in $rootfs/plugin dir. spec:type: SHELLaction: PreInit # PreInit PreInstall PostInstall# init data disk for open-local-lvm# VG_DEV must be set as an available data disk name (lsblk -p), e.g. VG_DEV=/dev/vdbdata: |VG_DEV=#DataDiskDeviceName#yum install lvm2 -yvgremove open-local-pool-0 --force || echo "no open-local-pool-0 found, volume group Cleaning OK..."echo "start vgcreate. device name: $VG_DEV"vgcreate open-local-pool-0 $VG_DEVif [ $? -ne 0 ];then echo "vgcreate failed" && exit 1;fiecho "vg preparation done with success."在 CNStack 集群鏡像中我們關閉了 open-local 并將 StorageClass 配置為 manual,所以需要在 Clusterfile 通過 PostInstall Plugin 重新部署 open-local,以及配置新的 StorageClass。
apiVersion: sealer.aliyun.com/v1alpha1 kind: Plugin metadata:name: install-open-local # Specify this plugin name,will dump in $rootfs/plugin dir. spec:type: SHELLaction: PostInstall # PreInit PreInstall PostInstall'on': $MASTER_IP_1# install open-localdata: |helm uninstall localpvhelm install -n kube-system open-local charts/open-local容器服務 ACK 敏捷版的組件部署開關和參數配置可以通過 Config 對象 overwrite 集群鏡像中的對應配置,以將容器服務 ACK 敏捷版組件的 SC 修改為 open-local 為例:
apiVersion: sealer.aliyun.com/v1alpha1 kind: Config metadata:name: cluster-addon-sc spec:path: charts/cluster-addon-configuration/values.yamldata: |dataStorageClass: open-local-lvm從上面的例子可以看出,部署規格的靈活性并不是簡單的子功能增加和刪減 —— 不負責任的組合會導致無窮的交付和運維風險。CNStack 社區版提供的規格是經過設計驗證,并且在部署流程、資源規劃方面都進行了優化的方案,您放心使用。
得益于 sealer、ACK Distro、以及上層組件的靈活性,CNStack 社區版還有更多可以定制的維度,比如更加靈活的產品功能組合,適配不同規模業務的產品配置等,會在未來陸續發布。
基于 ACK Distro 使用 CNStack 社區版的優勢
可以幫助用戶搭建云原生基礎設施
容器平臺是用戶應用與 IaaS 交互的新界面,對上負責應用的發布和維護,對下負責基礎設施的資源管理,將用戶數據中心中的異構基礎設施抽象為更有利于云原生最佳實踐落地的基礎設施。業內種種最佳實踐:觀測、容災、成本優化、微服務管理、AI 等很多先進的 IT 解決方案,都離不開一個“符合預期”、可靠的云原生基礎設施。
圖:CNStack 產品能力
圖中的容器服務 ACK 敏捷版的能力之一,就是幫助用戶搭建可靠的云原生基礎設施。經過幾年時間無數客戶的專有云的服務經歷,容器服務 ACK 敏捷版在搭建云原生基礎設施方面,總結出了一系列關鍵經驗,在 CNStack 社區版中在以下兩個方面進行了著重落實:
良好的交付體驗
售賣時天花亂墜,交付時一周起步,是專有云里面困擾用戶的頭等問題之一。繁瑣的操作流程,復雜到只有資深工程師才可能搞清楚的功能依賴,文本很長卻沒有任何信息量的錯誤提示,以及沒有明確的驗收標準,是我們在專有云交付場景中遇到的主要問題。CNStack 社區版中,我們以 sealer 作為打包和交付工具 ,借助 ACK Distro 適配多種 IaaS 的能力,明確各階段部署任務的邊界,做到了最小功能集版本一鍵部署,高階特性通過 Clusterfile 一個文件描述&快一鍵部署。
適配用戶 IaaS
考慮到用戶在 IT 設備上的投入周期和決策的復雜性,讓 CNStack 社區版能夠運行在主流環境上部署和流暢運行是我們追求的目標。適配用戶 IaaS 包含兩方面含義:
如果將 ACK Distro 以及其中的存儲、網路組件比作我們提供的工具,在不同的能工巧匠手中可以獨立發揮作用,那么 CNStack 社區版中的容器服務 ACK 敏捷版就是一個精心打造的工具箱,為用戶提供開箱即用的、能夠適配用戶 IaaS 的容器平臺服務。我們從經典的計算、存儲、網絡三個維度,來描述容器服務 ACK 敏捷版在適配 IaaS 方面的工作以為幫助用戶維持用云習慣的努力:
- 計算
- 容器服務 ACK 敏捷版使用與公有云 ACK 相同的 Kubernetes 組件鏡像,因此在社區合規、安全、版本兼容方面,能夠做到最佳適配
- 存儲(open-local)
- 部分用戶沒有可靠的商業存儲解決方案,我們可以將用戶用于部署 Kubernetes 的節點存儲以資源池的形式管理起來
- 為 etcd、docker、kubelet 預留部分資源的前提下,進行交付,并保證運行時的穩定性
- 網絡(hybridnet)
- 通過提供 overlay/underlay 容器網絡平滑共存/轉化的能力,以 overlay 容器網絡屏蔽底層基礎設施,以 underlay 容器網絡對接底層基礎設施,一定程度上可以做到,在屏蔽底層網絡基礎設施的同時,提供高性能的、可對外直通的網絡能力
- 提供網絡控制的統一模型和平面,統一管理 overlay/underlay 網絡,提供了豐富的地址策略分配、網絡資源管理能力
與公有云基礎設施有完善、穩定的 API 不同,用戶 IaaS 因為 IaaS 供應商、版本、合規要求、運維習慣等,有著不同基礎設施調用 API 和不同的配置要求。容器服務 ACK 敏捷版截止到目標適配了阿里云、華為云、電信云、易捷行云 EasyStack、VMWare、ZStack 等(注:社區版中目前僅在 ECS/物理機的 CentOS 上經歷了充分測試,更多適配將在后續版本引入)
可以幫助用戶同時管理基礎設施和應用
CNStack 社區版幫助用戶管理基礎設施以及發布和運維運行在基礎設施上的應用。容器服務 ACK 敏捷版提供了應用運維、集群運維、平臺管理三個方面的能力賦能用戶。受限于篇幅,我們將簡單介紹功能列表,未來會有專門的文章為您詳細介紹這些功能。
- 應用運維:
- 應用發布。支持通過多種方式將您的應用發布到集群中
- 制品倉庫。支持對接您自有的制品倉庫,也支持對接阿里云 ACR
- 平臺運維:
- 幫助管理員定義多個組織和租戶,使平臺資源可以被更多用戶使用的同時,提供足夠的隔離性以保障安全
- 集群運維:
- 幫助您詳細的了解集群和應用的運行現狀,包括資源列表、監控大盤、各種服務日志等
下一篇文章我們會詳細介紹這些功能,敬請期待。
CNStack 社區版未來的發展
通過云原生技術方案服務企業的數字化轉型是 CNStack 的使命,目前 CNStack 社區版通過 sealer、ACK Distro 和容器服務 ACK 敏捷版,能夠幫助用戶搭建以云原生底座為核心的基礎設施,并進行平臺和應用的管理。但用戶想享受更多云原生帶來的便利,還需要更多的中間產品例如 EDAS(應用管理)、消息隊列、監控,以及更多的解決方案,如邊緣、AI、大數據等。隨著 CNStack 社區版的不斷更新,我們將陸續為用戶帶來更多的能力,方便用戶接觸到我們的產品和服務。
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的基于容器服务 ACK 发行版打造 CNStack 社区版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ESSD技术解读-01】 云原生时代,
- 下一篇: 一文看懂边缘云在广电行业的应用