這次帶來的是個人的原創文章「從網路觀點來看導入 Kubernetes 的可能痛點
」,就我個人的理解與經驗跟大家討論導入 Kubernetes 到現有環境中會遇到的各種網路問題。
雲端平台的方便性使得架設 Kubernetes 簡單容易上手,然而對於地端環境來說,要導入 Kubernetes 並沒有想像中的簡單。團隊服務沒有辦法一夜轉換到 Kubernetes 的情況下,最麻煩的便是轉換過渡期中要如何讓 k8s 與現有架構整合。
Kubernetes 原生的 Service 與 CNI 架構為其提供低門檻的使用方式,讓 Kubernetes 運作起來不需要太深的網路背景與概念即可順利使用。本篇文章就地端環境來討論幾個可能需要的網路情境,而這些情境為什麼於 Kubernetes 內難以實現與完成,如果真的有需求時可以用何種角度與方式去解決。
長話短說就是本篇文章探討如何透過 Multus/DANM 等 Metaplugin CNI 搭配 SR-IOV/DHCP/Static CNI/IPAM 來滿足
1. Pod 固定 IP
2. K8s 叢集支援多個底層網路,針對需要讓不同流量走不同底層網路
3. 不同強度的網路隔離
https://www.hwchiu.com/k8s-network-issue.html
k8s service pod 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本篇文章帶來的是 Kubernetes 1.20 的一些整理,到底 Kubernetes 1.20 有什麼改變以及要如何升級舊有的 Kubernetes 到 1.20
官方宣稱該版本有 42 個改進,其中 11 個改進是該內容正式畢業進入 stable 版本, 15 個轉移到 beta 版本而剩下 16 個則是進入 alpha。
1. Volume Snapshot Operations (Stable)
針對容器快照的相關操作正式進入穩定版,要注意的是這個功能必須要使用的 Storage 服務有支援,同時請記得,針對任何的儲存設備,可以使用 CSI 來安裝就使用 CSI。
盡量不要繼續使用 in-tree 的方式去銜接這些設備了,因為所有的維護與修改都轉移到 CSI driver 上
2. Kubectl Debug (Beta)
Kubectl alpha 之前的子指令 debug 已經正式轉移到 beta 版本,未來可以直接使用 kubectl debug 的指令來幫忙一些資源的驗證與處理。
譬如
a. 創建一個 pod 部署到指定的節點上並存取節點上的檔案系統來提供對節點的除錯功能
b. 針對運行 crash 的 pod 除錯
3. Dual IP Stack IPv4/IPv6 (Alpha)
IPv4/IPv6 功能重新實作,未來將可以對單一 Serivce 同時指派 ipv4 + ipv6 的地址,同時也可以針對現存單一 ipv4 的 service 進行轉換
4. Graceful node shutdown (Alpha)
過往刪除 Pod 時都會有所謂的 pod lifecycle 等階段來處理一切狀態,但是當節點被關機時,節點上方運行的 Pod 並不會遵循 Pod lifecycle 來處理。
這個新的功能將會讓 Kubelet 去感知到節點正在關閉,並且能夠針對正在運行的Pod去提供 graceful shutdown 的過程
更多的討論可以參考下列文章或是直接看官方全文,滿多功能都慢慢改變
另外要注意的是,每次改版都要注意 API 是否有改變名稱,非常推薦使用如 kube-no-trouble 這類型的工具去檢查當前部署資源的 APIVersion 是否有即將要被捨棄的,避免 k8s 更新後應用程式都無法部署上去的情況發生
https://faun.pub/whats-new-in-kubernetes-version-1-20-and-how-to-upgrade-to-1-20-x-5ea72f904e7d
k8s service pod 在 矽谷牛的耕田筆記 Facebook 的精選貼文
本篇是一個新手教學文,主要探討的時如何將 Jenkins 裝到 Kubernetes 內,並且使用 Kuberentes Pod 作為 Jenkins Agent 來使用。
未來透過 Jenkins 去執行 job 時會透過 Kubernetes Pod 來運行這些流程。
本文圖文並茂,對於有這個需求的使用者可以參考看看如何安裝與設定。
註:
到底要不要將 Jenkins 放到 Kubernetes 內是一個沒有答案的問題,思考這個問題時先反過來思考,將 Jenkins 放到 Kubernetes 內帶來什麼樣的特色?
1. 如果 Jenkins server 本身沒有 AA 的架構的話,意味 Jenkins 本身也只能運行一個 Pod 來處理流量。
2. Jenkins Server 本身也是 K8S Pod 的話,可以透過 service account 的方式更容易的與 k8s 溝通,這也是如何透過 k8s pod 當 Jenkins agent 的原因。
如果需要於 Jenkins Job 去執行 CD 步驟時,這樣的架構可以省去 kubeconfig 的額外準備,讓溝通更簡單
3. Jenkins 本身的設定非常多也很複雜,要如何永久性的保存 Jenkins 的設定非常麻煩。儲存方面就要引入 PV/PVC 來確保空間一致。此外如何透過 IaC 等架構來設定 Jenkins 並且引入版本控制的概念來確保 Jenkins 設定不會亂跑都是很大的議題。
最後想探討的是,如果是第一次進入這個領域,要使用 Jenkins 必須要有很強的動機來說服自己為什麼選擇最困難的 Jenkins 而非其他的開源專案
https://medium.com/codex/jenkins-on-kubernetes-part-1-2fb37c8adb39