helm3实战教程 | helm3常用命令和部署应用实战案例
视频来源:B站《k8s(Kubernetes)集群编排工具helm3实战教程》
视频来源:B站《k8s(Kubernetes)集群编排工具helm3实战教程》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:k8s集群编排工具helm3实战教程 | 汇总_热爱编程的通信人的博客-CSDN博客
1 helm3的常用命令
- helm的常用命令使用
version:查看helm客户端版本
repo:添加、列出、移除、更新和索引chart仓库, 可用子命令:add、index、list、remove、update
search:根据关键字搜索chart包
show:查看chart包的基本信息和详细信息, 可用子命令:all、chart、readme、values
pull:从远程仓库中下载拉取chart包并解压到本地, 如:# helm pull test-repo/tomcat --version 0.4.3 --untar, --untar是解压, 不加就是压缩包
create:创建一个chart包并指定chart包名字
install:通过chart包安装一个release实例
list:列出release实例名
upgrade:更新一个release实例
rollback:从之前版本回滚release实例, 也可指定要回滚的版本号
uninstall:卸载一个release实例
history:获取release历史, 用法:helm history release实例名
package:将chart目录打包成chart存档文件中, 例如:假如我们修改chart后, 需要将其进打包。# helm package /opt/helm/work/tomcat(chart的目录路径)
get:下载一个release, 可用子命令:all、hooks、manifest、notes、values
status:显示release实例名的状态, 显示已命名版本的状态
- helm添加chart仓库和查看仓库 类似yum仓库或docker仓库
添加仓库:
可以添加多个仓库, 添加仓库时候, 记得起个仓库名, 如:stable, aliyun, 或其他, 一般起个稳定版的stable会优先使用。
# helm repo add stable http://mirror.azure.cn/kubernetes/charts #添加微软的,强烈推荐
# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts #添加阿里云的
# helm repo add test-repo http://mirror.kaiyuanshe.cn/kubernetes/charts/ #添加开源社区的
# helm repo list #列出仓库
NAME URL
test-repo http://mirror.kaiyuanshe.cn/kubernetes/charts/
stable http://mirror.azure.cn/kubernetes/charts
aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新仓库:
# helm repo update #更新仓库,能更新添加的所有仓库
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "aliyun" chart repository
...Successfully got an update from the "test-repo" chart repository
...Successfully got an update from the "stable" chart repository
删除仓库:helm repo remove仓库名
# helm repo remove test-repo
- 创建chart包:
# helm create mychart #创建一个chart包, chart包名为:mychart
- 搜索远程仓库的chart包、查看chart包信息、拉取远程仓库chart包到本地 类似docker search搜索harbor仓库的镜像
(1)搜索chart包格式:helm search repo chart包名
示例:
# helm search repo tomcat
NAME CHART VERSION APP VERSION DESCRIPTION
stable/tomcat 0.4.3 7.0 DEPRECATED-Deploy a basic tomcat application ...
(2)查看chart包格式:helm show chart chart包名 或 helm show values chart包名 (查看详细信息)
示例:
# helm show charts table/tomcat #查看chart包基础信息
apiVersion: v1
appVersion: "7.0"
deprecated: true
description: DEPRECATED - Deploy a basic tomcat application server with sidecar as web archive container
home: https://github.com/yahavb
icon: http://tomcat.apache.org/res/images/tomcat.png
name: tomcat
version: 0.4.3
# helm show values stable/tomcat #查看chart包详细信息
replicaCount: 1
image:
webarchive:
repository: ananwaresystems/webarchive
tag: "1.0"
tomcat:
repository: tomcat
tag: "7.0"
pullPolicy: IfNotPresent
pullSecrets: []
deploy:
directory: /usr/local/tomcat/webapps
service:
name: http
type: LoadBalancer
externalPort: 80
internalPort: 8080
hostPort: 8009
ingress:
enabled: false
annotations: {}
...
(3)拉取chart包格式:
# helm pull 远程仓库chart包名 --version 0.4.3 --untar #从远程仓库拉取指定版本的chart包到本地并解压, --untar是解压, 不加就是压缩包
# helm pull 远程仓库chart包名 --untar #从远程仓库拉取最新版本的chart包到本地并解压, --untar是解压, 不加就是压缩包
示例:
# helm pulls table/tomcat:0.4.3 --untar
# helm pull test-repo/tomcat --version 0.4.3 --untar #从远程仓库拉取指定版本的chart包到本地并解压
# ls tomcat/
Chart.yaml README.md templates values.yaml
# helm pull test-repo/tomcat --untar #从远程仓库拉取最新版本的chart包到本地并解压
# ls tomcat/
Chart.yaml README.md templates values.yaml
- helm通过各种类型char包安装一个release实例名来部署k8s相关的资源(如:pod, deployment, svc, ingress等, 根据模板文件定义)
1)从加入到本地的chart官方仓库(从官方仓库在线安装)安装release实例
2)将从chart仓库拉下来的压缩包进行安装release实例(下载好的压缩包本地离线安装release)
3)将从chart仓库拉下来的压缩包解压后, 从解压目录安装release实例(解压下载好的压缩包, 从解压目录离线安装release实例)
4)从一个网络地址(如http服务器)仓库压缩包直接安装release实例
5)在本地创建一个chart包, 通过自定义编辑自己的yaml文件后, 通过本地chart包进行安装release实例
# helm search repo tomcat
# helm install tomcat1 stable/tomcat #从加入到本地的chart社区仓库(从官方仓库在线安装) 安装release实例, tomcat1为release实例名
# helm install tomcat2 tomcat-0.4.3.tgz #从chart仓库拉下来的压缩包进行安装release实例(从本地存档文件离线安装)
# helm install tomcat3 tomcat #从chart仓库拉下来的压缩包解压后, 从解压目录安装release实例(从解压目录离线安装)
# helm install db http://url.../mysql-1.6.9.tqz #从一个网络地址仓库压缩包直接安装release实例(从下载服务器安装), db为release实例名
卸载release实例:
# helm uninstall release实例名 后面详细介绍命令
- helm基本命令使用(主要三个命令)
install 安装release实例(实际就是k8s应用的安装)
upgrade 升级release实例(实际就是k8s应用的升级)
rollback 回滚release实例(实际就是k8s应用的回滚)
2 helm3部署应用的实战案例(发布、升级、回滚、卸载)
- 回顾一下常用的helm基本命令使用(主要三个命令)
install 安装release实例(实际就是k8s应用的安装)
upgrade 升级release实例(实际就是k8s应用的升级)
rollback 回滚release实例(实际就是k8s应用的回滚)
安装release实例:(上面已经介绍了从多种角度进行安装release实例, 下面我们以其中一种进行安装演示)
# helm create chart名 #指定chart名, 创建一个chart包, 通过对chart里template的yaml文件自定义编写成自己需要的后再进行安装
# helm install release实例名 chart目录路径 #指定release实例名和chart包里录路径进行安装release实例
示例:
# helm create mychart #创建一个chart包, chart包名为:mychart
# helm install test-release ./mychart #指定release实例名和chart包目录路径进行安装release实例
升级release实例:
# helm upgrade release实例名 chart名 --set imageTag=1.19 #指定release名和chart名进行相关set设置的升级
# helm upgrade release实例名 chart名 -f /.../mychart/values.yaml #指定release示例名和chart名和values.yaml文件升级
示例:
# helm upgrade test-release-nginx mychart --set imageTag=1.19 #指定release实例名和chart名set升级
# helm upgrade test-release-nginx mychart -f /root/helm/mychart/values.yaml #指定release示例名和chart名和values.yaml文件升级
回滚release实例:
# helm rollback release实例名 #指定release实例名, 回滚到上一个版本
# helm rollback release实例名 版本号 #指定release实例名, 回滚到指定版本, 注意版本号是release的版本号, 不是镜像版本号
示例:
# helm rollback web-nginx
# helm rollback web-nginx 1.17.10
获取release实例历史:
# helm history release实例名
示例:
# helm history test #test为release实例名
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sun Nov 27 12:34:52 2022 deployed tomcat-0.4.37.0 Install complete
卸载release实例:
# helm uninstall release实例名
示例:
# helm uninstall test-release-nginx #uninstall直接跟release名, 卸载release实例
- helm3部署自定义的应用实战案例(发布、升级、回滚、卸载)以部署nginx服务为例, 其他应用都类似
1)准备环境k8s集群
# kubectl get node
NAME STATUS ROLES AGE VERSION
m1 Ready control-plane,master 253d v1.20.4
m2 Ready control-plane,master 253d v1.20.4
m3 Ready control-plane,master 253d v1.20.4
n1 Ready <none> 253d v1.20.4
2)创建一个模板的chart包, 删除原来的内容, 自定义成我们自己需要的内容, 后面我们自定义部署的yaml文件
[root@m1 ~]# helm create nginx-chart
[root@m1 ~]# ls
nginx-chart
[root@m1 ~]# cd nginx-chart/
[root@m1 nginx-chart]# ls
charts Chart.yaml templates values.yaml
[root@m1 nginx-chart]# > values.yaml #清空所有默认定义的变量,后面我们根据需要自定义
[root@m1 nginx-chart]# rm -rf templates/* #删除原来所有默认的部署yaml文件, 后面我们根据需要自定义
自定义部署的模板yaml文件:
[root@m1 nginx-chart]# vim templates/nginx-deploy-service.yaml #自定义需要的yaml模板文件, deployment和svc, 通过nodeport暴露
apiVersion:apps/v1
kind: Deployment
metadata:
name: {{ .Values.deployment_name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.pod_label }}
template:
metadata:
labels:
app: {{ .Values.pod_label }}
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.imageTag }}
name: {{ .Values.container_name }}
ports:
- containerPort: {{ .Values.containerport }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.service_name }}
namespace: {{ .Values.namespace }}
spec:
type: NodePort
ports:
- port: {{ .Values.port }}
targetPort: {{ .Values.targetport }}
nodePort: {{ .Values.nodeport }}
protocol: TCP
selector:
app: {{ .Values.pod_label }}
[root@m1 nginx-chart]# vim values.yaml #自定义需要的变量文件
deployment_name: nginx-deployment
replicas: 2
pod_label: nginx-pod-label
image: nginx
imageTag: 1.17
container_name: nginx-container
service_name: nginx-service
namespace: default
port: 80
targetport: 80
containerport: 80
nodeport: 30001
3)通过chart包安装一个release实例(即部署个k8s的nginx应用, 版本为:1.17)
[root@m1 ~]# ls nginx-chart/
charts Chart.yaml templates values.yaml
[root@m1 ~1]# helm install nginx-release ./nginx-chart/ #安装一个release实例, 实例名:nginx-release
NAME: nginx-release
LAST DEPLOYED: Sun Nov 27 14:37:52 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@m1 ~]# helm list #列出release实例
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 1 2022-11-27 14:37:52.390161033 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# kubectl get pod,svc,ep #查看部署的k8s应用(nginx服务)
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c8469b67f-5pq8m 1/1 Running 0 59s
pod/nginx-deployment-5c8469b67f-j8c7v 1/1 Running 0 59s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 253d
service/nginx-service NodePort 10.1.28.254 <none> 80:30001/TCP 59s
NAME ENDPOINTS AGE
endpoints/kubernetes 192.168.27.128:6443,192.168.27.129:6443,192.168.27.130:6443 253d
endpoints/nginx-service 10.244.3.16:80,10.244.3.17:80 59s
[root@m1 ~]# kubectl get podnginx-deployment-5c8469b67f-5pq8m -o yaml | grep image: #查看部署pod的镜像版本
f:image: {}
- image: nginx:1.17
image: nginx:1.17
[root@m1 ~]# curl -I 10.1.28.254
HTTP/1.1 200 OK
Server: nginx/1.17.10
可以通过nodeport方式访问:在浏览器输入:http://192.168.27.131:30001/ 也可访问到
4)升级release实例版本(将nginx版本1.17升级为1.20.0)
[root@m1 ~]# vim nginx-chart/values.yaml #修改变量文件,指定相应版本
deployment_name: nginx-deployment
replicas: 2
pod_label: nginx-pod-label
image: nginx
imageTag: 1.20.0
container_name: nginx-container
service_name: nginx-service
namespace: default
port: 80
targetport: 80
containerport: 80
nodeport: 30001
# helm upgrade nginx-release nginx-chart -f /root/nginx-chart/values.yaml #指定release实例名和chart名和values.yaml文件升级
Release "nginx-release" has been upgraded. Happy Helming!
NAME: nginx-release
LAST DEPLOYED: Sun Nov 27 14:41:12 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
#或使用:helm upgrade nginx-release nginx-chart --set imageTag=1.20 指定release实例名和chart名set升级
[root@m1 ~]# helm list #升级后查看
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 2 2022-11-27 14:41:12.755644465 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# kubectl get pod,svc,ep #升级后查看
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-7dd78bf775-lh558 1/1 Running 0 67s
pod/nginx-deployment-7dd78bf775-t4v98 1/1 Running 0 68s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 253d
service/nginx-service NodePort 10.1.28.254 <none> 80:30001/TCP 4m28s
NAME ENDPOINTS AGE
endpoints/kubernetes 192.168.27.128:6443,192.168.27.129:6443,192.168.27.130:6443 253d
endpoints/nginx-service 10.244.3.16:80,10.244.3.17:80 4m28s
[root@m1 ~]# kubectl get podnginx-deployment-7dd78bf775-lh558 -o yaml | grep image: #查看部署pod的镜像版本
f:image: {}
- image: nginx:1.20.0
image: nginx:1.20.0
5)回滚release实例版本(将nginx版本1.20.0回滚为1.17)
# helm rollback release实例名 #指定release实例名, 回滚到上一个版本
# helm rollback release实例名 版本号 #指定release实例名, 回滚到指定版本, 注意版本号是release的版本号, 不是镜像版本号
a)回滚到上一个版本:
[root@m1 ~]# helm rollback nginx-release #回滚到上一个版本, 指的是release的版本, 不是镜像版本
Rollback was a success! Happy Helming!
[root@m1 ~]# helm list #回滚后查看
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 3 2022-11-27 14:44:14.618247802 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# kubectl get pod,svc,ep #回滚后查看
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-5c8469b67f-7tw8c 1/1 Running 0 2m29s
pod/nginx-deployment-5c8469b67f-h4mbv 1/1 Running 0 2m28s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 253d
service/nginx-service NodePort 10.1.28.254 <none> 80:30001/TCP 8m51s
NAME ENDPOINTS AGE
endpoints/kubernetes 192.168.27.128:6443,192.168.27.129:6443,192.168.27.130:6443 253d
endpoints/nginx-service 10.244.3.16:80,10.244.3.17:80 8m51s
[root@m1 ~]# kubectl get podnginx-deployment-7dd78bf775-lh558 -o yaml | grep image: #查看回滚后部署的版本
f:image: {}
- image: nginx:1.17
image: nginx:1.17
b)回滚到指定版本
release版本1 镜像:1.17
release版本2 镜像:1.20.0
release版本3 镜像:1.17 (回滚到1.17后, release版本也会增加)
目前是release版本3, 对应镜像:1.17版本, 现在要将版本回滚到指定版本2, 对应镜像:1.20.0
[root@m1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 3 2022-11-27 14:44:14.618247802 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# helm rollback nginx-release 2 #回滚到指定的版本, 指的是release的版本, 不是镜像版本
Rollback was a success! Happy Helming!
[root@m1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 4 2022-11-27 14:52:42.547226093 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# kubectl get pod,svc,ep #回滚后查看
NAME READY STATUS RESTARTS AGE
pod/nginx-deployment-7dd78bf775-sklx6 1/1 Running 0 43s
pod/nginx-deployment-7dd78bf775-xmjp4 1/1 Running 0 42s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 253d
service/nginx-service NodePort 10.1.28.254 <none> 80:30001/TCP 15m
NAME ENDPOINTS AGE
endpoints/kubernetes 192.168.27.128:6443,192.168.27.129:6443,192.168.27.130:6443 253d
endpoints/nginx-service 10.244.3.16:80,10.244.3.17:80 15m
[root@m1 ~]# kubectl get podnginx-deployment-7dd78bf775-sklx6 -o yaml | grep image: #查看回滚后部署的版本
f:image: {}
- image: nginx:1.20.0
image: nginx:1.20.0
6)卸载删除release实例
[root@m1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-release default 5 2022-11-27 14:54:53.057933249 +0800 CST deployed nginx-chart-0.1.0 1.16.0
[root@m1 ~]# helm uninstall nginx-release #卸载删除release实例
[root@m1 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS
空
更多推荐
所有评论(0)