如何在阿裏雲一鍵部署高可用的Kubernetes集群
摘要:在雲棲TechDay34期:DockerCon2017最新的技術解讀中,阿裏雲的容器服務團隊技術專家謝瑤瑤做了題為《Kubernetes on Alibaba Cloud》的分享,主要介紹了Kubernetes的基本概念,如何在阿裏雲快速一鍵部署高可用安全的Kubernetes集群以及阿裏雲的Cloud Provider所提供的能力。以下內容根據演講嘉賓現場視頻以及速記整理而成。
今天主要會分享三個方麵的問題:
- Kubernetes的基本概念介紹
- 如何在阿裏雲快速一鍵部署高可用安全的Kubernetes集群
- Kubernetes在阿裏巴巴的Cloud Provider,也就是雲廠商的集成提供的一些能力
首先簡單介紹一下Kubernetes。Kubernetes簡稱K8S,這是社區的一種叫法。Kubernetes是整個CaaS工作流中的一環,CaaS是什麼呢?就是Container As A Service——容器即服務,下圖中的右圖是一個簡化版的CaaS的架構圖,從最底層是一個基礎服務,其上層主要提供的是物理機、網絡、存儲等一些比較硬件化的基礎設施。再往上一層會構建PaaS平台,PaaS平台裏頭主要交付的對象是一些虛擬機,或者邏輯的結構,比如邏輯的VPC網絡、存儲等,讓你可以方便地一鍵去創建這些資源,而不需要再去機房裏頭自己去運維管理這些東西。然後在PaaS平台上麵會構建一層容器平台,這一層中主要的交互單元就是容器。

接下來分享一下Kubernetes的一些基本的概念,一個比較核心的概念就是Pod,Pod是一組容器的統稱,就是它把一組容器作為一個最基礎的調度單元,這組容器會被協同調度到一起,比如說有兩個屬於同一個Pod的容器,那麼它們會被調度到同一個節點,一起調度,一起Fail Over。Service是一組Pod的抽象,比如在創建應用的時候可能需要創建很多個Pod來同時對外界提供服務,那麼這一組Pod是同一個層次的東西,具有同等的地位,在前麵提供一個Services對這一組Pod做負載均衡,當訪問這個Services的時候,就會從後端隨意挑出一個Pod來為前端提供服務,相當於負載均衡的概念,不過Services是集群內部的,它的網絡隻會局限於集群內部。
另外一個是Deployment概念,這是一個描述性的概念,就是當描述一個應用的時候就需要聲明這個應用需要達到的狀態,比如需要它有三個副本一直運行,需要它在故障的時候能夠自動拉起來。用Deployment來描述它,然後係統就會自動保證這些東西,一旦出現了不符合預期的情況,係統會自動把這個狀態轉化到正常,無論是通過重新創建一組Pod或者是拉起原來的Pod。在K8S裏麵還有一個另外比較重要的概念就是持久化卷,通常來講容器在創建的時候是沒有數據卷的,對於存儲在容器中的數據,如果把容器刪掉了,那麼這個數據也就會丟失。K8S提供一個持久化卷的概念,就是在創建服務的時候,可以先創建出這個卷,然後把這個卷掛載到容器裏頭去。通過這樣的方式,在刪除容器時,持久化卷是不會被刪除的,數據也就可以保留下來。
下圖是K8S的架構示意圖,這是一個典型的無狀態、多Master的分布式架構圖。K8S主要功能組件:Kubelet,相當於Agent,在每一個節點上提供一個守護進程的服務,上報節點狀態、運行Controller等。aplserver是一個Master,它是無狀態的,所有的數據都存在後端的一致性存儲中。Scheduler負責調度所有的Pod,也就是應用,為應用找一個合適的位置並運行起來。

在使用K8S當中遇到的一個比較大的問題就是部署問題。眾所周知K8S一直在業界被詬病的就是太難用了,組件太多,概念太多,導致無法理解。對於開發者來講,不希望去操心如何把集群快速地部署起來,如何去理解底層的東西,隻需在用到的時候能夠部署一個集群出來,這是需要達到最終的目標,就是部署簡單。

那麼阿裏雲的選擇是什麼呢?ROS + Kubeadm,原因隻有一個:簡單。首先簡單介紹一下ROS,ROS是阿裏雲的資源編排服務,它可以非常方便的在阿裏雲一鍵創建出來所需要的各種資源比如ECS、VPC網絡、SLB以及其他資源等等,相關的文檔大家可以去阿裏雲官網查看。
一鍵部署主要分為三個步驟:
- 進入到ROS的控製台,這裏有一個Kubernetes for chinese版本的,然後去點擊創建。
- 選一個創建的區域。
- 填寫創建的集群名稱,填寫節點的密碼,點擊創建。
主要的部署過程分為三個步驟:第一個是創建集群需要提供阿裏雲的KeyID跟KeySecret,首先需要設置這兩個環境變量,然後需要從阿裏雲官方網站上下載一個腳本,執行一個node-type=Master命令,這個命令要在Master上執行,這樣執行完了之後就在這台機器上初始化了一個Master了,然後它會返回一個Token和節點的IP。第二步再到node節點上麵去把node-type改為node,然後帶上KeyID跟KeySecre以及剛才返回的End Point和Token,就可以把這個結點加入到剛才創建的Master集群當中,如此反複,就可以把更多的節點加入到集群中去。當不想要某個節點的時候,還可以通過node-type = down的命令銷毀掉這個節點。




實踐過程中比較多的問題都來自於客戶想了解VPC網絡的性能究竟如何。在這裏通過幾種不同的方案來測試了一下VPC性能,主要有netprof、iprof以及qprof,下圖是得出來的結果。從這些結果來看,容器的VPC網絡跟主機VPC網絡差距是非常小的,性能損耗是幾乎是沒有的,當然不同的人在不同的環境下測出來的結果會有略微的差異,大家可以自己測試一下。



阿裏雲的Cloud Provider還支持各種存儲,比如NAS存儲、OSS存儲等。NAS存儲是由原生的K8S的NFS驅動支持的。在這裏簡單介紹一下KBS的Volume的使用機製,K8S的PV就是一個持久化的卷,這需要由集群管理員首先在集群中創建出來作為一個集群內的資源,如果應用方想要在應用中使用,要先創建一個PVC,並要宣稱要使用集群的存儲資源,然後K8S會從所有的集群Volume裏麵去挑選出最合適、最匹配的,把它們綁定起來,綁定就意味著你可以使用這個PVC了。對於應用來講,需要在Pod裏麵去聲明需要使用PVC,然後應用就和PVC綁定起來了,這樣在創建應用的時候,K8S就會把這個掛載到應用Pod裏去,這樣就可以像寫本地磁盤一樣去寫Persistent-Volume。



最後更新:2017-05-29 13:02:07