helm包管理工具
K8S正常部署应用是如下方式
kubectl create deployment web --image=nginx --dru-run=client -o yaml > web.yaml kubectl 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
helm核心应用
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