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