helm3培训文档
helm介绍
1.传统服务部署到k8s集群的流程
拉取代码——> 打包编译——>构建镜像——>准备一堆相关部署的yaml文件(如:deployment、service、ingress等)——>kubectl apply 部署到k8s集群
2.传统方式部署引发的问题
1).随着引用的增多,需要维护大量的yaml文件
2).不能根据一套yaml文件来创建多个环境,需要手动进行修改。
例如:一般环境都分为dev、预生产、生产环境,部署完了dev这套环境,后面再部署预生产和生产环境,还需要复制出两套,并手动修改才行。
3.什么是helm
Helm是Kubernetes 的包管理工具,可以方便地发现、共享和构建 Kubernetes 应用
helm是k8s的包管理器,相当于centos系统中的yum工具,可以将一个服务相关的所有资源信息整合到一个chart包中,并且可以使用一套资源发布到多个环境中, 可以将应用程序的所有资源和部署信息组合到单个部署包中。
就像Linux下的rpm包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到kubernetes上。
4.helm的组件
1).Chart: 就是helm的一个整合后的chart包,包含一个应用所有的kubernetes声明模版,类似于yum的rpm包或者apt的dpkg文件。
理解:
helm将打包的应用程序部署到k8s,并将它们构建成Chart。这些Chart将所有预配置的应用程序资源以及所有版本都包含在一个易于管理的包中。
Helm把kubernetes资源(如deployments、services或ingress等) 打包到一个chart中,chart被保存到chart仓库。通过chart仓库可用来存储和分享chart
2).Helm客户端: helm的客户端组件,负责和k8s apiserver通信
3).Repository: 用于发布和存储chart包的仓库,类似yum仓库或docker仓库
4).Release: 用chart包部署的一个实例。通过chart在k8s中部署的应用都会产生一个唯一的Release. 同一chart部署多次就会产生多个Release.
理解:
将这些yaml部署完成后,他也会记录部署时候的一个版本,维护了一个release版本状态,通过Release这个实例,他会具体帮我们创建pod,deployment等资源
附录:
搭建本地私有helm chart仓库: https://blog.csdn.net/qq_33196814/article/details/126261132
#具体使用
添加chart仓库
helm repo add {{chart仓库名}} {{chart仓库地址}} helm repo add stable http://mirror.azure.cn/kubernetes/charts #添加远程chart仓 helm repo add chartmuseum http://localhost:9091/ #添加本地私有chart仓
更新chart仓库
helm repo update
查看chart仓库
helm repo list
创建chart包 #生成chart包文件
helm create nginx-chart
修改chart
> values.yaml rm -rf templates/* cat values.yaml deployment_name: nginx-deployment replicas: 2 pod_label: nginx-pod-label image: jdzs-prd-harbor.ccestack.baidu.com/ccr-public/nginx imageTag: 1.17.1 container_name: nginx-container service_name: nginx-service port: 80 targetport: 80 containerport: 80 nodeport: 30011 cat templates/nginx-deploy-service.yaml 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 }} spec: type: NodePort ports: - port: {{ .Values.port }} targetPort: {{ .Values.targetport }} nodePort: {{ .Values.nodeport }} protocol: TCP selector: app: {{ .Values.pod_label }}
部署release
helm install {{release实例}} {{chart目录}} helm install nginx-release ./nginx-chart/
或者
helm install {{release实例}} {{chart仓库/chart包}} helm install nginx-release-1 chartmuseum/nginx-chart
更新release
helm upgrade nginx-release {{chart名}} -f {{更新的配置变量文件}} helm upgrade nginx-release nginx-chart -f /root/nginx-chart/values.yaml
回滚
helm list #查找revision helm rollback {{release实例}} {{REVISION}} helm rollback nginx-release 1
卸载release
helm uninstall {{release实例}} helm uninstall nginx-release
查看release
helm list
打包chart
helm package {{chart目录}} {{保存的路径}}
helm package nginx-chart/ ./
生成的chart包:nginx-chart-0.1.0.tgz
将chart包推送到本地chart仓库
helm push {{chart包}} {{chart仓库名}} helm push nginx-chart-0.1.0.tgz chartmuseum
查看chart包信息
helm show chart {{chart包}} helm show chart nginx-chart-0.1.0.tgz
查看有哪些 chart
helm search repo
搜索nginx的chart包
helm search repo nginx
查看chart仓库的chart信息
helm show chart {{chart仓库/chart名}} helm show chart chartmuseum/nginx-chart
查看chart仓库的chart包详细信息
helm show values chartmuseum/nginx-chart
下载chart
helm pull {{chart仓库名/chart名}} helm pull chartmuseum/cce-rdma-plugin helm pull chartmuseum/cce-rdma-pluginhelm --untar # --untar 下载chart包并解压
更新chart仓库的chart包
先更新Chart.yaml: vim nginx-chart/Chart.yaml
比如:version: 0.1.2
重新打包
helm package nginx-chart//
会输出:nginx-chart-0.1.2.tgz
推送到chart仓库:helm push nginx-chart-0.1.2.tgz chartmuseum
更新helm repo chart仓库:helm repo update
确认更新了chart: helm search repo