利用Helm簡化Kubernetes應用部署
Helm 是由 Deis 發起的一個開源工具,有助於簡化部署和管理 Kubernetes 應用。
Helm 基本概念
Helm 可以理解為 Kubernetes 的包管理工具,可以方便地發現、共享和使用為Kubernetes構建的應用,它包含幾個基本概念
- Chart:一個 Helm 包,其中包含了運行一個應用所需要的鏡像、依賴和資源定義等,還可能包含 Kubernetes 集群中的服務定義,類似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件,
- Release: 在 Kubernetes 集群上運行的 Chart 的一個實例。在同一個集群上,一個 Chart 可以安裝很多次。每次安裝都會創建一個新的 release。例如一個 MySQL Chart,如果想在服務器上運行兩個數據庫,就可以把這個 Chart 安裝兩次。每次安裝都會生成自己的 Release,會有自己的 Release 名稱。
- Repository:用於發布和存儲 Chart 的倉庫。
Helm 組件
Helm 采用客戶端/服務器架構,有如下組件組成:
- Helm CLI 是 Helm 客戶端,可以在本地執行
- Tiller 是服務器端組件,在 Kubernetes 群集上運行,並管理 Kubernetes 應用程序的生命周期
- Repository 是 Chart 倉庫,Helm客戶端通過HTTP協議來訪問倉庫中Chart的索引文件和壓縮包。
安裝Helm
首先,利用阿裏雲容器服務來創建Kubernetes集群
然後
- 依照通過 kubectl 連接 Kubernetes 集群一文,在本地計算機上安裝和配置
kubectl
- 若要查看 Kubernetes 目標群集的信息,請鍵入以下命令:
kubectl cluster-info
- 參考文檔在本地計算機上安裝 Helm
安裝好 Helm 後,通過鍵入如下命令,在 Kubernetes 群集上安裝 Tiller:
helm init --upgrade
在缺省配置下, Helm 會利用 "gcr.io/kubernetes-helm/tiller" 鏡像在Kubernetes集群上安裝配置 Tiller;並且利用 "https://kubernetes-charts.storage.googleapis.com" 作為缺省的 stable repository 的地址。由於在國內可能無法訪問 "gcr.io", "storage.googleapis.com" 等域名,阿裏雲容器服務為此提供了鏡像站點。
請執行如下命令利用阿裏雲的鏡像來配置 Helm
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.5.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
安裝成功完成後,將看到如下輸出:
$ helm init --upgrade
$HELM_HOME has been configured at /Users/test/.helm.
Tiller (the helm server side component) has been installed into your Kubernetes Cluster.
Happy Helming!
Helm 基礎操作
若要查看在存儲庫中可用的所有 Helm charts,請鍵入以下命令:
helm search
將看到如下輸出:
$ helm search
NAME VERSION DESCRIPTION
stable/aws-cluster-autoscaler 0.2.1 Scales worker nodes within autoscaling groups.
...
若要更新charts列表以獲取最新版本,請鍵入:
helm repo update
若要查看在群集上安裝的Charts列表,請鍵入:
helm list
或者縮寫
helm ls
自Kubernetes 1.6版本開始,API Server啟用了RBAC授權。而目前的Tiller部署沒有定義授權的ServiceAccount,這會導致訪問API Server時被拒絕。我們可以采用如下方法,明確為Tiller部署添加授權。
kubectl create serviceaccount --namespace kube-system tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
有關利用 Helm 使用的詳細信息,請參閱文檔。
通過 Helm 部署 WordPress
下麵我們將利用Helm,來部署一個 WordPress 博客網站
輸入如下命令
helm install --name wordpress-test --set "persistence.enabled=false,mariadb.persistence.enabled=false" stable/wordpress
注: 目前阿裏雲Kubernetes服務中還沒有開啟塊存儲的PersistentVolume支持,所以在示例中禁止了數據持久化。
我們可以得到如下的結果
NAME: wordpress-test
LAST DEPLOYED: Sat Aug 5 18:54:02 2017
NAMESPACE: default
STATUS: DEPLOYED
...
利用如下命令可以獲得 WordPress 的訪問地址
echo https://$(kubectl get svc wordpress-test-wordpress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
通過上麵的URL,可以在瀏覽器上看到熟悉的WordPress站點,
也可以根據 Charts的說明,利用如下命令獲得WordPress站點的管理員用戶和密碼
echo Username: user
echo Password: $(kubectl get secret --namespace default wordpress-test-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
總結
在Kubernetes中,應用管理是需求最多、挑戰最大的領域。Helm項目提供了一個統一軟件打包方式,支持版本控製,可以大大簡化Kubernetes應用分發與部署中的複雜性;Helm也催生了社區的發展壯大,越來越多的軟件提供商,如Bitnami等公司等,開始提供高質量的Charts。在 https://kubeapps.com/ 你可以尋找和發現已有的Charts。
了解更多阿裏雲容器服務內容,請訪問 https://www.aliyun.com/product/containerservice
最後更新:2017-08-13 22:34:39