博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kubernetes应用部署工具-Helm2.7.2安装
阅读量:7043 次
发布时间:2019-06-28

本文共 8190 字,大约阅读时间需要 27 分钟。

hot3.png

      Helm 是由 Deis 发起的一个开源工具,有助于简化部署和管理 Kubernetes 应用。本文将介绍Helm的基本概念和使用方式,演示在阿里云的Kubenetes集群上利用 Helm 来部署应用。

15019343434549

是由 发起的一个开源工具,有助于简化部署和管理 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

Helm Client安装过程如下:

  1. 下载 Helm 2.7.2:https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz
    下载不了我上传一份到百度网盘:https://pan.baidu.com/s/1pLPzVS3
  2. 解包:tar -zxvf helm-v2.7.2-linux-amd64.tgz
  3. 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 searchNAME                         	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 tillerkubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tillerkubectl 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 tillertiller-deploy-3366552617-sfw20          1/1       Running   0          14h[root@cz_fbsdb500_06 tmp]# helm versionClient: &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 mychartCreating mychart[root@cz_fbsdb500_06 chart_data]# tree mychartmychart├── charts├── Chart.yaml├── templates│   ├── deployment.yaml│   ├── _helpers.tpl│   ├── ingress.yaml│   ├── NOTES.txt│   └── service.yaml└── values.yaml2 directories, 7 files

模板

Templates目录下是yaml文件的模板,遵循语法。使用过的静态网站生成工具的人应该对此很熟悉。

我们查看下deployment.yaml文件的内容。

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  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: 1image:  repository: nginx  tag: stable  pullPolicy: IfNotPresentservice:  name: nginx  type: ClusterIP  externalPort: 80  internalPort: 80resources:  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/mychartNAME:   ardent-otterREVISION: 1RELEASED: Fri Dec 22 10:31:45 2017CHART: mychart-0.1.0USER-SUPPLIED VALUES:{}COMPUTED VALUES:image:  pullPolicy: IfNotPresent  repository: nginx  tag: stableingress:  annotations: null  enabled: false  hosts:  - chart-example.local  tls: nullreplicaCount: 1resources: {}service:  externalPort: 80  internalPort: 80  name: nginx  type: ClusterIPHOOKS:MANIFEST:---# Source: mychart/templates/service.yamlapiVersion: v1kind: Servicemetadata:  name: ardent-otter-mychart  labels:    app: mychart    chart: mychart-0.1.0    release: ardent-otter    heritage: Tillerspec:  type: ClusterIP  ports:    - port: 80      targetPort: 80      protocol: TCP      name: nginx  selector:    app: mychart    release: ardent-otter---# Source: mychart/templates/deployment.yamlapiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: ardent-otter-mychart  labels:    app: mychart    chart: mychart-0.1.0    release: ardent-otter    heritage: Tillerspec:  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 listNAME                	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:8879Regenerating index. This may take a moment.Now serving you on 0.0.0.0:8879

104338_2z6H_214589.png 

转载于:https://my.oschina.net/ytqvip/blog/1593540

你可能感兴趣的文章
DirectionGUI
查看>>
Android用户体验毁在框架设计?
查看>>
javascript计算前1!+2!+...+n!的阶乘和
查看>>
第一个Java程序 HelloWorld
查看>>
C#中List的Find方法的使用
查看>>
蜜果私塾:Axure RP 7.0的动作详解
查看>>
rsync安全配置注意事项
查看>>
spark架构图
查看>>
Lucene的索引链结构_IndexChain
查看>>
CentOS下bond的配置方法
查看>>
使用redis作为mybatis的二级缓存
查看>>
认识Android MVP
查看>>
端口镜像 SPAN && RSPAN
查看>>
跨界的一点点感悟
查看>>
在有母版页的页面里使用FindControl的困惑
查看>>
UI设计师面试时必须注意的6大问题
查看>>
无线宽带路由器300M导致的网络故障
查看>>
VMware Virtual SAN 设计与规模调整指南
查看>>
我的友情链接
查看>>
SET-MAP现代诗一首
查看>>