K8S 生態週報| KIND v0.8 正式發佈

「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 發佈了,包含了衆多更新:

  • 支持通過新的資源 TransportServerGlobalConfiguration 配置 TCP/UDP/TLS 的負載均衡,這樣便可通過 NGINX Ingress Controller 在 Kubernetes 上交付非基於 HTTP 的應用程序;
  • 支持在 VirtualServerVirtualServerRoute 資源中配置錯誤頁;
  • 支持在 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 的情況下,延遲重啓;
  • 在重啓節點前會自動執行 cordondrain ,在節點重啓完成後執行 uncordon

這在系統需要定期維護時候,是非常有用的。同時也可自己手動進行觸發,而不需每次重複操作。


歡迎訂閱我的文章公衆號【MoeLove】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章