DevOps - Gitlab-Ci与多个K8S集群集成之路
文章目录
1. 故事背景
前面有写过Gitlab-CI与Kubernetes(k8s)集成之路,2个月后,不满足我需求了。我现在拥有两个集群,分别用于测试和生产环境。查阅了Gitlab的文档,如何可以集成多个K8S,发现是可以的,但是需要RMB,这也好,起码有条路子可以走。但是,我还是想看看有没有免费的道路。
2. 提前准备
- 本次试验是在
CentOS 7.4 64位
系统,root
用户下进行 - Gitlab-Ci环境
- Docker环境
- Kubernetes(k8s)集群
3. 实践
网上的确有不少办法,其中有一种,我觉得最为简单和方便,通过环境变量!
为此,我们需要做3步:
- 我们需要在负责CI的机器上准备好
Kubectl客户端
- 在K8S集群的MASTER机器上获取config文件,一般在
~/.kube/config
,复制到CI机器上,同样复制到~/.kube/
目录下,根据你的情况重命名 - 执行命令
export KUBECONFIG=$HOME/.kube/{your-config-name}
,此时kubectl就可以连接到对应的K8S集群上,进行操作。当你想改变集群时,再通过此命令修改。
阿里云K8S集群的配置文件,在其WEB版控制后台可以拿到,在服务器上取到的是内网地址,如果你内网相通,也是可以的
我实践的例子
我把我两个集群的config文件,分别命名为test
和aliyun01
。
对应.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. 总结
使用这种方式,我觉得可以抛弃原来的方式了,这种简单太多,减少需要配置,并且可以支持无限个集群。
文章作者 xifan
上次更新 2018-12-04