helm是什么?

引用helm官方的英文介绍:

The package manager for Kubernetes Helm is the best way to find, share, and use software built for Kubernetes.

意思就是helm是kubernetes生态中的一个包管理工具,可以快速发现、共享以及为Kubernetes构建应用.

为什么要拥抱helm ?

在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment、svc等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理.

helm常用命令

自定义Chart

Chart模板

参考文档

helm客户端

下载helm:,其中有Mac、Linux、Windows版本,本文以Linux为例.

tar -zxvf  helm-v2.9.1-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm

helm help #确认是否安装成功

helm服务端

直接安装:

helm init --upgrade

#docker pull gcr.io/kubernetes-helm/tiller

tips:安装服务端会拉取:gcr.io/kubernetes-helm/tiller ,遗憾的是国内无法直接访问”gcr.io”等.

使用阿里云镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/kube_containers/tiller

docker tag registry.cn-hangzhou.aliyuncs.com/kube_containers/tiller  gcr.io/kubernetes-helm/tiller:v2.9.1

确认服务端(tiller)

kubectl get pods -o wide -n kube-system |grep tiller

#Running tiller安装成功

确认客户端和服务端连接成功

helm version

Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c12eebdf6664e7390ebe710", GitTreeState:"clean"}

Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c12eebdf6664e7390ebe710", GitTreeState:"clean"}

#显示client和Server表示客户端和服务连接成功

通过helm search 可查找helm仓库中可用chart

helm search mysql  #查找mysql

NAME                              CHART VERSION APP VERSION DESCRIPTION

stable/mysql                      0.8.2         5.7.14      Fast, reliable, scalable, and easy to use open-...

stable/prometheus-mysql-exporter  0.1.0         v0.10.0     A Helm chart for prometheus mysql exporter with...

stable/percona                    0.3.2         5.7.17      free, fully compatible, enhanced, open source d...

stable/percona-xtradb-cluster     0.1.5         5.7.19      free, fully compatible, enhanced, open source d...

stable/phpmyadmin                 0.1.7         4.8.2       phpMyAdmin is an mysql administration frontend

stable/gcloud-sqlproxy            0.3.6         1.11        Google Cloud SQL Proxy

stable/mariadb                    4.2.7         10.1.34     Fast, reliable, scalable, and easy to use open-...

helm install stable/mysql  #安装mysql

helm search 查找可用的Charts

helm inspect 查看指定Chart的基本信息

helm install 根据指定的Chart 部署一个Release到K8s

helm create 创建自己的Chart

helm package 打包Chart,一般是一个压缩包文件

helm list 列出已经部署的Release

helm delete [RELEASE] 删除一个Release. 并没有物理删除, 出于审计需要,历史可查。

helm status [RELEASE] 查看指定的Release信息,即使使用helm delete命令删除的Release.

helm upgrade 升级某个Release

helm rollback [RELEASE] [REVISION] 回滚Release到指定发布序列

helm get values [RELEASE] 查看Release的配置文件值

helm repo list

helm repo add [RepoName] [RepoUrl]

helm repo update

以jptStore为例自定义Chart

Chart基本结构

helm-Chart-demo-jptstore

-deployment.yaml

-service.yaml

-Chart.yaml

-values.yaml

name: hello-Chart

version: 1.0.0

deployment.yaml

apiVersion: extensions/v1beta1

kind: Deployment

name: jpt-test

namespace: ns-team-1-env-2

replicas: 1

app: jpt-test

containers:

- name: jpt-test

image: registry.cn-hangzhou.aliyuncs.com/mckj/jptstrore

imagePullPolicy: Always

- containerPort: 8080

hostPort: 8083

protocol: TCP

镜像:registry.cn-hangzhou.aliyuncs.com/mckj/jptstrore,部署在ns-team-1-env-2命名空间下,映射主机端口为8083以便于部署后访问测试。名为jtp-test的deployment.

service.yaml

apiVersion: v1

kind: Service

name: jpt-test

namespace: ns-team-1-env-2

protocol: TCP

targetPort: 8080

app: jpt-test

在ns-team-1-env-2下部署一个名为jpt-test的service

install Chart

cd helm-Chart-demo-jptstore #切到templates目录级

helm install .

#确认是否部署成功

kubectl get deploy,svc,pod -n ns-team-1-env-2 |grep jpt-test

基于上面的Chart我们将镜像等参数提取到values.yaml文件中,在deployment.yaml通过模板访问

配置文件 values.yaml

repository: registry.cn-hangzhou.aliyuncs.com/mckj/jptstrore

tag: latest

pullPolicy: Always

#注意 key和value之间有给空格,不然后面渲染模板语法通不过

deployment.yaml中引用values.yaml中的数据

apiVersion: extensions/v1beta1

kind: Deployment

name: {{.Chart.Name}}   #访问Chart.yaml中的数据

namespace: ns-team-1-env-2

replicas: 1

app: jpt-test

containers:

- name: jpt-test

image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

imagePullPolicy: {{ .Values.image.pullPolicy }}

- containerPort: 8080

hostPort: 8083

protocol: TCP

执行带有模板的Chart

helm install .

#模板语法通过会出现下面的输出数据

==> v1/Service

NAME      TYPE       CLUSTER-IP     EXTERNAL-IP  PORT(S)   AGE

jpt-test  ClusterIP  10.111.17.249  <none>       8080/TCP  0s

==> v1beta1/Deployment

NAME      DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE

jpt-test  1        1        1           0          0s

==> v1/Pod(related)

NAME                       READY  STATUS       RESTARTS  AGE

jpt-test-5bd49d546b-45dz8  0/1    Terminating  0         8d

jpt-test-5bd49d546b-75764  0/1    Pending      0         0s

五、参考文献

关于Wise2C睿云智合

深圳睿云智合科技有限公司成立于2012年,总部位于深圳,并分别在成都、深圳设立了研发中心,北京、上海设立了分支机构,核心骨干人员全部为来自金融、科技行业知名企业资深业务专家、技术专家。早期专注于为中国金融保险等大型企业提供创新技术、电子商务、CRM等领域专业咨询服务。

自2016年始,在率先将容器技术引进到中国保险行业客户后,公司组建了专业的容器技术产品研发和实施服务团队,旨在帮助中国金融行业客户将容器创新技术应用于企业信息技术支持业务发展的基础能力改善与提升,成为中国金融保险行业容器技术服务领导品牌。

客户&合作伙伴

扫我扫我扫呀!不想你错过那么多你所【需要】的【干货】&所想【了解】的【行业资讯】!!

大家关注【Wise2C】后回复【进群】,睿云小助手会第一时间把拉你进入【 Docker企业落地实践群】,我们分享的各个企业案例项目的技术专家与用户代表,正在敬候您的光临!