Kubernetes 1.17:主要創新概述

昨天,9月XNUMX日, 發生 Kubernetes 的下一個版本 - 1.17。 根據我們部落格的傳統,我們討論新版本中最重要的變化。

Kubernetes 1.17:主要創新概述

用於準備本資料的資訊取自官方公告, Kubernetes 增強追蹤表, 變更日誌-1.17 以及相關問題、拉取請求和 Kubernetes 增強提案 (KEP)。 那麼,有什麼新內容嗎?...

拓樸感知路由

Kubernetes 社群等待這個功能已經很久了—— 拓撲感知服務路由。 如果 韓國環保局 起源於2018年XNUMX月,官方 增強 — 2年前,常見問題 (喜歡 ) ——又老了幾歲…

總體思路是為 Kubernetes 中的服務提供實現「本地」路由的能力。 在這種情況下,“局部性”意味著“相同的拓撲等級” (拓撲層),這可能是:

  • 服務的節點相同,
  • 相同的伺服器機架,
  • 同一地區
  • 同一個雲端供應商,
  • ...

使用此功能的範例:

  • 具有多個可用區(多可用區)的雲端安裝可節省流量 - 請參閱。 清新插畫 使用來自 AWS 中相同區域但不同可用區的流量範例;
  • 更低的效能延遲/更好的吞吐量;
  • 分片服務,具有每個分片中節點的本地資訊;
  • 將 fluidd(或類似物)與收集日誌的應用程式放置在同一節點上;
  • ...

這種「了解」拓撲的路由也稱為網路親和性 - 類比 節點親和力, Pod 親和力/反親和力 或出現 不久前 拓樸感知卷調度 (и 卷配置)。 目前的實施水平 ServiceTopology 在 Kubernetes - alpha 版本中。

有關該功能如何工作以及如何使用它的詳細信息,請閱讀 這篇文章 來自其中一位作者。

IPv4/IPv6 雙堆疊支援

重大進展 固定的 另一個網路功能:同時支援兩個 IP 堆疊,該功能首次在 K8s 1.16。 具體來說,新版本帶來了以下變化:

  • 在 kube 代理程式中 實施的 兩種模式(IPv4 和 IPv6)同時運作的可能性;
  • в Pod.Status.PodIPs 出現 支援向下 API(同時 /etc/hosts 現在他們要求主機新增 IPv6 位址);
  • 雙堆疊支援 (Docker 中的 Kubernetes)和 庫貝德姆;
  • 更新了 e2e 測試。

Kubernetes 1.17:主要創新概述
插圖 在 KIND 中使用雙棧 IPV4/IPv6

CSI 進展

宣佈穩定 拓撲支援 用於基於 CSI 的存儲,首次引入於 K8s 1.12.

倡議 將磁碟區插件遷移到 CSI - CSI 遷移 - 達到測試版。 為了翻譯現有的儲存插件,此功能至關重要 (樹內) 現代介面 (CSI,樹外) 對 Kubernetes 最終用戶不可見。 叢集管理員只需要啟用 CSI 遷移,之後現有的有狀態資源和工作負載將繼續「正常工作」…但使用最新的 CSI 驅動程序,而不是 Kubernetes 核心中包含的過時驅動程式。

目前,AWS EBS 驅動程式的遷移已在 beta 版本中準備就緒(kubernetes.io/aws-ebs)和 GCE PD(kubernetes.io/gce-pd)。 其他儲存設施的預測如下:

Kubernetes 1.17:主要創新概述

我們討論了 K8s 中的「傳統」儲存支援如何進入 CSI 這篇文章。 CSI 遷移到測試版狀態的轉變是致力於 單獨出版 在專案部落格上。

此外,CSI 上下文中的另一個重要功能源自於 K1.17s 8(alpha 實作),在 Kubernetes 1.12 版本中達到了 beta 狀態(即預設為啟用) - 建立快照 並從中恢復。 在測試版發布過程中,對 Kubernetes Volume Snapshot 所做的更改包括:

  • 將 CSI 外部快照 sidecar 拆分為兩個控制器,
  • 新增了刪除的秘密 (刪除秘密) 作為磁碟區快照內容的註釋,
  • 新的終結器 (終結器) 以防止在存在剩餘連接時刪除快照 API 物件。

在 1.17 版本中,此功能由三個 CSI 驅動程式支援:GCE 永久磁碟 CSI 驅動程式、Portworx CSI 驅動程式和 NetApp Trident CSI 驅動程式。 有關其實現和使用的更多詳細資訊可以在 本出版品 在部落格上。

雲端提供者標籤

自動標籤 根據使用的雲端提供者分配給創建的節點和卷,自 K8s 1.2 發布以來,已經在 Kubernetes 中作為 beta 版本使用了很長一段時間 (2016 年 XNUMX 月!)。 鑑於它們長期以來的廣泛使用,開發人員 決定了,是時候宣布該功能穩定(GA)了。

因此,它們都被相應地重命名(通過拓撲):

  • beta.kubernetes.io/instance-typenode.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zonetopology.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/regiontopology.kubernetes.io/region

……但仍可以使用舊名稱(為了向後相容)。 但是,建議所有管理員切換到目前標籤。 相關文件 K8s已更新。

kubeadm 的結構化輸出

首次以 alpha 版本呈現 kubeadm 實用程式的結構化輸出。 支援的格式:JSON、YAML、Go 範本。

實現此功能的動機(根據 韓國環保局) 是:

雖然 Kubernetes 可以手動部署,但此操作的事實上(如果不是法律上)標準是使用 kubeadm。 Terraform 等流行的系統管理工具依賴 kubeadm 進行 Kubernetes 部署。 計劃對 Cluster API 進行改進,包括使用 kubeadm 和 cloud-init 進行 Kubernetes 引導的可組合套件。

如果沒有結構化輸出,即使是乍看之下最無害的變更也可能會破壞 Terraform、Cluster API 和其他使用 kubeadm 結果的軟體。

我們的近期計劃包括支援(以結構化輸出的形式)以下 kubeadm 命令:

  • alpha certs
  • config images list
  • init
  • token create
  • token list
  • upgrade plan
  • version

對指令的 JSON 回應的圖示 kubeadm init -o json:

{
  "node0": "192.168.20.51:443",
  "caCrt": "sha256:1f40ff4bd1b854fb4a5cf5d2f38267a5ce5f89e34d34b0f62bf335d74eef91a3",
  "token": {
    "id":          "5ndzuu.ngie1sxkgielfpb1",
    "ttl":         "23h",
    "expires":     "2019-05-08T18:58:07Z",
    "usages":      [
      "authentication",
      "signing"
    ],
    "description": "The default bootstrap token generated by 'kubeadm init'.",
    "extraGroups": [
      "system:bootstrappers:kubeadm:default-node-token"
    ]
  },
  "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}

穩定其他創新

總的來說,Kubernetes 1.17 的發布是在“穩定」 這是因為其中的許多功能(它們的總數是 14) 獲得 GA 狀態。 他們之中:

其他變化

當然,Kubernetes 1.17 的完整創新清單不僅限於上面列出的內容。 以下是其他一些(有關更完整的列表,請參閱 更新日誌):

  • 上一版本提供的功能已達到測試版 RunAsUserName 用於窗戶;
  • 類似的變化 遭遇 EndpointSlice API(同樣來自 K8s 1.16),但目前預設未啟用此用於提高 Endpoint API 效能/可擴充性的解決方案;
  • Pod 現在對於叢集運作至關重要 可以被創建 不僅在命名空間中 kube-system (詳細資訊請參閱文檔 限制優先消費);
  • kubelet 的新選項 - --reserved-cpus — 允許您明確定義為系統保留的 CPU 清單;
  • kubectl logs 提出了 新旗幟 --prefix,將pod和來源容器的名稱新增至日誌的每一行;
  • в label.Selector 添加 RequiresExactMatch;
  • kube-dns 中的所有容器 現在正在運行 特權較少;
  • 超級庫貝 分離到單獨的 GitHub 儲存庫中,並且將不再包含在 Kubernetes 版本中;
  • 顯著地 提高性能 用於非 UDP 連接埠的 kube-proxy。

依賴變化:

  • kubeadm 包含的 CoreDNS 版本是 1.6.5;
  • crictl版本更新至v1.16.1;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • 最新測試的Docker版本升級至19.03;
  • 建置 Kubernetes 1.17 所需的最低 Go 版本是 1.13.4。

聚苯乙烯

另請閱讀我們的博客:

來源: www.habr.com

添加評論