Gitlab-Runer连接K8S

Gitlab-Runner + k8s 实现自动部署

过程说明

  1. 想要实现自动部署,就要借助工具kubectl安装文档 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux
  2. 将该工具集成到 alpine 镜像里面,当然也可以去 docker 仓库找个现成的
  3. 准备好 k8s 配置文件,使得kubectl工具能连接上 k8s 集群
  4. 准备部署的命令,这里又分两种情况,一种是删掉 deployment 重新部署 ,另一种是更新 deployment 以重启 pod。第一种需要准备 deployment 的配置文件,而每次更新只是拉取新的镜像而已,因此这里选择第二种。第二种实现的方式是添加一个时间变量,触发 pod 更新,以免系统认为配置文件不变而没有更新 pod

准备kubectl镜像

1.编排Dockerfile

因为Kubelet是作为一个工具,所以我们需要将kubelet工具安装到alpine镜像中。

[root@k8s-master ~]# cat Dockerfile
FROM alpine:latest
ARG KUBE_LATEST_VERSION=v1.15.3
# RUN apk add --update ca-certificates
RUN apk add --update -t deps curl
RUN curl -L https://storage.googleapis.com/kubernetes-release/release/${KUBE_LATEST_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl
RUN chmod +x /usr/local/bin/kubectl
RUN apk del --purge deps
RUN rm /var/cache/apk/*

2.构建镜像

通过Docker build构建镜像

[root@k8s-master ~]# docker build --build-arg KUBE_LATEST_VERSION="v1.16.6" -t kubectl:v1.16.6 .

准备k8s配置文件

  1. 配置文件也可以集成在镜像里面,但是不太灵活,一旦配置有变或者有多个集群,镜像就得修改或者准备多个版本,因此通过 gitlab ci/cd 环境变量传递
  2. 首先取得配置信息,通过命令kubectl config view --raw -o yaml得到配置信息,复制到 gitlab 的 ci/cd 环境变量中
  3. 这里要注意的是,命令必须带参数--raw,为了将 certificate-authority-data 的值输出,否则只能看到 DATA+OMITTED。另外,环境变量必须选择文件类型,否则最后输出格式不对,导致mapping values are not allowed in this context错误,当然选择-o json,使用 json 格式,就不用担心格式问题

1.复制config

通过kubectl config命令查看也可以直接cat ~/.kube/config 查看。

[root@k8s-master ~]# kubectl config view --raw -o yaml

2.在GitLab添加变量

"Settings"选择中找到“CI/CD”,点击“Variables”
202204240956975

点击“Add variable” 添加变量。添加K8S_CONFIG对应的值是config内容。

变量$KUBE_CONFIG 实际上是个地址,因为 gitlab ci/cd 环境变量类型设置为 file

image-20220423231824145

3. Gitlab其他细节

  1. 还有个就是网络问题。gitlab-runner 创建的这个基于kubectl:v1.16.6镜像的容器,是访问不到 k8s 集群的,因为不是在同一个网络,而 k8s 集群又没设置通过外网访问。这里的简单处理方法是在 gitlab-runner 配置中,将网络模式设置为 host,因为这里是 microk8s 创建的单节点集群,总之只要达到使他们处于同一个网络或者可以访问即可。

  2. Gitlab Runner每次执行都会拉取docker镜像的问题。找到搭建Gitlab Runner时创建的config.toml文件,加上:pull_policy = “if-not-present”

  3. 配置的两个参数:

    • pull_policy = “if-not-present”

    • network_mode = “host”

[root@k8s-master ~]# cd /srv/gitlab-runner/config/
[root@k8s-master config]# cat config.toml
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "first-register-runner"
  url = "http://10.11.121.111/"
  token = "-qu5oc3WSLxUbGd7hQri"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    pull_policy = "if-not-present"	# 添加镜像策略
    network_mode = "host"			# 添加网络模式为host

配置CICD流水线

1.添加配置

这里在CICD的流水线中添加如下配置,配置使用镜像kubelet:1.16.6,将变量输出到config的文件中,访问K8s集群测试。

stages:

deploy:
  image: kubectl:1.16.6
  stage: deploy 
  script: 
    - mkdir $HOME/.kube && cat $K8S_CONFIG > $HOME/.kube/config
    - cd $HOME/.kube && pwd
    - kubectl get pods -A 

2.测试流水线脚本

提交本次的流水线修改。
202204240956264

查看Jobs的情况,输出的日志可以看出当前配置的连接K8S正常。

image-20220423232819797

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不写后端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值