Kubernetes 实践 第三篇: 基于Gitlab的CI/CD

973 阅读2分钟

此系列文章为团队内部的实践总结和培训资料, 去除敏感信息保留公共部分与大家共享. 首先需要大家对Docker和Kubernetes有一定的基础了解, 文章不再对容器集群是什么的问题进行论述. 着重于怎么做为什么. 目标是让有容器相关基础概念的读者参考此系列文章, 能够将手上的程序在Kubernetes中以符合云原生的方式运行起来.

目录:

  1. Kubernetes 实践 第一篇: 程序容器化
  2. Kubernetes 实践 第二篇: 部署应用到集群上
  3. Kubernetes 实践 第三篇: 基于Gitlab的CI/CD
  4. Kubernetes 实践 第四篇: 存储
  5. Kubernetes 实践 第五篇: 配置管理
  6. Kubernetes 实践 第六篇: 日志管理
  7. Kubernetes 实践 第七篇: 微服务链路追踪
  8. Kubernetes 实践 第八篇: Golang 程序完整实现和 Demo
  9. Kubernetes 实践 第九篇: PHP 程序的完整实现和 Demo

12-factors

12-factors

本篇内容恰好吻合十二要素第五条: 构建,发布,运行.

配置 Gitlab CI 的 Kubernetes ServiceAccount

创建 ServiceAccount

  1. 创建 gitlab-ci 的 ServiceAccount
    kubectl create sa gitlab-ci
    
  2. 获取secrete
    kubectl get sa gitlab-ci -o json | jq -r .secrets[].name
    
  3. 获取 token
    kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -d
    
  4. 获取 ca
    kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -d
    

配置 Gitlab CI 的 Variable

在 Gitlab 的 CI 设置中配置相关变量, 在 gitlab ci 任务中调用.

KUBERNETES_SERVER
KUBE_CA
KUBE_TOKEN
KUBE_SECRETE

构建与发布

参考第一篇的内容: Kubernetes 实践 第一篇: 程序容器化. 将程序打包成为 Docker 镜像. 对应的 CI 任务中应该包含构建镜像和推送 registry 镜像到仓库两个工作.

build:
  stage: build
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build --build-arg APP_ROOT=$APP_ROOT --build-arg APP_NAME=$APP_NAME -t $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA -t $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest -f Dockerfile .
    - docker push $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest

其中 build-arg 中的参数根据 Dockerfile 所需的定义确定.

运行

这一步需要将创建好的程序镜像更新到集群的部署上, 我们使用一个前面配置好的 gitlab 的 ServiceAccount 进行认证操作 Kubernetes. 使用 kubectl set image 命令将新版镜像更新上去.

deploy:
  stage: deploy
  variables:
    IMAGE_NAME: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA
  image: dodocat/kubectl:v1.14.1
  before_script:
    - echo "$KUBE_CA" > ca.crt
    - kubectl config set-cluster development --embed-certs=true --server=$KUBE_URL --certificate-authority=./ca.crt
    - kubectl config set-credentials gitlab --token=$KUBE_TOKEN
    - kubectl config set-context gitlab-development --cluster=development --user=gitlab
    - kubectl config use-context gitlab-development
  script:
    - kubectl set image deployment/$APP_NAME $APP_NAME=$IMAGE_NAME

招聘

读书郎教育科技是教育电子行业的头部企业, 当前我们正在做教育信息化的平台和在线直播教育两个巨大前景的事业. 办公地点在珠海. 现在前端 后端 Android开放招聘, 欢迎志同道合的朋友来和我聊聊.

招聘主页地址: www.zhipin.com/gongsir/ad0…