1. 故事背景

前面有写过Gitlab-CI与Kubernetes(k8s)集成之路,2个月后,不满足我需求了。我现在拥有两个集群,分别用于测试和生产环境。查阅了Gitlab的文档,如何可以集成多个K8S,发现是可以的,但是需要RMB,这也好,起码有条路子可以走。但是,我还是想看看有没有免费的道路。

2. 提前准备

  • 本次试验是在CentOS 7.4 64位系统,root用户下进行
  • Gitlab-Ci环境
  • Docker环境
  • Kubernetes(k8s)集群

3. 实践

网上的确有不少办法,其中有一种,我觉得最为简单和方便,通过环境变量!

为此,我们需要做3步:

  1. 我们需要在负责CI的机器上准备好Kubectl客户端
  2. 在K8S集群的MASTER机器上获取config文件,一般在~/.kube/config,复制到CI机器上,同样复制到~/.kube/目录下,根据你的情况重命名
  3. 执行命令export KUBECONFIG=$HOME/.kube/{your-config-name},此时kubectl就可以连接到对应的K8S集群上,进行操作。当你想改变集群时,再通过此命令修改。

阿里云K8S集群的配置文件,在其WEB版控制后台可以拿到,在服务器上取到的是内网地址,如果你内网相通,也是可以的

我实践的例子

我把我两个集群的config文件,分别命名为testaliyun01

对应.gitlab-ci.yml是这样配置的(截选)

# 测试环境
deploy-test:
  stage: deploy
  tags:
    - kubectl
  only:
    - develop
  environment:
    name: staging
    url: https://foo.bar.com
  script:
    - echo $(git describe --tags --always)
    - export KUBECONFIG=$HOME/.kube/test
    - kubectl set image deployment/bar-test bar-test=$IMAGE:$(git describe --tags --always) -n=foo
    - echo done

# 生产环境
deploy-production:
  stage: deploy
  tags:
    - kubectl
  only:
    - tags
  environment:
    name: staging
    url: https://foo.bar.com
  script:
    - echo $CI_COMMIT_TAG
    - export KUBECONFIG=$HOME/.kube/aliyun01
    - kubectl set image deployment/bar-production bar-production=$IMAGE:$CI_COMMIT_TAG -n=foo
    - echo done

4. 总结

使用这种方式,我觉得可以抛弃原来的方式了,这种简单太多,减少需要配置,并且可以支持无限个集群。