您好,登錄后才能下訂單哦!
這篇文章主要介紹Kubernetes中如何安裝Helm2.7.2,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Helm 是由 Deis 發(fā)起的一個開源工具,有助于簡化部署和管理 Kubernetes 應用。本文將介紹Helm的基本概念和使用方式,演示在阿里云的Kubenetes集群上利用 Helm 來部署應用。
Helm 是由 Deis 發(fā)起的一個開源工具,有助于簡化部署和管理 Kubernetes 應用。
Helm 可以理解為 Kubernetes 的包管理工具,可以方便地發(fā)現(xiàn)、共享和使用為Kubernetes構建的應用,它包含幾個基本概念
Chart:一個 Helm 包,其中包含了運行一個應用所需要的鏡像、依賴和資源定義等,還可能包含 Kubernetes 集群中的服務定義,類似 Homebrew 中的 formula,APT 的 dpkg 或者 Yum 的 rpm 文件,
Release: 在 Kubernetes 集群上運行的 Chart 的一個實例。在同一個集群上,一個 Chart 可以安裝很多次。每次安裝都會創(chuàng)建一個新的 release。例如一個 MySQL Chart,如果想在服務器上運行兩個數(shù)據(jù)庫,就可以把這個 Chart 安裝兩次。每次安裝都會生成自己的 Release,會有自己的 Release 名稱。
Repository:用于發(fā)布和存儲 Chart 的倉庫。
Helm 采用客戶端/服務器架構,有如下組件組成:
Helm CLI 是 Helm 客戶端,可以在本地執(zhí)行
Tiller 是服務器端組件,在 Kubernetes 群集上運行,并管理 Kubernetes 應用程序的生命周期
Repository 是 Chart 倉庫,Helm客戶端通過HTTP協(xié)議來訪問倉庫中Chart的索引文件和壓縮包。
Helm Client安裝過程如下:
下載 Helm 2.7.2:https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
下載不了我上傳一份到百度網(wǎng)盤:https://pan.baidu.com/s/1pLPzVS3
解包:tar -zxvf helm-v2.7.2-linux-amd64.tgz
helm二進制文件移到/usr/local/bin目錄:
mv linux-amd64/helm /usr/local/bin/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" 等域名,阿里云容器服務為此提供了鏡像站點。
請執(zhí)行如下命令利用阿里云的鏡像來配置 Helm
helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.7.2 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
安裝成功完成后,將看到如下輸出:
$ helm init --upgrade $HELM_HOME has been configured at /root/.helm. Tiller (the helm server side component) has been installed into your Kubernetes Cluster. Happy Helming!
若要查看在存儲庫中可用的所有 Helm charts,請鍵入以下命令:
helm search
將看到如下輸出:
[root@cz_fbsdb500_06 templates]# helm search NAME VERSION DESCRIPTION local/mychart 0.1.0 A Helm chart for Kubernetes stable/acs-engine-autoscaler 2.1.0 Scales worker nodes within agent pools stable/artifactory 6.1.0 Universal Repository Manager supporting all maj... stable/aws-cluster-autoscaler 0.3.1 Scales worker nodes within autoscaling groups. stable/buildkite 0.2.0 Agent for Buildkite stable/centrifugo 2.0.0 Centrifugo is a real-time messaging server. stable/chaoskube 0.5.0 Chaoskube periodically kills random pods in you... stable/chronograf 0.3.0 Open-source web application written in Go and R... ...
若要更新charts列表以獲取最新版本,請鍵入:
helm repo update
若要查看在群集上安裝的Charts列表,請鍵入:
helm list
備注:kubernetes每個node一定要執(zhí)行,否則會報連不上44134端口
yum install socat -y
自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"}}}}' kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
檢查是否安裝成功:
[root@cz_fbsdb500_06 tmp]# kubectl -n kube-system get pods|grep tiller tiller-deploy-3366552617-sfw20 1/1 Running 0 14h [root@cz_fbsdb500_06 tmp]# helm version Client: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
至此helm已經搭建成功,我們進行部署測試。
我們創(chuàng)建一個名為mychart的chart,看一看chart的文件結構。
[root@cz_fbsdb500_06 chart_data]# helm create mychart Creating mychart [root@cz_fbsdb500_06 chart_data]# tree mychart mychart ├── charts ├── Chart.yaml ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ └── service.yaml └── values.yaml 2 directories, 7 files
Templates
目錄下是yaml文件的模板,遵循Go template語法。使用過Hugo的靜態(tài)網(wǎng)站生成工具的人應該對此很熟悉。
我們查看下deployment.yaml
文件的內容。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: {{ template "fullname" . }} labels: chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}" spec: replicas: {{ .Values.replicaCount }} template: metadata: labels: app: {{ template "fullname" . }} spec: containers: - name: {{ .Chart.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - containerPort: {{ .Values.service.internalPort }} livenessProbe: httpGet: path: / port: {{ .Values.service.internalPort }} readinessProbe: httpGet: path: / port: {{ .Values.service.internalPort }} resources: {{ toYaml .Values.resources | indent 12 }}
這是該應用的Deployment的yaml配置文件,其中的雙大括號包擴起來的部分是Go template,其中的Values是在values.yaml
文件中定義的:
# Default values for mychart. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: nginx tag: stable pullPolicy: IfNotPresent service: name: nginx type: ClusterIP externalPort: 80 internalPort: 80 resources: limits: cpu: 100m memory: 128Mi requests: cpu: 100m memory: 128Mi
比如在Deployment.yaml
中定義的容器鏡像image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
其中的:
.Values.image.repository
就是nginx
.Values.image.tag
就是stable
以上兩個變量值是在create chart的時候自動生成的默認值。
我們將默認的鏡像地址和tag改成我們自己的鏡像
10.0.0.162/library/nginx:1.9
[root@cz_fbsdb500_06 chart_data]# helm install --dry-run --debug mychart [debug] Created tunnel using local port: '39156' [debug] SERVER: "127.0.0.1:39156" [debug] Original chart version: "" [debug] CHART PATH: /tmp/chart_data/mychart NAME: ardent-otter REVISION: 1 RELEASED: Fri Dec 22 10:31:45 2017 CHART: mychart-0.1.0 USER-SUPPLIED VALUES: {} COMPUTED VALUES: image: pullPolicy: IfNotPresent repository: nginx tag: stable ingress: annotations: null enabled: false hosts: - chart-example.local tls: null replicaCount: 1 resources: {} service: externalPort: 80 internalPort: 80 name: nginx type: ClusterIP HOOKS: MANIFEST: --- # Source: mychart/templates/service.yaml apiVersion: v1 kind: Service metadata: name: ardent-otter-mychart labels: app: mychart chart: mychart-0.1.0 release: ardent-otter heritage: Tiller spec: type: ClusterIP ports: - port: 80 targetPort: 80 protocol: TCP name: nginx selector: app: mychart release: ardent-otter --- # Source: mychart/templates/deployment.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: ardent-otter-mychart labels: app: mychart chart: mychart-0.1.0 release: ardent-otter heritage: Tiller spec: replicas: 1 template: metadata: labels: app: mychart release: ardent-otter spec: containers: - name: mychart image: "10.0.0.162/library/nginx:1.9" imagePullPolicy: IfNotPresent ports: - containerPort: 80 livenessProbe: httpGet: path: / port: 80 readinessProbe: httpGet: path: / port: 80 resources: {}
在mychart
目錄下執(zhí)行下面的命令將nginx部署到kubernetes集群上.
[root@cz_fbsdb500_06 mychart]# helm install .
現(xiàn)在nginx已經部署到kubernetes集群上,本地執(zhí)行提示中的命令在本地主機上訪問到nginx實例。
[root@cz_fbsdb500_06 mychart]# helm list NAME REVISION UPDATED STATUS CHART NAMESPACE wishful-alpaca 1 Fri Dec 22 09:28:07 2017 DEPLOYED mychart-0.1.0 default wordpress-test 1 Thu Dec 21 20:05:03 2017 DEPLOYED wordpress-0.6.13 default
我們可以修改Chart.yaml
中的helm chart配置信息,然后使用下列命令將chart打包成一個壓縮文件。
helm package .
打包出mychart-0.1.0.tgz
文件。
我們在前面安裝chart可以通過HTTP server的方式提供。
[root@cz_fbsdb500_06 mychart]# helm serve --address 0.0.0.0:8879 Regenerating index. This may take a moment. Now serving you on 0.0.0.0:8879
以上是“Kubernetes中如何安裝Helm2.7.2”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。