更新k8s镜像

# 介绍

本文将介绍如何通过codingci kubectl插件,方便快速更新k8s环境镜像。

# 单仓库使用示例

仓库结构示例:

├── base-chart # Helm Chart 模板,可用于使用模板批量创建服务
├── full-charts # 多个 Helm Chart,service1、service2、service3 分别有完整独立的 Helm Chart 配置
├── general-chart # Helm Chart 模板,不可用于使用模板批量创建服务
├── k8s-yaml # K8s YAML 配置文件,用于 K8s YAML 项目
│   ├── service1 # service1 完整的配置
│   │   ├── build.sh # service1 构建脚本
│   │   ├── Dockerfile # service1 Dockerfile
│   │   └──service1.go # service1 服务代码
│   ├── service2 # service2 完整的配置
│   ├── service3 # service3 完整的配置
│   └── template.yaml # service1/service2/service3 的 K8s YAML 服务模板
├── src # 服务源代码
├── values # 使用 base-chart 模板批量创建服务时,多个服务的 values 文件
└── .coding-ci.yml      # codingci配置文件

.coding-ci.yml

dev/service1/*:
  push:
    - services:
        # 流水线中启用 docker 服务
        - docker
      docker:
        image: golang:1.17
      # 导入环境变量
      imports: https://xxx/secret.yml
      stages:
        - name: service1 build
          script: cd ./src/service1/;sh ./build.sh
        - name: docker login
          script: docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD xxx.com
        - name: docker build
          script: docker build -t xxx.com/xxx/docker-1:latest ./src/service1
        - name: docker push
          script: docker push xxx.com/xxx/docker-1:latest
        - name: 使用 kubectl更新pod镜像版本
          imports: https://xxx/kube-config.yml
          image: bitnami/kubectl
          commands: |
            echo  "$KUBECF" > ~/.kube/config
            kubectl set image deployment/nginx nginx=nginx:1.9.1 -n namespace

# 多仓库模式使用示例

各微服务仓库目录结构示例:

├── Chart.yaml                # Chart 中所必须的 chart.yaml 文件
├── templates                 # Chart 中的模板目录,5 个微服务的 K8s YAML 配置声明
│   ├── db.yaml
│   ├── redis.yaml
│   ├── result.yaml
│   ├── vote.yaml
│   └── worker.yaml
│── values.yaml               # Chart 默认的配置值
│── build.sh               # 微服务构建脚本
│── Dockerfile               # 微服务Dockerfile
└── .coding-ci.yml            # codingci配置文件

# 微服务1仓库

.coding-ci.yml

master:
  push:
    - services:
        # 流水线中启用 docker 服务
        - docker
      docker:
        image: golang:1.17
      # 导入环境变量
      imports: https://xxx/secret.yml
      stages:
        - name: service1 build
          script: sh ./build.sh
        - name: docker login
          script: docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD xxx.com
        - name: docker build
          script: docker build -t xxx.com/xxx/docker-1:latest .
        - name: docker push
          script: docker push xxx.com/xxx/docker-1:latest
        - name: 使用 kubectl更新pod镜像版本
          imports: https://xxx/kube-config.yml
          image: bitnami/kubectl
          commands: |
            echo  "$KUBECF" > ~/.kube/config
            kubectl set image deployment/nginx nginx=nginx:1.9.1 -n namespace

# 微服务2仓库

.coding-ci.yml

master:
  push:
    - services:
        # 流水线中启用 docker 服务
        - docker
      docker:
        image: golang:1.17
      # 导入环境变量
      imports: https://xxx/secret.yml
      stages:
        - name: service2 build
          script: sh ./build.sh
        - name: docker login
          script: docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD xxx.com
        - name: docker build
          script: docker build -t xxx.com/xxx/docker-2:latest .
        - name: docker push
          script: docker push xxx.com/xxx/docker-2:latest
        - name: 使用 kubectl更新pod镜像版本
          imports: https://xxx/kube-config.yml
          image: bitnami/kubectl
          commands: |
            echo  "$KUBECF" > ~/.kube/config
            kubectl set image deployment/nginx nginx=nginx:1.9.1 -n namespace

# 更多用法