Helm安装

采用二进制安装方式:离线安装方式

详情请见:(官方文档:https:#helm.sh/zh/docs/intro/install/)

本k8s集群为1.23.1,对应helm版本为3.8.x版本,详细版本对应见官方文档;

# 下载离线安装包:helm-v3.8.2-linux-amd64.tar.gz;

# 传离线安装包至主节点(woker工作节点按需安装);

# 解压安装包:tar -zxvf helm-v3.0.0-linux-amd64.tar.gz;

# 在解压目录下找到helm程序,将其移到执行命令目录下;
	$ mv linux-amd64/helm /usr/local/bin/helm
# 接着可查询helm版本:
	$ helm version
[root@cnsz92vl21370 ~]# helm version
version.BuildInfo{Version:"v3.8.2", GitCommit:"6e3701edea09e5d55a8ca2aae03a68917630e91b", GitTreeState:"clean", GoVersion:"go1.17.5"}
# 显示正常版本即可

# 设置helm命令自动补齐
$ source < (helm completion bash)
$ echo 'source <(helm completion bash)' >> ~/.bashrc
$ KUBECONFIG=/root/.kube/config

Helm仓库安装:

注:因内网环境下无法正常添加官方仓库地址,所以此次helm使用私有仓库部署

helm仓库安装有以下方式:

1、docker容器运行方案

2、本地chartmuseum私有仓库搭建

此次在容器的运行方案的基础之上采用k8s集群搭建本地helm仓库

# 基于helm-test.yaml文件启动容器
apiVersion: apps/v1
kind: Deployment
metadata:
 name: helm
spec:
 selector:
  matchLabels:
   app: helm
 replicas: 1
 template:
  metadata:
   labels:
    app: helm
  spec:
   containers:
   - name: helm
     image: nginx:latest
     ports:
     - containerPort: 80
     volumeMounts:
      - mountPath: /usr/share/nginx/html
        name: localrepo
   volumes:
   - name: sdb
     persistentVolumeClaim:
       claimName: helm
---
apiVersion: v1
kind: Service
metadata:
  name: helm
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
     app: helm
---
apiVersion: configuration.konghq.com/v1
kind: KongIngress
metadata:
  name: helm
proxy:
  path: /
route:
  strip_path: true
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: helm
  annotations:
    kubernetes.io/ingress.class: "kong"
spec:
  rules:
  - host:
    http:
      paths:
      - path: /helm
        pathType: Prefix
        backend:
          service:
            name: helm
            port:
              number: 8020

# 在本地pv挂在目录下创建charts目录,用于存放chart包
[root@cnsz92vl21370 default-helm-pvc-4578ba37-a1ab-44c6-a2fb-8fa87f27a654]# pwd
/data/volumes/default-helm-pvc-4578ba37-a1ab-44c6-a2fb-8fa87f27a654

#制作本地chart包进行测试,通过helm package将tesetchart打包
[root@cnsz92vl21370 ~]# helm create testchart	#先创建chart包目录
Creating testchart
[root@cnsz92vl21370 ~]# tree testchart		#可查看chart包目录结构
testchart
├── charts			#用于存放charts
├── Chart.yaml			#这里有一些chart的基本信息,名称、版本、对应的app版本等
├── templates			#放置模板 最终被渲染为不同的 manifest(大概是一些配置和元数据)
│   ├── deployment.yaml		#这个模板最终会被渲染为 deployment的基本manifest
│   ├── _helpers.tpl	        #这个文件用于 存放模板,给其他地方调用,本身不会被渲染(参照函数库理解)
│   ├── hpa.yaml		#存放hpa的相关模板信息
│   ├── ingress.yaml	        #存放ingress模板信息
│   ├── NOTES.txt	        #chart的说明文件,会在安装、升级后显示其内容,也可以用模板的方式写,会被渲染。
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml		        # 存放‘值’ 的地方,渲染templates下模板所用的值,有一大部分来源于此

3 directories, 10 files
[root@cnsz92vl21370 ~]# ls
backup  bin  slogs  testchart
[root@cnsz92vl21370 ~]# helm package testchart/		#基于chart包目录打包成tgz文件
Successfully packaged chart and saved it to: /root/testchart-0.1.0.tgz
[root@cnsz92vl21370 ~]# ls	
backup  bin  slogs  testchart  testchart-0.1.0.tgz

#创建临时存放目录localrepo 用于存放生成的index.yaml文件和chart包
[root@cnsz92vl21370 ~]# ls
backup  bin  localrepo  slogs  testchart  testchart-0.1.0.tgz

#复制testchart-0.1.0.tgz到localrepo目录下
[root@cnsz92vl21370 ~]# cp testchart-0.1.0.tgz localrepo/

#基于localrepo目录生成index.yaml文件
[root@cnsz92vl21370 ~]# helm repo index localrepo/ --url http://100.76.74.11:8080/helm/charts
[root@cnsz92vl21370 ~]# cat localrepo/index.yaml 
apiVersion: v1
entries:
  testchart:
  - apiVersion: v2
    appVersion: 1.16.0
    created: "2022-05-31T16:32:45.811606668+08:00"
    description: A Helm chart for Kubernetes
    digest: 08d5196e961bd0115630fc39d488bff067e28907ae35de15b1332f643071ddad
    name: testchart
    type: application
    urls:
    - http:#$IP:8020/helm/charts/testchart-0.1.0.tgz
    version: 0.1.0
generated: "2022-05-31T16:32:45.810167233+08:00"

# 将localrepo目录下的index.yaml文件和testchart-0.1.0.tgz放置本地挂载目录
[root@cnsz92vl21370 ~]# ls /data/volumes/default-helm-pvc-4578ba37-a1ab-44c6-a2fb-8fa87f27a654/charts/
index.yaml  testchart-0.1.0.tgz

# 通过helm repo add 将新仓库添加到helm,因集群设置的访问控制,所以添加仓库时指定用户名和密码即可;
[root@cnsz92vl21370 ~]# helm repo add --username admin --password Kuboard123 localrepo http://$IP:8080/helm/charts
"localrepo" has been added to your repositories
[root@cnsz92vl21370 ~]# helm repo list		#查看已添加的仓库,确认返回列表中有添加的仓库即可
NAME            URL                               
localrepo       http:#$IP:80/helm/charts
[root@cnsz92vl21370 ~]# helm search repo testchart	#可查看已经添加的chart包
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                
localrepo/testchart     0.1.0           1.16.0          A Helm chart for Kubernetes

#注:此时helm本地私有仓库已经安装并添加完毕,可正常供内网环境使用,以下是对helm仓库的一些基本验证

# 从新的私有库中安装testchart进行测试
[root@cnsz92vl21370 charts]# helm repo list
NAME            URL                               
localrepo       http:#$IP:80/helm/charts
[root@cnsz92vl21370 charts]# helm search repo testchart
NAME                    CHART VERSION   APP VERSION     DESCRIPTION                
localrepo/testchart     0.1.0           1.16.0          A Helm chart for Kubernetes
[root@cnsz92vl21370 charts]# helm install my-test localrepo/testchart	#安装测试
NAME: my-test
LAST DEPLOYED: Tue May 31 16:57:26 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=testchart,app.kubernetes.io/instance=my-test" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http:#127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
# 能够正常输出安装信息即可

# 升级更新,即就是更新charts包所运行的镜像即可,即升级服务版本
# 下载新版本的charts包,解压后修改values.yaml文件,即就是修改镜像地址,此文件在上文已详细介绍,根据此values.yaml文件更新已运行的版本
$ helm upgrade -f /root/values.yaml my-test localrepo/testchart
$ helm list # 可查看之前的运行版本


## Helm本地安装应用
1、解压chart安装包(以wordpress为例)
[root@cnsz92vl21370 test]# ls
wordpress  wordpress-4.0.0.tgz
[root@cnsz92vl21370 test]# cd wordpress/
[root@cnsz92vl21370 wordpress]# ls
charts  Chart.yaml  README.md  requirements.lock  requirements.yaml  templates  values.yaml

2、根据个人需求可配置values.yaml文件

3、配置后可执行一下命令进行本地应用安装
$ [root@cnsz92vl21370 wordpress]# helm install wd-test .
NAME: wd-test
LAST DEPLOYED: Mon Jun 27 11:19:56 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
wellcome to here
4、可查看已经部署好的应用
[root@cnsz92vl21370 wordpress]# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
wd-test default         1               2022-06-27 11:19:56.238175 +0800 CST    deployed        wordpress-4.0.0 4.9.8
[root@cnsz92vl21370 wordpress]# kubectl get po
NAME                                READY   STATUS    RESTARTS       AGE
wd-test-mariadb-0                   0/1     Pending   0              52s
wd-test-wordpress-c94566c59-xgn5w   0/1     Pending   0              52s
#处于pending状态是因为需要为此应用创建存储卷,配置好存储卷即可使用

##helm安装应用方式
1、直接安装不需要拉包:https://hub.helm.sh
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm install my-release bitnami/nginx
$ helm upgrade my-test bitnami/nginx --set service.type=NodePort

2、拉包直接通过安装包安装
$ helm pull harbor/harbor
$ helm install myharbor ./harbor-1.7.3.tgz

3、解压包再安装
$ tar -zxvf harbor-1.7.3.tgz
$ helm install myharbor ./harbor

Helm常用命令

# 以下是helm使用时的一些常用命令,具体命令请见官方文档
1、helm仓库基本命令
# helm仓库查看
$ helm repo list

# helm仓库添加
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
$ helm repo add bitnami https://charts.bitnami.com/bitnami	#添加公网仓库
$ helm repo add localrepo http:$IP:$port/charts	                #添加本地仓库

# helm仓库的删除
$ helm repo remove 仓库名称

# helm查询chart包
$ helm search repo chart-name

2、 helm基本命令
$ helm version                      #查看helm版本信息
$ helm list                         #查看当前安装的Chart包
$ helm search mysql                 #查看与mysql相关的chart包
$ helm fetch stable/mysql           #将mysql软件包下载到本地
$ helm inspect stable/mysql         #查看该软件包的详细信息
$ helm install stable/mysql -n mysql        #安装指定的mysql软件包,并命名为mysql
$ helm status mysql                 #查看mysql的状态信息
$ helm delete --purge mysql         #删除mysql,并将本地的缓存也进行删除
$ helm repo add stable https:#kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加阿里云的repo源
$ helm repo update                  #更新repo仓库资源
$ helm create helm_charts           #创建一个chart,名称为helm_charts
$ cd helm_charts/ && helm lint      #测试charts语法
$ helm package helm_charts          #打包charts
$ helm template helm_charts-0.1.0.tgz       #查看该软件包生成的yaml文件

3、chart使用命令
$ helm search repo chart-name			#chart搜索
$ helm pull stable/nginx-ingress		#chart下载
$ tar -zxvf nginx-ingress-1.26.1.tgz	        #解压缩chart
$ helm create testchart				#创建本地chart
$ helm package testchart			#chart打包
$ helm repo index localrepo/ --url http://100.76.74.11:80/helm/charts	#生成索引文件
$ helm repo update			        #更新本地helm仓库,可以看见新上传的chart包

3、release基本命令:
#release 理解起来则比较抽象,它是专属于 helm 的一个逻辑概念,用来标识在 k8s 中运行的一组资源,可以理解为chart运行起来的一个实例
$ helm ls			                #release查看
$ helm search repo testchart		        #chart搜索
$ helm install release-name  localrepo/testchart		#本地安装chart
$ helm install nginx-ingress google/nginx-ingress		#在线安装chart
$ helm upgrade -f /data/localrepo/testchart/values.yaml my-test localrepo/testchart
	#当对已经运行的release进行升级时,只需要对values.yaml文件进行相应的修改,再使用 upgrade -f选项指定升级即可
$ helm get values my-test	        #查看release更新后的新值
$ helm history my-test		        #查看已运行chart的历史版本
$ helm rollback my-test 4	        #回退release到指定版本
$ helm uninstall my-test	        #卸载已运行的release(delete别名)
$ helm delete my-test	                #卸载已运行的release

# Helm相关文档可在官网进行查询:https://helm.sh/