1. Helm 入门
1.1 什么是Helm
K8S 上的应用对象,比如 deployment、service、pod 等,都是由特定的资源描述组成,都保存在各自文件中或者集中写到一个配置文件,然后通过 kubectl apply -f 部署。如果应用只有 1 个或者几个这样的服务组成,这种部署方式足够了。
但是对于一个复杂的应用,会有很多类似的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个、几十个,如果有更新或回滚应用的需求,可能需要修改和维护所涉及的大量的资源文件,这样效率就很低下,Helm 就是为了解决这样问题而产生的。
Helm 是一个 K8S 的包管理工具,类似于 yum/apt 等,可以很方便的将打包好的 yaml 文件部署到 K8S 上。Helm 有 3 个重要概念:
- helm:一个命令行客户端工具,注意用于 K8S 应用 chart 的创建、打包、发布和管理。
- chart:应用描述,一系列用于描述 K8S 资源相关文件的集合。
- release:基于 chart 的部署实体,一个 chart 被 helm 运行后会生成对应的 release,将在 K8S 中创建出真实运行的资源对象。
1.2 Helm客户端
1.2.1 部署Helm
Helm 客户端下载地址:https://github.com/helm/helm/releases,安装命令如下:tar zxvf helm-v3.2.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
1.2.2 配置国内Chart仓库
添加存储库:
查看配置的存储库:# 添加微软库,这里阿里云库不是最新版,无法使用 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo add aliyun https://apphub.aliyuncs.com helm repo add stable http://mirror.azure.cn/kubernetes/charts/ helm repo update
删除存储库:helm repo list helm search repo stable
helm repo remove aliyun
2. Helm基本使用
2.1 使用chart部署应用
这里以安装 nginx 为例。 ```shell1、查找nginx包
[root@k8s-master01 ~]# helm search repo nginx NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/nginx 5.1.5 1.16.1 Chart for the nginx server
aliyun/nginx-ingress 1.30.3 0.28.0 An nginx Ingress controller that uses ConfigMap… aliyun/nginx-ingress-controller 5.3.4 0.29.0 Chart for the nginx Ingress controller
aliyun/nginx-lego 0.3.1 Chart for nginx-ingress-controller and kube-lego
aliyun/nginx-php 1.0.0 nginx-1.10.3_php-7.0 Chart for the nginx php server
bitnami/nginx 9.7.1 1.21.5 Chart for the nginx server
bitnami/nginx-ingress-controller 9.1.2 1.1.1 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 5.0.1 2.7.0 Kong is a scalable, open source API layer (aka … stable/gcloud-endpoints 0.1.2 1 DEPRECATED Develop, deploy, protect and monitor…
2、将nginx包从创库拉到当前目录
[root@k8s-master01 ~]# helm pull aliyun/nginx —untar
3、查看nginx目录
[root@k8s-master01 ~]# tree nginx/ nginx/ ├── Chart.yaml ├── ci │ └── values-with-ingress-metrics-and-serverblock.yaml ├── README.md ├── templates │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── ingress.yaml │ ├── NOTES.txt │ ├── server-block-configmap.yaml │ ├── servicemonitor.yaml │ ├── svc.yaml │ └── tls-secrets.yaml ├── values.schema.json └── values.yaml
4、安装nginx到集群
type=NodePort表示将service对外暴露端口的方式改为NodePort
persistence.enabled=false表示将不启用持久化存储卷
helm install my-nginx aliyun/nginx —set service.type=NodePort —set persistence.enabled=false
5、查看是否安装成功
[root@k8s-master01 ~]# kubectl get all NAME READY STATUS RESTARTS AGE pod/my-nginx-77d8457bcf-xd4wh 1/1 Running 0 9m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-nginx 1/1 1 1 9m
NAME DESIRED CURRENT READY AGE replicaset.apps/my-nginx-77d8457bcf 1 1 1 9m
浏览器访问 nginx:[http://192.168.58.21:30454/](http://192.168.58.22:30454/)、[http://192.168.58.22:30454/](http://192.168.58.22:30454/)、[http://192.168.58.23:30454/](http://192.168.58.22:30454/)<br /><br />其他命令:
```shell
# 查看详细信息
helm status tomcat
# 查看发布状态
helm list
# 删除chart
helm delete tomcat
2.2 安装前自定义chart配置选项
自定义选项是因为并不是所有的 chart 都能按照默认配置运行成功,可能会需要一些环境
依赖,例如 PV。 所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:
- —values(或-f):指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件优先
- —set:在命令行上指定替代。如果两者都用,—set 优先级高
1、将修改的变量写到 mysqlconfig.yaml 中。
persistence:
enabled: true
storageClass: "managed-nfs-storage"
accessMode: ReadWriteOnce
size: 8Gi
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"
2、安装 mysql 并指定配置文件。
helm install db -f mysqlconfig.yaml stable/mysql
# 查看pod
kubectl get pods