Helm安裝
Helm client安裝
helm項目地址:
https://github.com/helm/helm
可以直接下載helm的二進制包,解壓后,將二進制文件復制到標准命令路徑即可完成安裝
Helm tiller安裝
Helm Tiller是Helm的server,Tiller有多種安裝方式,比如本地安裝或以pod形式部署到Kubernetes集群中。我們這里采用pod安裝的方式。
安裝Tiller的最簡單方式是helm init
, 該命令會檢查helm本地環境設置是否正確,helm init會連接kubectl默認連接的kubernetes集群(可以通過kubectl config view查看),一旦連接集群成功,tiller會被安裝到kube-system namespace中。
但是,在國內環境中,我們直接使用helm init
會無法拉取到tiller鏡像,需要手動指定鏡像地址,同時如果Kubernetes集群開啟了rbac,還需要指定運行tiller的servicaccount,並為該serviceaccount作合適的授權。
下面是實際安裝時的指令:
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.0 --service-account=tiller --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
上面的命令指定了安裝時使用的tiller鏡像的地址,同時指定了默認的chart倉庫的地址。
helm init常用配置項如下:
- --canary-image:安裝金絲雀build
- --tiller-image:安裝指定image
- --kube-context:安裝到指定的kubernetes集群
- --tiller-namespace:安裝到指定的namespace中
- --upgrade:如果tiller server已經被安裝了,可以使用此選項更新鏡像
- --service-account:用於指定運行tiller server的serviceaccount,該account需要事先在kubernetes集群中創建,且需要相應的rbac授權
創建serviceaccount並授權的示例:
# cat helm-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: helm
name: tiller
namespace: kube-system
# cat helm-rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: helm-rbac
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
我這里是直接為其授予超級管理員權限,如果需要對其進行精細權限控制,可參考helm官方文檔:https://docs.helm.sh/using_helm/#role-based-access-control
安裝完成以后,可以通過如下操作查看tiller server的pod:
root@k8s-m:/home/www/server/kube-yamls/public/helm# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
tiller-deploy-5d4b89d6c9-srvpr 1/1 Running 0 4d
看到tiller server正常運行,即安裝成功。
Chart倉庫配置
chart倉庫用來存儲和分享打包的chart,分為公共倉庫和私有倉庫,其中官方倉庫由Kubernetes Charts維護,地址是https://github.com/helm/charts。但是在國內訪問官方倉庫,一個要翻牆,另一個慢。所以在國內環境中,公共倉庫推薦使用阿里雲chart倉庫,地址為https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts。
私有chart倉庫
chart倉庫的組成
在更多的時候,我們需要自己維護一個私有的chart倉庫。而chart倉庫實際上,就是一個可用來存儲index.yaml與打包的chart文件的http server,任何一個能夠提供yaml與tar文件的http server都可以當做chart倉庫。
下面我們簡單說一說chart倉庫的結構:
一個chart倉庫是由chart包與index.yaml文件組成,index.yaml記錄了chart倉庫中全部chart的索引,一個chart倉庫示例如下:
charts/
|
|- index.yaml
|
|- alpine-0.1.2.tgz
|
|- alpine-0.1.2.tgz.prov
其中index.yaml
文件中記錄了chart的諸如名稱、url、version等一些metadata信息:
apiVersion: v1
entries:
alpine:
- created: 2016-10-06T16:23:20.499814565-06:00
description: Deploy a basic Alpine Linux pod
digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
home: https://k8s.io/helm
name: alpine
sources:
- https://github.com/kubernetes/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
version: 0.2.0
- created: 2016-10-06T16:23:20.499543808-06:00
description: Deploy a basic Alpine Linux pod
digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
home: https://k8s.io/helm
name: alpine
sources:
- https://github.com/kubernetes/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
version: 0.1.0
nginx:
- created: 2016-10-06T16:23:20.499543808-06:00
description: Create a basic nginx HTTP server
digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
home: https://k8s.io/helm
name: nginx
sources:
- https://github.com/kubernetes/charts
urls:
- https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
version: 1.1.0
generated: 2016-10-06T16:23:20.499029981-06:00
創建本地倉庫
一個簡單的創建一個本地倉庫的示例:
helm serve --address 0.0.0.0:8879 --repo-path ./charts
chart倉庫基本管理
- 列出倉庫中的charts
helm repo list
- 打包本地開發的chart
helm package mychart
- 上傳chart到chart倉庫
helm repo add mychart http://1270.0.1:8879/charts
- 查找chart
helm search mychart -l