owned this note changed 5 years ago
Linked with GitHub

如何以 GitOps 方式管理 Kubernetes 集群 - Dick Tang

tags: COSCUP2020 入門 TR412-2

歡迎來到 https://hackmd.io/@coscup/2020 共筆

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

點擊本頁上方的 開始用 Markdown 一起寫筆記!
手機版請點選上方 按鈕展開議程列表。

簡介

https://coscup.org/2020/zh-TW/agenda/RH99NK

請從這裡開始

背景

隨著 微服務 與 容器技術 的興起。
管理 與 SRE 面臨一些挑戰。

議程

  • 什麼是 Container 與 K8s?
  • 什麼是 GitOps
  • Kubernetes 爲什麼要 GitOps?
  • 什麼是 fluxCD
  • 演練時間

什麼是 容器(Container)?

  • 一種內核輕量級的操作系統層虛擬化技術
  • 代表: Docker
  • 啟動時間短很多

什麼是 Kubernetes(K8S)

  • K8s 是 fancy 容器編排平台(container orchestration plaform)

  • 簡單來說 讓容器跑在多台服務器上 (集群) 處理集群上以及一些生產環境的問題,例如:

    • 容器之間的溝通
    • 容器部屬在那台服務器上
    • 如果服務器掛掉如何 container 如何重新佈署
  • Kubernetes 最小的調度單位是 pod 不是 container

  • Kubernetes 有許多調度的 object,像是 Deployment, StatefulSet, DaemonSet etc.

  • Kubernetes 有豐富的生態圈,像是 Helm (類似 Ubuntu 的 apt 或是 CentOS 的 yum)

  • 有打包好的 k8s 服務環境 helm,並且有 helm hub(類似應用商店) 可以下載已經打包好的 k8s 服務

什麼是 GitOps

GitOps - 用 git flow 來管理 K8s 的環境,部署到 K8s 的環境
GitOps 一樣是 DevOps 的概念,適用於 CICD,不過更 focus 在 CD 的部分。

  • 聲明式 (declaratively) 的描述整個系統
  • 所需 (Kubernetes) 系統狀態儲存在 Git
  • 已批准的更動可以自動部署系統
  • 實際狀態與所需的狀態有偏差時做出警告

聲明式(declaratively)描述整個系統

  • Kubernetes 是一個以 "聲明性" 配置的現代雲原生工具
  • 聲明式意味著配置是由一組事實 (fact) 而不是一組指令來組成的
  • 工具根本 聲明式 配置下的事實,按需要對系統做出修改
  • 過程不重要,事實 (fact) 才重要。

所需 (Kubernetes) 系統狀態儲存在 Git

  • 在 Git 中對應程序的聲明進行版本控制後,您就有了單一事實來源(Single source of turth)
  • 這使得回滾(roll back) 變得微不足道,因為所有東西都存在 git 裡面
  • 應用程式可以輕鬆部署並且在 Kubernetes 之間回滾 (Rollback)
    • 您可以在其中使用 "git 恢復" 功能返回到先前的應用程序狀態
    • 更重要的是,當在難來襲時,集群的基礎架構也可以可靠而快速地進行複製
  • 借助 Git 出色的安全性保證,您可以使用 GPG key 來簽署提交

已批准的變更可以自動部屬自系統

  • 變更可以用 PR 的形式來做出批准
  • 一旦聲明的狀態保存在 git 中,立刻機更改應用到集群中,並且完全自動化不需要人手介入

新來的系統工程師不用太多的教學,只要從 Git 做更改即可,減少溝通成本。

實際狀態與所需的狀態有偏差時做出警告

  • 聲明系統狀態並保持版本控制後,只要實際狀態不符合期望時做出通知

K8S 上為什麼要 GitOps?

  • 為什麼不只是 kubctl?
    • Kubectl is the new ssh.
    • Limit access and only use it for deployments when better tooling is not avaliable
  • Git 作為聲明性基礎架構的單一事實來源
    • 穩定性,可靠性
    • 對新手來說,容易上手
  • Treat Your K8s Clusters Like Cattle, Not Pets
    • 像對待牛 (牲畜) 而不是寵物 (貓貓) 一樣對待 k8s 集群
    • k8s 版本升級(通常都是重建新版本後移動pods,不直接升級),災難修復

fluxCD: The GitOps K8s operator

  • fluxCD 是在 k8s 實踐 gitops 工具之一
    • 還有 ArgoCD, Jenkins X
    • 他是最簡單的一種
  • 最初是由 Weaveworks 開發的
  • 現在是 Apache 2.0 許可的開元專案
  • 也是 CNCF 沙盒項目
    • k8s 也是 CNCF

  • 定期同步 git 內容,不直接 kubectl apply

HelmRelease (CRD)
使用 Helm 來包 services 可以考慮。

kubectl 實際唸法是 "cube 咖抖" cube cuttle How do you REALLY pronounce kubectl?

這次沒有談及的

  • 在 fluxcd 中怎麼使用 HelmRelease
  • 在 fluxcd/GitOps中存 密碼 或是 憑證
  • 如何在 fluxcd 中實踐 CI/CD
  • 如何發現及警告,在所需
  • 如何發現及警告在所需的系統狀態讓實際系統的差異 (

演練步驟

Select a repo