9月底我們喜迎Kubernetes 1.4版本,現在仍能清楚記得kubeadm帶來的震撼。時隔70多天,我們再次懷著激動的心情等候Kubernetes 1.5版本的發布。
在Github上,Kubernetes已擁有接近20,000顆星、6,314次Fork,吸引了國內外眾多開發者的青睞,社區異常活躍。那麼這次升級Kubernetes又會為我們帶來什麼樣的驚喜?根據官方文檔的顯示,本次升級將主要圍繞以下三項內容進行:
目前每個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認證/授權機制。
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節點。
Stable Dashboard UI現在顯示面向用戶的對象及它們的資源使用情況。
Alpha 添加了對Windows Server 2016節點和調度Windows Server Container的支持。
對於有狀態的應用StatefulSet(先前為PetSet)而言,這個改動意味著創建替換的Pods被阻塞,直到舊的Pods確實沒有在運行了(意味著kubelet從分區返回,Node對象的刪除,雲服務商裡實例的刪除,或強行從apiServer中刪除了Pod)。這裡通過保證不可達的Pod不會被認為已經死亡來防止集群應用出現「腦裂」的狀況,除非一些「包圍」操作提供了上述之一的情況。
對於其他已有的除StatefulSet外的控制器,這對於控制器替換Pods沒有影響,因為控制器不會重用Pods命名(使用生成的名字generate-name)
用戶編寫的控制器會重用Pod對象的名字,所以需要考慮這個變化。
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 |
來源:https://www.kubernetes.org.cn/998.html