参考地址:https://blog.51cto.com/wutengfei/2569465
一、Helm简介对于单体服务,部署一套测试环境我相信还是非常快的,但是对于微服务架构的应用,要部署一套新的环境,就有点折磨人,微服务越多、你就会越绝望,虽然我们线上和测试环境都迁移到了kubernetes环境,但是每个微服务也的维护一套yaml文件,而且每个环境下的配置文件也不太一样,部署一套新的环境成本真的很高。如果我们能够使用类似于yum的工具来安装我们的应用的话就很爽了,helm就是相当于kubernetes环境下的yum包管理工具
二、Helm v2和v3对比有关 Helm V2 和 Helm V3 的架构和使用差异,参考地址:https://www.chenshaowen.com/blog/helm-2-vs-helm-3.html 备注:kubernetes 大于1.16版本,才能使用Helm v3
三、系统环境系统版本:CentOS Linux release 7.6 (Core)
Docker版本:Docker version 20.10.0, build 2291f61
Helm 版本:v3.7.0
Kubernetes 版本:v1.16.0
四、Helm用途
作为 Kubernetes 的一个包管理工具,Helm具有如下功能: 创建新的 chart chart 打包成 tgz 格式 上传 chart 到 chart 仓库或从仓库中下载 chart 在Kubernetes集群中安装或卸载 chart 管理用Helm安装的 chart 的发布周期
五、Helm重要概念六、安装Helm客户端Helm 有三个重要概念: chart:包含了创建Kubernetes的一个应用实例的必要信息 config:包含了应用发布配置信息 release:是一个 chart 及其配置的一个运行实例
访问 Helm Github 下载页面 https://github.com/helm/helm/releases找到最新的客户端,里面有不同系统下的包,这里我们选择 Linux amd64,然后在 Linux 系统中使用 Wget 命令进行下载。
wget [<https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz>](<https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz>)
tar -zxvf helm-v3.7.0-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
注意:helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上,否则 helm 将不可用。
如果你不是在k8s集群master节点上使用helm,可使用如下方法:
# 安装当前k8s版本的kubectl工具
yum install -y kubectl-1.16.0
# 从master节点上拷贝/root/.kube文件:
scp -r root@MasterIP:/root/.kube /root/
# 我们可以在helm客户端执行安装,查看kubernetes命令
kubectl get pod -n kube-system
七、Chart仓库管理
在 Helm 中默认是不会添加 Chart 仓库,所以这里我们需要手动添加,下面是添加一些常用的 Charts 库,命令如下:
# 添加微软的仓库
helm repo add stable <http://mirror.azure.cn/kubernetes/charts/>
helm repo add incubator <http://mirror.azure.cn/kubernetes/charts-incubator/>
helm repo add bitnami <https://charts.bitnami.com/bitnami>
# 查看仓库信息
helm repo list
#执行更新命令,将仓库中的信息进行同步:
helm repo update
# 移除仓库:
helm repo remove stable
八、Helm基本操作8.1、安装应用
通过 Helm 在 Repo 中查询可安装的 Nginx 包:
[root@qa-k8s-master helm]# helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/nginx 9.5.13 1.21.4 Chart for the nginx server
bitnami/nginx-ingress-controller 9.0.5 1.0.4 Chart for the nginx Ingress controller
stable/nginx-ingress 1.41.3 v0.34.1 DEPRECATED! An nginx Ingress controller that us...
stable/nginx-ldapauth-proxy 0.1.6 1.13.5 DEPRECATED - nginx proxy with ldapauth
stable/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
bitnami/kong 4.1.9 2.6.0 Kong is a scalable, open source API layer (aka ...
stable/gcloud-endpoints 0.1.2 1 DEPRECATED Develop, deploy, protect and monitor...
使用 -n Namespace 部署我们的应用
# 创建命名空间blog
kubectl create namespace blog
# 查看创建的命名空间
kubectl get ns
# 选择一个chart在k8s上部署我们的应用
helm install nginx bitnami/nginx -n blog
# 查看应用状态
helm status nginx -n blog
helm list -n blog
8.2、自定义参数安装应用
Helm 中支持使用自定义yaml 文件和-set命令参数对要安装的应用进行参数配置,使用如下:
helm show values bitnami/nginx
image:
registry: docker.io
repository: bitnami/nginx
tag: 1.17.10-debian-10-r33
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
......(太长,略)
方式一:使用自定义 values.yaml 文件安装应用
使用自定义配置文件来配置安装应用的参数:
(1)创建自定义配置文件 values.yaml
cat > values.yaml << EOF
image:
registry: docker.io
repository: bitnami/nginx
resources:
limits:
cpu: 1000m
memory: 1024Mi
requests:
cpu: 1000m
memory: 1024Mi
service:
type: NodePort
port: 80
EOF
(2)使用自定义配置文件运行应用
helm install -f values.yaml nginx bitnami/nginx -n blog
(3)查看应用和服务
helm list -n blog
kubectl get svc -n blog
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.105.233.105 <none> 80:30384/TCP 4m13s
方式二:使用 --set 配置参数进行安装
–set 参数是在使用 helm 命令时候添加的参数,可以在执行 helm 安装与更新应用时使用,多个参数间用,隔开,使用如下:
注意:如果配置文件和 --set 同时使用,则 --set 设置的参数会覆盖配置文件中的参数配置。
# 使用set创建一个release
helm install --set 'registry.registry=docker.io,registry.repository=bitnami/nginx' nginx bitnami/nginx -n blog
# 更新一个release
helm upgrade --set 'servers[0].port=8080' nginx bitnami/nginx -n blog
8.3、卸载应用
# 卸载应用,并保留安装记录
helm uninstall nginx -n blog --keep-history
# 查看全部应用(包含安装和卸载的应用)
helm list -n blog --all
# 卸载应用,不保留安装记录
helm delete nginx -n blog
8.4、升级应用
# 创建新的配置参数文件 values.yaml:
cat > values.yaml << EOF
service.type: NodePort
service.nodePorts.http: 30002
EOF
# 应用更新:
helm upgrade -f values.yaml nginx bitnami/nginx -n blog
# 查看新配置是否生效:
helm get values nginx -n blog
USER-SUPPLIED VALUES:
service.nodePorts.http: 30002
service.type: NodePort
8.5、渲染模板
如果想查看通过指定的参数渲染的 Kubernetes 部署资源模板,可以通过下面命令:
helm template bitnami/nginx -n mydlqcloud
# 可以看到渲染的模板如下:
---
# Source: nginx/templates/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: RELEASE-NAME-nginx
labels:
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-5.3.1
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
spec:
type: LoadBalancer
externalTrafficPolicy: "Cluster"
ports:
- name: http
port: 80
targetPort: http
selector:
app.kubernetes.io/name: nginx
app.kubernetes.io/instance: RELEASE-NAME
---
# Source: nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: RELEASE-NAME-nginx
labels:
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-5.3.1
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
spec:
selector:
matchLabels:
app.kubernetes.io/name: nginx
app.kubernetes.io/instance: RELEASE-NAME
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/name: nginx
helm.sh/chart: nginx-5.3.1
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
spec:
containers:
- name: nginx
image: docker.io/bitnami/nginx:1.17.3-debian-10-r63
imagePullPolicy: "IfNotPresent"
ports:
- name: http
containerPort: 8080