• devops学习(九) Helm工具--持续部署


    我们后续部署的程序可能包含很多个子程序,单一的yaml文件部署会让我们的启动脚本变的很繁琐,这里就直接改为使用helm去部署

    一、部署helm工具

    1、拉取软件包

    1. //自己的小站101.43.4.210/helm-v3.5.1-linux-amd64.tar.gz
    2. wget https://get.helm.sh/helm-v3.5.1-linux-amd64.tar.gz
    3. tar -zxvf helm-v3.5.1-linux-amd64.tar.gz
    4. cp linux-amd64/helm /usr/bin/

    2、查看版本

    helm version

    二、自定义Chart包

    通常来说,我们这个Chart包是给集群master节点用的,大部分情况我们都不会频繁的修改Chart包,这里可以直接定义到master节点也可以用,这里为了演示就直接以CD的形式发送到节点上去部署

    mkdir -p helm/mytest

    1、指定Chart包的版本信息

    vi Chart.yaml

    1. apiVersion: v2
    2. name: mytest
    3. appVersion: "v1.0.1"
    4. version: "v1.0.1"

    2、定义要使用的变量

    vi values.yaml

    1. name: "mytest"
    2. namespace: "devops"
    3. containers:
    4. name: "mytest"
    5. image: "mytest:v1.0.1"
    6. containerPort: "9999"
    7. nodePort: "30008"

    3、定义Chart包中要部署的模板文件

    vi templates/mytest-dev.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: {{ .Values.name }}
    5. namespace: {{ .Values.namespace }}
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: {{ .Values.name }}-init
    10. template:
    11. metadata:
    12. labels:
    13. app: {{ .Values.name }}-init
    14. spec:
    15. containers:
    16. - name: {{ .Values.containers.name }}
    17. image: {{ .Values.containers.image }}
    18. ports:
    19. - name: http
    20. containerPort: {{ .Values.containers.containerPort }}
    21. ---
    22. apiVersion: v1
    23. kind: Service
    24. metadata:
    25. name: {{ .Values.name }}-svc
    26. namespace: {{ .Values.namespace }}
    27. spec:
    28. ports:
    29. - port: {{ .Values.containers.containerPort }}
    30. targetPort: http
    31. nodePort: {{ .Values.containers.nodePort }}
    32. selector:
    33. app: {{ .Values.name }}-init
    34. type: NodePort

    4、定义打包时要忽略的配置

     vi .helmignore

    1. # Patterns to ignore when building packages.
    2. # This supports shell glob matching, relative path matching, and
    3. # negation (prefixed with !). Only one pattern per line.
    4. .DS_Store
    5. # Common VCS dirs
    6. .git/
    7. .gitignore
    8. .bzr/
    9. .bzrignore
    10. .hg/
    11. .hgignore
    12. .svn/
    13. # Common backup files
    14. *.swp
    15. *.bak
    16. *.tmp
    17. *.orig
    18. *~
    19. # Various IDEs
    20. .project
    21. .idea/
    22. *.tmproj
    23. .vscode/

    创建完之后要上传到gitlab仓库中使用

    helm文档参考

    https://docs.helm.sh/zh/docs/chart_template_guide/functions_and_pipelines/

    三、jenkins添加构建后操作

    1、gitlab新建v4.0.0标签

    我们添加helm是在v3版本之后添加的,这里要在gitlab再打一个tag

     

    2.1、定义要拷贝的配置

    1. //要拷贝的源文件
    2. //这里指定将helm项目下的文件都拷贝过去
    3. //默认不拷贝目录,这里要再加个templates
    4. helm/mytest/* helm/mytest/templates/*

    2.2、指定EXEC程序

    1. helm upgrade -i ${JOB_NAME} /usr/local/test/helm/mytest/
    2. //这里helm upgrade 是代表更新的意思, -i 表示如果没有部署则会部署,如果部署了就会更新
    3. //这样一来,每次我们有变更下

     

    如上,我们配置后直接构建V4版本会通过helm工具直接去部署/更新新的配置

     2.3、添加helm指定使用镜像的版本

    这里实际上就是通过修改helm的语句在更新的时候覆盖value.yaml的变量来实现的

     添加覆盖的配置

    1. helm upgrade -i ${JOB_NAME} --set containers.image=101.43.4.210:30007/repo/${JOB_NAME}:${tag} /usr/local/test/helm/mytest/
    2. //我们原先value.yaml的配置是 mytest:v1.0.1
    3. //这里我们在启动的时候指定value.yaml下的镜像的变量进行覆盖使用
    4. //这个操作不会修改value.yaml的值,模板中其他变量还是用的value.yaml下的值

    如此一来,我们从V4版本之后就可以通过helm快速进行版本更新了( •̀ ω •́ )y

    存在的问题

    1. 1、步骤太长了,我们实现上面的步骤点了很多东西,如果那里出错了我们无法快速的排查问题
    2. //pipline 流水线
    3. 2、我们在任务中关于harbor仓库的地址是写死的,如果要修改就需要一步一步切进去很麻烦
    4. //jenkinsfile

  • 相关阅读:
    深入理解 pytest Fixture 方法及其应用
    【校招VIP】前端布局模块之Flex弹性布局
    1460_TC275_Lite_Kit-UserManual阅读笔记2
    【IAP Kit】应用内支付订单参数相关问题解析
    RTX30系列linux+docker容器的GPU配置(tensorflow-gpu==1.15~2.x、tensorrt 7、cuda、cudnn)
    opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9
    本地docker注册证书docker login连接到harbor仓库、利用shell脚本将大量镜像pull、tag、push到私有harbor仓库
    Jenkins配置linux节点
    80-Redis详解
    移动硬盘丢了怎么找回来呢?
  • 原文地址:https://blog.csdn.net/qq_42883074/article/details/126028077