「K8S 生態週報」內容主要包含我所接觸到的 K8S 生態相關的每週值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態」。
KIND v0.8 正式發佈
本週 KIND(Kubernetes In Docker) 正式發佈了 v0.8 版本,此次最主要的是爲大家帶來了 持久化集羣,當主機或者 dockerd 重啓後,集羣可自動恢復。
Breaking Changes
- 此次默認的集羣鏡像是 Kubernetes
v1.18.2
:kindest/node:v1.18.2@sha256:7b27a6d0f2517ff88ba444025beae41491b016bc6af573ba467b70c5e8e0d85f
; - 當使用 KIND v0.8+ 啓動集羣時,必須使用通過 KIND v0.8+ 構建的 node 鏡像,否則無法按預期工作;
- 新版本中, KIND 創建出來的所有 Node ,都使用自定義的 bridge 網絡(默認名稱爲
kind
,可通過環境變量KIND_EXPERIMENTAL_DOCKER_NETWORK
修改); - 你可以在啓動任意容器時,增加
--network=kind
,以便讓它和 KIND 創建的集羣網絡互通;
這裏需要特別說一下關於持久化集羣的特性。在之前版本中,如果你的 dockerd 進行了重啓操作,或者是重啓了系統,那可能會導致集羣 IP 重新分配,進而導致集羣狀態異常。
在之前版本中,我們建議所有的用戶,不要依賴集羣持久化。但鑑於有不少用戶的反饋,所以我先實現了第一版。
具體做法其實也簡單,原先的痛點在於重啓後,容器 IP 的重新分配,所以全部以域名的方式進行替代,另外就是藉助於 Docker 的 embedded DNS 來完成 LB 層對 master 的代理。
但這個實現,會產生一個 DNS 查詢異常的問題,我在專欄 《Docker 核心知識必知必會》 網絡篇中深入介紹過其原理。之前我考慮過通過 --resolv-conf
參數,將主機的 resolver 提供給 kubelet 使用,但這種方式並不夠優雅,而且排查問題的話,由於不與 kubelet 使用相同 resolv.conf
,也會帶來一些麻煩;之後考慮將主機和 Node 中的 resolver 進行合併,但合併的話,也會帶來一些隱患。
本次版本中的實現,其實是對 Docker embedded DNS 做了很多 hack,主動對網絡做了管理,以此來完成此需求。
Features
-
kind delete clusters --all
可用於刪除所有集羣; - 配置文件中新增了頂級
featureGates
字段,來開啓相關特性; -
NO_COLOR
的支持; - 實驗性的對
podman
提供了支持; - 支持通過
KIND_CLUSTER_NAME
環境變量來指定集羣名稱; - 支持動態 PV 在 k8s v.11.x;
以上就是此次 KIND v0.8 中值得注意的內容,歡迎大家下載使用!使用方式可參考《使用 Kind 在離線環境創建 K8S 集羣》
NGINX Ingress Controller 1.7.0 發佈
本週 NGINX Ingress Controller 1.7.0 發佈了,包含了衆多更新:
- 支持通過新的資源
TransportServer
和GlobalConfiguration
配置 TCP/UDP/TLS 的負載均衡,這樣便可通過 NGINX Ingress Controller 在 Kubernetes 上交付非基於 HTTP 的應用程序; - 支持在
VirtualServer
和VirtualServerRoute
資源中配置錯誤頁; - 支持在 Kubernetes 或 OpenShift 上,通過 NGINX Ingress Operator 管理 Ingress 的生命週期;
關於此版本的更詳細內容,請參考其 ReleaseNote
上游進展
- #89285 移除了 k/k 中對上游 prometheus client 庫的依賴,全部替換成了 kubernetes 實現的 metrics 框架。這是爲了實施早先的一個 指標穩定性遷移(Metrics Stability Migration)的 KEP ;
-
#90394 修正了 kubeadm 中對
resolvConf
的行爲。kubeadm 將不會在/var/lib/kubelet/kubeadm-flags.env
中設置--resolv-conf
的值,而是使用KubeletConfiguration
對其進行配置; -
#90463
autoscaling/v2beta1
已廢棄,推薦使用autoscaling/v2beta2
; -
#89594 將不可變 Secrets/ConfigMaps 提升至 Beta 階段,並且 默認打開 ,用戶可通過設置
Immutable
字段來標記其內容爲不可變; -
#90449 移除了 events API 中未使用的
series.state
字段;
項目推薦
kured 是一個用於節點安全重啓的 Daemonset 。它包含以下特性:
- 監聽重啓標誌,例如
/var/run/reboot-required
; - 利用 API server 中的鎖來保障每次只重啓一個節點;
- (可選)根據 Prometheus 報警或者選定 Pod 的情況下,延遲重啓;
- 在重啓節點前會自動執行
cordon
和drain
,在節點重啓完成後執行uncordon
;
這在系統需要定期維護時候,是非常有用的。同時也可自己手動進行觸發,而不需每次重複操作。
歡迎訂閱我的文章公衆號【MoeLove】