Kubernetes(k8s)1.5 強勢來襲 | 介紹
來源:https://www.kubernetes.org.cn/998.html
9月底我們喜迎Kubernetes 1.4版本,現在仍能清楚記得kubeadm帶來的震撼。時隔70多天,我們再次懷著激動的心情等候Kubernetes 1.5版本的釋出。
在Github上,Kubernetes已擁有接近20,000顆星、6,314次Fork,吸引了國內外眾多開發者的青睞,社群異常活躍。那麼這次升級Kubernetes又會為我們帶來什麼樣的驚喜?根據官方文件的顯示,本次升級將主要圍繞以下三項內容進行:
Federation (聯邦)
目前每個Kubernetes叢集還處於一個相對獨立的階段,它們分別執行在指定的資料中心裡。不少使用者都表示他們希望有個辦法能讓他們統一管理這些分散的叢集,支援跨資料中心的場景。叢集聯邦就提供了這樣的功能。
聯邦的概念在早期的版本里就有提到,它面臨的主要挑戰是:本地親和性、跨叢集服務發現、跨叢集排程、跨叢集遷移等等。社群正在逐步完善對聯邦的支援。在Kubernetes 1.5中將會增加對Daemonsets、Deployments和ConfigMaps的聯邦支援。
簡化叢集部署
Kubernetes叢集的部署曾經一直是很多初學者的最大障礙。而在Kubernetes 1.4裡引入了kubeadm init和kubeadm join兩個命令,讓Kubernetes可以在任何地方輕鬆部署。在1.5版本中會除了繼續加強kubeadm的能力,還會引入新命令kubefed,以簡化叢集聯邦的相關操作,最後提供了對於Master節點的HA設定。
節點魯棒性
Kubernetes可以通過kubeadm join輕而易舉地為叢集新增新的計算節點,而過去對這些節點的認識是它們都必須是Linux作業系統。從1.5開始,提供對於Windows Server 2016節點的支援,同時還可以排程Windows Server Containers,這樣使用者就可以在Kubernetes上同時執行Linux應用和Windows應用了。同時在1.5版本中,還實現了CRI(容器執行時介面),以及添加了kubeletAPI呼叫時的認證和授權。
新特性
- 應用
- Stable 當ReplicaSets不能建立Pods時,它們會通過API報告失敗的底層原因。
- Stable kubectl apply現可通過–prune引數刪除不再需要的資源
- Beta 無法通過滾動升級到新版本的Deployments,現可通過API說明它們已經被阻塞。
- Beta StatefulSets允許要求持久化identity或單例項儲存的工作負載通過Kubernetes建立和管理。
- Beta 為了提供安全保障,叢集不會強行刪除未響應節點上的Pods,使用者通過CLI強行刪除Pods會收到警告。
- 認證
- Alpha 改進了包含一組預設的叢集角色的RBAC API,
- Beta 添加了對於Kubelet API認證/授權機制。
- AWS
- Stable 角色出現在kubectl get nodes的結果裡。
- 叢集生命週期
- Alpha 提升了kubeadm二進位制包的互動和可用性,簡化了新建一個執行叢集的過程。
- 叢集運維
- Alpha 在GCE上使用kube-up/kube-down指令碼來建立/移除叢集高可用(複製)的主節點。
- 聯邦
- Beta 支援聯邦ConfigMaps。
- Alpha 支援聯邦Daemonsets。
- Alpha 支援聯邦Deployments。
- Alpha 叢集聯邦新增對於DeleteOptions.OrphanDependents的支援來開啟級聯刪除。
- Alpha 引入kubefed命令,簡化聯邦控制檯的部署以及叢集註冊/登出體驗。
- 網路
- Stable 服務可以通過DNS名被其他服務引用,而不是隻有在pods裡才可以。
- Beta 為NodePort型別和LoadBalancer保留源IP的選項。
- 節點
- Alpha 支援在容器執行時啟用使用者名稱空間重對映的時候,保留對宿主使用者名稱空間的訪問,
- Alpha 引入了v1alpha1版本的CRI(容器執行時介面) API,它允許可插拔的容器執行時。現有一個實驗用的已經就緒的docker-CRI整合,請測試和反饋。
- Alpha Kubelet基於QoS層在每個Pod的CGroup層級裡啟動容器。
- Beta Kubelet集成了memcg提示訊息API,來檢測是否超過閾值。
- Beta 引入了Beta版的容器化節點一致性測試: gcr.io/google_containers/node-test:0.2。使用者可以來驗證node設定。
- 排程
- Alpha 添加了對於不透明整數資源(node級)的審計。
- Beta PodDisruptionBudget升級為Beta版,可以用來在應用的SLO下安全地drain節點。
- UI
- Stable Dashboard UI現在顯示面向使用者的物件及它們的資源使用情況。
- Windows
- Alpha 添加了對Windows Server 2016節點和排程Windows Server Container的支援。
顯著改變
- 節點控制器不再從apiServer強行刪除pods
- 對於有狀態的應用StatefulSet(先前為PetSet)而言,這個改動意味著建立替換的Pods被阻塞,直到舊的Pods確實沒有在運行了(意味著kubelet從分割槽返回,Node物件的刪除,雲服務商裡實例的刪除,或強行從apiServer中刪除了Pod)。這裡通過保證不可達的Pod不會被認為已經死亡來防止叢集應用出現“腦裂”的狀況,除非一些“包圍”操作提供了上述之一的情況。
- 對於其他已有的除StatefulSet外的控制器,這對於控制器替換Pods沒有影響,因為控制器不會重用Pods命名(使用生成的名字generate-name)
- 使用者編寫的控制器會重用Pod物件的名字,所以需要考慮這個變化。
- 允許匿名API伺服器的訪問,通過授權組系統設定認證的使用者
- kube-apiserver添加了–anonymous-auth 引數,預設為true。當它啟用時,訪問安全埠的請求不會被其他配置的認證方法所拒絕,這些請求被當做匿名請求,並且使用者名稱為system:anonymous,組織為system:unauthenticated。
- 認證的使用者被設為system:authenticated組。
- 注意:匿名訪問預設啟用。如果你只依賴認證來授權訪問,選擇一個授權模式而不是AlwaysAllow,或者將–anonymous-auth設為false。
升級須知
- batch/v2alpha1.ScheduledJob被重新命名為batch/v2alpha1.CronJob。
- PetSet被重新命名為StatefulSet。如果你現在有PetSets,你要在升級為StatefulSets前後進行一些額外的遷移操作,
- 如果你從v1.4.x升級你的叢集聯邦元件,請更新你的federation-apiserver和federation-controller-manager證明為新版本。
- 廢棄的kubelet –configure-cbr0引數被移除。經典的網路模式也是。如果你依賴於此模式,請調研其他的網路外掛kubenet或cni是否滿足需求。
- 新的client-go結構,根據kubernetes/client-go為版本策略。
- 廢棄的kube-scheduler –bind-pods-qps和–bind-pods burst引數被移除,替換–kube-api-qps和–kube-api-burst代替。
- 如果你需要使用1.4的特性:PodDisruptionBudget(例如建立了PodDisruptionBudget物件),然後在從1.4升級為1.5之前,你一定要刪除所有的PodDisruptionBudget物件(policy/v1alpha1/PodDisruptionBudget)。升級之後不可能刪除這些物件。它們的存在也會妨礙你使用1.5裡Beta版的PodDisruptionBudget特性(policy/v1beta1/PodDisruptionBudget)。如果你已經進行了升級,那麼你需要降級到1.4來刪除這些policy/v1alpha1/PodDisruptionBudget物件。
新特性追蹤
Feature Name | Stage |
---|---|
Role-based access control | Alpha |
Dramatically Simplify Kubernetes Cluster Creation | Alpha |
Simplify HA Setup for Master | Alpha |
Federated Daemonset | Alpha |
Federated Deployments | Alpha |
Federation: Support generalized deletions, including cascading and … | Alpha |
It should be fast and painless to deploy a Federation of Kubernetes | Alpha |
Enable userns support for containers launched by kubelet | Alpha |
Container Runtime Interface (CRI) | Alpha |
Add support for pod and qos level cgroups | Alpha |
Accounting and feasibility for opaque integer resources in the API | Alpha |
Support Windows Server Containers for K8s | Alpha |
Allow deployments to correctly indicate they are failing to deploy | Beta |
StatefulSets to Beta | Beta |
Make StatefulSets safe during cluster failure | Beta |
Authenticated/Authorized access to kubelet API | Beta |
Federated ConfigMap | Beta |
GCP Cloud Provider: Source IP preservation for Virtual IPs | Beta |
Improve responsiveness of kubelet eviction module | Beta |
Node Conformance Test | Beta |
PodDisruptionBudget and /eviction subresource | Beta |
Communicate replica set and deployment status via conditions | Stable |
Support deleting previous objects in kubectl apply |
Stable |
Show roles in kubectl | Stable |
Support services that reference an external service | Stable |
Dashboard UI: show all user facing resources | Stable |