我们后续部署的程序可能包含很多个子程序,单一的yaml文件部署会让我们的启动脚本变的很繁琐,这里就直接改为使用helm去部署
- //自己的小站101.43.4.210/helm-v3.5.1-linux-amd64.tar.gz
- wget https://get.helm.sh/helm-v3.5.1-linux-amd64.tar.gz
-
- tar -zxvf helm-v3.5.1-linux-amd64.tar.gz
-
- cp linux-amd64/helm /usr/bin/
helm version
通常来说,我们这个Chart包是给集群master节点用的,大部分情况我们都不会频繁的修改Chart包,这里可以直接定义到master节点也可以用,这里为了演示就直接以CD的形式发送到节点上去部署
mkdir -p helm/mytest
vi Chart.yaml
- apiVersion: v2
- name: mytest
- appVersion: "v1.0.1"
- version: "v1.0.1"
vi values.yaml
- name: "mytest"
- namespace: "devops"
- containers:
- name: "mytest"
- image: "mytest:v1.0.1"
- containerPort: "9999"
- nodePort: "30008"
vi templates/mytest-dev.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: {{ .Values.name }}
- namespace: {{ .Values.namespace }}
- spec:
- selector:
- matchLabels:
- app: {{ .Values.name }}-init
- template:
- metadata:
- labels:
- app: {{ .Values.name }}-init
- spec:
- containers:
- - name: {{ .Values.containers.name }}
- image: {{ .Values.containers.image }}
- ports:
- - name: http
- containerPort: {{ .Values.containers.containerPort }}
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: {{ .Values.name }}-svc
- namespace: {{ .Values.namespace }}
- spec:
- ports:
- - port: {{ .Values.containers.containerPort }}
- targetPort: http
- nodePort: {{ .Values.containers.nodePort }}
- selector:
- app: {{ .Values.name }}-init
- type: NodePort
vi .helmignore
- # Patterns to ignore when building packages.
- # This supports shell glob matching, relative path matching, and
- # negation (prefixed with !). Only one pattern per line.
- .DS_Store
- # Common VCS dirs
- .git/
- .gitignore
- .bzr/
- .bzrignore
- .hg/
- .hgignore
- .svn/
- # Common backup files
- *.swp
- *.bak
- *.tmp
- *.orig
- *~
- # Various IDEs
- .project
- .idea/
- *.tmproj
- .vscode/
创建完之后要上传到gitlab仓库中使用
https://docs.helm.sh/zh/docs/chart_template_guide/functions_and_pipelines/
我们添加helm是在v3版本之后添加的,这里要在gitlab再打一个tag
- //要拷贝的源文件
- //这里指定将helm项目下的文件都拷贝过去
- //默认不拷贝目录,这里要再加个templates
- helm/mytest/* helm/mytest/templates/*
- helm upgrade -i ${JOB_NAME} /usr/local/test/helm/mytest/
-
- //这里helm upgrade 是代表更新的意思, -i 表示如果没有部署则会部署,如果部署了就会更新
- //这样一来,每次我们有变更下
如上,我们配置后直接构建V4版本会通过helm工具直接去部署/更新新的配置
这里实际上就是通过修改helm的语句在更新的时候覆盖value.yaml的变量来实现的
添加覆盖的配置
- helm upgrade -i ${JOB_NAME} --set containers.image=101.43.4.210:30007/repo/${JOB_NAME}:${tag} /usr/local/test/helm/mytest/
-
-
- //我们原先value.yaml的配置是 mytest:v1.0.1
- //这里我们在启动的时候指定value.yaml下的镜像的变量进行覆盖使用
- //这个操作不会修改value.yaml的值,模板中其他变量还是用的value.yaml下的值
如此一来,我们从V4版本之后就可以通过helm快速进行版本更新了( •̀ ω •́ )y
- 1、步骤太长了,我们实现上面的步骤点了很多东西,如果那里出错了我们无法快速的排查问题
- //pipline 流水线
-
- 2、我们在任务中关于harbor仓库的地址是写死的,如果要修改就需要一步一步切进去很麻烦
- //jenkinsfile