这篇文章主要介绍Kubernetes中如何安装Helm2.7.2,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Helm 是由 Deis 发起的一个开源工具,有助于简化部署和管理 Kubernetes 应用。本文将介绍Helm的基本概念和使用方式,演示在阿里云的Kubenetes集群上利用 Helm 来部署应用。
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
Helm Client安装过程如下:
下载 Helm 2.7.2:https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
下载不了我上传一份到百度网盘: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" 等域名,阿里云容器服务为此提供了镜像站点。
请执行如下命令利用阿里云的镜像来配置 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 基础操作
若要查看在存储库中可用的所有 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一定要执行,否则会报连不上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已经搭建成功,我们进行部署测试。
创建chart
我们创建一个名为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的静态网站生成工具的人应该对此很熟悉。
我们查看下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 }}"
其中的:
以上两个变量值是在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:
{}
部署到kubernetes
在mychart
目录下执行下面的命令将nginx部署到kubernetes集群上.
[root@cz_fbsdb500_06 mychart]# helm install .
现在nginx已经部署到kubernetes集群上,本地执行提示中的命令在本地主机上访问到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”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注天达云行业资讯频道!