K8S正常部署应用是如下方式
kubectl create deployment web --image=nginx --dru-run=client -o yaml > web.yaml kubecrl expose web --port=80 --target-port=80 --type NodePort --dry-run=client -o yaml > svc.yanl kubectl apply -f web.yaml kubectl apply -f svc.yaml 创建ingress 规则暴露
如果需要部署的应用多了就需要经常修改或创建yaml,部署起来就会力不从心了,目前kubernetes推出了helm 3.0版本,
解决管理应用问题,重复使用yaml
1、将这些yaml作为整体管理 2、解决yaml高效复用 3、不支持应用级别版本管理
helm 是一个命令行管理工具
chart 把yaml打包
release 版本,指应用级别的版本管理
helm v3
1、 架构改变,去掉Tiller,直接helm通过kubeconfig连接apiserver
2、 release名称可以在不同命名空间
helm官网地址:https://helm.sh/docs/intro/quickstart/
下载地址:https://github.com/helm/helm/releases
部署helm
wget https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz 安装 tar xf helm-v3.0.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/bin/
配置harbor源仓库
helm repo list #查看已经配置的源 helm repo add stable http://mirror.azure.cn/kubernetes/charts #添加源仓库地址 helm search repo weave #搜索镜像
部署容器,weave 官方的UI镜像
helm install ui stable/weave-scope helm list #查看已经部署的版本 kubectl edit svc ui-weave-scope #修改type暴露NodePort访问

kubectl get svc,ep


kubectl get pods -o wide|grep weave
制作chart
helm create mychart
执行命令后会自动生成两个文件夹和两个yaml 文件
charts templates Chart.yaml values.yaml 一般不会有什么内容 模板文件yaml存放位置 属性信息 所有yaml全局变量

删除原来templates下的所有yaml文件,生成自己的项目文件,rm -rf mychart/templates/* 生成yaml文件
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > service.yaml
使用helm 直接安装目录下的即可
helm install web mychart/

helm upgrade web mychart
yaml 里面进行变量进行传入,维护values.yaml
一套yaml部署多个应用时,找出yaml修改的位置
1、 资源名称 2、 镜像 3、 标签 4、 副本数 5、 端口 6、 PV、PVC 等等这些 service的需要修改的 1、 端口 2、 资源名称 3、 标签。。。等等
动态渲染模板
标准deployment模板
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
动态deployment模板
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-deploy
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.label }}
strategy: {}
template:
metadata:
labels:
app: {{ .Values.label }}
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.tag }}
name: nginx
标准的service模板
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
动态service模板
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: {{ .Values.port }}
selector:
app: {{ .Values.label }}
type: NodePort
全局变量模板values.yaml
replicas: 1 image: lizhenliang/java-demo tag: latest label: java-demo port: 8080
测试执行
helm install --dry-run web mychart/

正式运行
helm install web1 mychart/ helm list

kubectl get pods,svc | egrep "web1-deploy|web1-svc"


扩容副本
helm upgrade web1 --set replicas=3 mychart/ kubectl get pods | grep "web1-deploy"

回滚
helm history web1 # 查看版本更新记录 helm rollback web1 1

原文:https://www.cnblogs.com/huanglingfa/p/13797330.html