K8s-helm3安装和使用
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/