K8s 在 DevOps 中的作用

K8s 在 DevOps 中的作用

K8s 是一套 Ops (Operation) 的工具,DevOps 指的是开发部门与维运部门的整合(Dev + Ops),然而由於实务上,往往开发速度 > 维运部署的速度,因此 DevOps 的议题往往是产品开发的重点。GitOps 则是自动化部属与整合的产物,搭配 Git Resposity 工具使用,快速的将产品部署於 K8s cluster中。
GitBook draft

DevOps

Development + Operation = DevOps,Dev: 开发部门,Ops = 维运部门 。

[1]在传统的软件开发流程,往往是Dev speed > Ops speed 而造成一种gap,很可能在整个软件发中,因为整体 Release Version 速度慢,以致难以去验证功能的市场性,造成产能的过度浪费,常常开发出无用的功能。

DevOps 主要有五个阶段:

  1. Continuous Planning: 指的是透过使用者回馈或者其他部门带来的需求。
  2. Continuous Development: 指的是开发工程师持续的将需求完成,并完成建制。
  3. Continuous Testing: 指的是开发好的 Image 自动的进行测试。
  4. Continuous Integration: 将测试好的功能发版本并部属上产品。
  5. Continuous Monitoring: 持续的监测产品营运的状况,持续的提出优化的需求

可参考下图示例:

K8s 的出现主要目的是解决Operation 上Continuous Integration、Continuous Monitoring 的问题,一般来说透过Git Repository 工具上的 CI/CD 工具,当工程师Push Code 时,将自动的执行所有的测试,并触发K8s 工具,使的Code 可以更快速的反应在产品端。

DevOps Pipeline

[2]为了推行DevOps加速整个产品的开发周期,会由Dev与Ops 部门一起制订出开发的Pipeline,尽量让每一站点都可以自动化,一般来说是会由DevOps 工程师与Dev、QA一起制订出来。下图为一般pipeline 会制定的Pipeline,一般会经历过几个阶段:

  1. push code: Dev 工程师将程序码发布到Repo 上
  2. Build: 程序码将经历过 code 品质的测试,ex: lint,再来会经过unit test
  3. MR: Merge Request 这是唯一需要人工的步骤,由Code Reviewer 去审核且合并到Branch 上
  4. Deploy: 指的是将build 阶段的产物,发布到正式或者测试环境中
  5. E2E Test: End to End Test 指的是直接透过终端的操作,整合测试功能
  6. Monitoring: 正式发布後,持续的纪录系统的 Log

下图为Pipeline 流程图:

GitOps

[3]GitOps 是一个在Git Repository 上实现自动化更新K8s Cluster 的方式,透过Git CI/CD 进行自动化测试之後并把成功build 好的 image 传入Image Registry 中并Trigger K8s 更新Deployment,如下图所示。简单来说GitOps 某种程度上减轻了Ops 许多的工作,让开发之後自动的进行一系列的Ops,减轻原有Ops部门与Dev部门的沟通成本。

GitLab GitOps

在GitLab 中要做到GitOps 其实复杂蛮多的,首先要先具备2种Gitlab Runner:

  1. Docker gitlab-runner: 使得Repo 可以进行 Unit test 和 build image 等功能。
  2. K8s gitlab- runner: 使得Repo可以进行触发进行dev 的环境部属,建制Dev、Production 的环境

Install Docker gitlab-runner

  • Prepare git-lab-runner config
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "raspberry pi"
  url = "https://gitlab.com/"
  token = <Token>
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true  // MUST
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/certs/client"] // MUST
    shm_size = 0
  • 需要包含docker in docker 的功能,为了可以 build container image 并上传於container registry 中
docker volume create gitlab-runner-config

docker run -d --name gitlab-runner --restart always  \
   -v /var/run/docker.sock:/var/run/docker.sock  \
   -v gitlab-runner-config:/etc/gitlab-runner \
   gitlab/gitlab-runner:latest

Install GitLab Agent

  • Install k3s
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
  • At default branch add config.yaml : 内容可为空。
echo "" > .gitlab/agents/<FOLDER NAME>/config.yaml  

Install GitLab Runner

  • prepare helm
  • prepare runner-chart-values.yaml

gitlabUrl: https://gitlab.com/
runnerRegistrationToken: <YOUR TOKEN>
rbac:
    create: true
runners:
    privileged: true
  • Install Runner
sudo helm --kubeconfig /etc/rancher/k3s/k3s.yaml \
    install --namespace gitlab-cd gitlab-runner \
    -f runner-chart-values.yaml gitlab/gitlab-runner

The manipulations of gitlab-runner will not roll back status after running cmds.

参考资料

[1] Virmani, Manish. "Understanding DevOps & bridging the gap from continuous integration to continuous delivery." Fifth international conference on the innovative computing technology (intech 2015). IEEE, 2015.
[2] Ivanov, Vitalii, and Kari Smolander. "Implementation of a DevOps pipeline for serverless applications." International conference on product-focused software process improvement. Springer, Cham, 2018.
[3] Beetz, Florian, and Simon Harrer. "GitOps: The Evolution of DevOps?." IEEE Software (2021).


<<:  Python & Celery 学习笔记_任务链结

>>:  [笔记][JavaScript] - 随机取出阵列元素之值

GitHub Branch 策略 - 哪一种方式适合你?

若您对於 Git 相当熟悉,你应该对於建立分支(Branch) 应该不陌生。依据 GitHub 官方...

【18】GlobalAveragePooling 与 Flatten 的差异与比较

Colab连结 今天要探讨的主题在模型从CNN Layer 转变成 Dense Layer 时,使用...

如何下载安装 WordPress 站台,设定资料库连线,建立全新部落格 (适用 IIS 架站)

全球有超过 42% 的网站使用 WordPress 架设,WordPress 适合架设部落格、小型企...

Day10 OLED进化成Micro OLED後来找Micro LED报仇了!?

上一期说到Micro LED的厉害之处,不过今天要说的是Micro OLED,Micro OLED继...

Day05 测试写起乃 - Shoulda Matchers

昨天我们已经写出了第一篇测试 今天我们就要来依靠 Shoulda Matchers 来简化以及优化我...