K8s 是一套 Ops (Operation) 的工具,DevOps 指的是開發部門與維運部門的整合(Dev + Ops),然而由於實務上,往往開發速度 > 維運部署的速度,因此 DevOps 的議題往往是產品開發的重點。GitOps 則是自動化部屬與整合的產物,搭配 Git Resposity 工具使用,快速的將產品部署於 K8s cluster中。
GitBook draft
Development + Operation = DevOps,Dev: 開發部門,Ops = 維運部門 。
[1]在傳統的軟體開發流程,往往是Dev speed > Ops speed 而造成一種gap,很可能在整個軟體發中,因為整體 Release Version 速度慢,以致難以去驗證功能的市場性,造成產能的過度浪費,常常開發出無用的功能。
DevOps 主要有五個階段:
可參考下圖示例:
K8s 的出現主要目的是解決Operation 上Continuous Integration、Continuous Monitoring 的問題,一般來說透過Git Repository 工具上的 CI/CD 工具,當工程師Push Code 時,將自動的執行所有的測試,並觸發K8s 工具,使的Code 可以更快速的反應在產品端。
[2]為了推行DevOps加速整個產品的開發週期,會由Dev與Ops 部門一起制訂出開發的Pipeline,盡量讓每一站點都可以自動化,一般來說是會由DevOps 工程師與Dev、QA一起制訂出來。下圖為一般pipeline 會制定的Pipeline,一般會經歷過幾個階段:
下圖為Pipeline 流程圖:
[3]GitOps 是一個在Git Repository 上實現自動化更新K8s Cluster 的方式,透過Git CI/CD 進行自動化測試之後並把成功build 好的 image 傳入Image Registry 中並Trigger K8s 更新Deployment,如下圖所示。簡單來說GitOps 某種程度上減輕了Ops 許多的工作,讓開發之後自動的進行一系列的Ops,減輕原有Ops部門與Dev部門的溝通成本。
在GitLab 中要做到GitOps 其實複雜蠻多的,首先要先具備2種Gitlab Runner:
Install Docker gitlab-runner
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 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
curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
config.yaml
: 內容可為空。echo "" > .gitlab/agents/<FOLDER NAME>/config.yaml
Install GitLab Runner
runner-chart-values.yaml
gitlabUrl: https://gitlab.com/
runnerRegistrationToken: <YOUR TOKEN>
rbac:
create: true
runners:
privileged: true
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).