Helm是什么
没有使用Helm之前,在Kubernetes部署应用,我们要依次部署deployment、service等,步骤比较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂。
helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。
Helm本质就是让k8s的应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成K8S资源清单文件(deployment.yaml、service.yaml)。然后kubectl自动调用K8S资源部署。
Helm是官方提供类似于YUM的包管理,是部署环境的流程封装,Helm有三个重要的概念:chart、release和Repository
- chart是创建一个应用的信息集合,包括各种Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。可以将chart想象成apt、yum中的软件安装包。
- release是chart的运行实例,代表一个正在运行的应用。当chart被安装到Kubernetes集群,就生成一个release。chart能多次安装到同一个集群,每次安装都是一个release【根据chart赋值不同,完全可以部署出多个release出来】。
- Repository用于发布和存储 Chart 的存储库。
Helm包含两个组件:Helm客户端和Tiller服务端,如下图所示:
Helm安装
1.用二进制版本安装
每个Helm 版本都提供了各种操作系统的二进制版本,这些版本可以手动下载和安装。
- 下载 需要的版本
- 解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
- 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以执行客户端程序并 添加稳定仓库: helm help.
2.使用脚本安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
3.启动服务并开启chart支持
1.参考地址:https://blog.csdn.net/submarineas/article/details/112788040 开启https、设置证书位置
2.生成证书:
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650
-subj “/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.56.11”
-key ca.key
-out ca.crtopenssl genrsa -out 192.168.56.11.key 4096
openssl req -sha512 -new
-subj “/C=CN/ST=Beijing/L=Beijing/O=chinatelecom/OU=ecloudcaas/CN=192.168.56.11”
-key 192.168.56.11.key
-out 192.168.56.11.csropenssl x509 -req -sha512 -days 3650
-extfile v3.ext
-CA ca.crt -CAkey ca.key -CAcreateserial
-in 192.168.56.11.csr
-out 192.168.56.11.crtopenssl x509 -inform PEM -in 192.168.56.11.crt -out 192.168.56.11.cert
cp 192.168.56.11.cert /etc/docker/cert/192.168.56.11/
cp 192.168.56.11.key /etc/docker/cert/192.168.56.11/
cp ca.crt /etc/docker/cert/192.168.56.11/3.启动服务加上后缀
./install.sh –with-notary –with-clair –with-chartmuseum
4.添加repo
helm repo add –ca-file /etc/docker/certs.d/ca.crt –username admin –password harbor myrepo https://192.168.56.11/chartrepo/demo
Helm使用
1.常用命令
char 管理
1 create:根据给定的name创建一个新chart
2 fetch:从仓库下载chart,并(可选项)将其解压缩到本地目录中
3 inspect:chart详情
4 helm package [CHART_PATH] [...] [flags] :打包chart目录到一个chart归档
5 lint:语法检测
6 verify:验证位于给定路径的chart已被签名且有效
release 管理
1 get:下载一个release
2 delete:根据给定的release name,从Kubernetes中删除指定的release
3 install:安装一个chart
4 list:显示release列表
5 upgrade:升级release helm upgrade mytest-app01 .
6 rollback:回滚release到之前的一个版本 helm rollback <RELEASE> [REVISION] [flags]
7 status:显示release状态信息
8 history:Fetch release历史信息
helm常见操作
# 添加仓库
helm repo add elastic https://helm.elastic.co
#查看helm仓库列表
helm repo list
# 创建chart【可供参考,一般都是自己手动创建chart】
helm create CHART_PATH
# 根据指定chart部署一个release
helm install --name RELEASE_NAME CHART_PATH
# 根据指定chart模拟安装一个release,并打印处debug信息
helm install --dry-run --debug --name RELEASE_NAME CHART_PATH
# 列出已经部署的release
helm list
# 列出所有的release
helm list --all
# 查询指定release的状态
helm status Release_NAME
# 回滚到指定版本的release,这里指定的helm release版本
helm rollback Release_NAME REVISION_NUM
# 查看指定release的历史信息
helm history Release_NAME
# 对指定chart打包
helm package CHART_PATH 如:helm package my-test-app/
# 对指定chart进行语法检测
helm lint CHART_PATH
# 查看指定chart详情
helm inspect CHART_PATH
# 从Kubernetes中删除指定release相关的资源【helm list --all 中仍然可见release记录信息】
helm delete RELEASE_NAME
# 从Kubernetes中删除指定release相关的资源,并删除release记录
helm delete --purge RELEASE_NAME
实例
[root@k8s-master my-test-app]# tree
.
├── Chart.yaml
├── my-app-chart-0.1.0.tgz
├── templates
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
Chart.yaml
[root@k8s-master my-test-app]# cat Chart.yaml
apiVersion: v1
appVersion: v2.2
version: 0.1.0
name: my-app-chart
description: my test app
keywords:
- myapp
maintainers:
- email: zhang@test.com
name: zhang
values.yaml
[root@k8s-master my-test-app]# cat values.yaml
deployname: my-test-app02
replicaCount: 2
images:
repository: registry.cn-beijing.aliyuncs.com/google_registry/myapp
tag: v3
templates
[root@k8s-master templates]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.deployname }}
labels:
app: mytestapp-deploy
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: mytestapp
env: test
template:
metadata:
labels:
app: mytestapp
env: test
description: mytest
spec:
containers:
- name: myapp-pod
image: {{ .Values.images.repository }}:{{ .Values.images.tag }}
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
apiVersion: v1
kind: Service
metadata:
name: my-test-app
namespace: default
spec:
type: NodePort
selector:
app: mytestapp
env: test
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
上传chart包
curl –request POST –form chart=@
cat tgz.txt
–user admin:harbor https://192.168.56.11/api/chartrepo/demo/charts –cacert /etc/docker/certs.d/ca.crt
下载chart包,并进行部署
安装
helm install myapp myrepo/${CHART_NAME} –version ${CHART_VERSION}.$BUILD_NUMBER -f ../helmValue/dev.yaml更新
helm upgrade myapp myrepo/${CHART_NAME} –version ${CHART_VERSION}.$BUILD_NUMBER -f ../helmValue/dev.yaml