閱讀543 返回首頁    go 阿裏雲 go 技術社區[雲棲]


利用Helm簡化Kubernetes應用部署

15019343434549

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的索引文件和壓縮包。

15019325767895

安裝Helm

首先,利用阿裏雲容器服務來創建Kubernetes集群

然後

安裝好 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站點,

15019352696985

也可以根據 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

  上一篇:go  MySQL8.0新特性隨筆: NOWAIT以及SKIP LOCKED
  下一篇:go  python項目在無外網的生產環境解決沙盒依賴問題