知行學院是青雲QingCloud 為廣大 CIO、架構師、開發者、運維工程師、技術愛好者提供的一個雲端計算、大資料、容器等技術的最佳分享與實踐平臺。其中包括線上技術公開課、雲產品解析、線下實踐課堂、行業沙龍等眾多知識分享形式。
本次我們邀請了青雲QingCloud 容器平臺產品經理於爽(Calvin Yu),帶來《如何打造一個企業級 Kubernetes 發行版》。
正文:
作為 KubeSphere 線上培訓教程的第一節課,今天的內容覆蓋幾個方面:第一個是介紹一下 KubeSphere 這款容器產品產生的背景,第二給大家比較一下 KubeSphere 和原生的 Kubernetes 的區別,第三部分會介紹一下 KubeSphere 高階版 1.0.0 裡面主要的功能,最後會有一個 Demo,給大家展示一下 KubeSphere 整體的使用方式。
第一部分
KubeSphere 產生的背景
這個是 Gartner 在今年釋出的調研報告,Gartner 認為到 2020 年大概有 50% 的企業會將內部非常重要的業務容器化,放到容器裡面去跑、而且是放在生產環境裡面跑。2018 年這個比例只有 5%,而兩年的時間將會有十倍的提升。
那麼,為什麼現在越來越多的企業要採用容器呢?
第一個原因就是相比於傳統的虛擬化技術,容器可以把主機資源的利用率最大化,可以帶來更輕量地資源消耗,避免無意義的資源損耗;
第二個就是通過容器我們可以把IT界討論的比較熱的一些話題,比如 CI/CD、微服務這些從理論變為現實。特別是 CI/CD 這一塊,這也是很多使用容器的客戶的主要訴求,在沒有容器之前,並不是說無法做CI/CD,但缺少了容器這種輕量的標準化的交付方式,帶了架構沉重、效率低下、環境不一致等問題。
基於標準化容器映象的構建方式以及統一映象的分發倉庫,使用者可以使用一系列自動化運維的工具完成從開發、程式碼提交、測試、預釋出、釋出一整套完整的流水線,它相比較於傳統的基於虛擬機器的互動方式更經濟、更高效。同時基於容器我們可以實現跨平臺的部署,企業就沒有平臺繫結的風險了。
使用容器需要管理排程平臺,Kubernetes 無疑是現在這種管理平臺市場裡最主流、最受認可的一個平臺,我們知道使用者想使用 Kubernetes 的熱情是非常高漲的,但是它有一系列的問題。
使用 Kubernetes 的問題與挑戰
首先就是學習成本比較高。Kubernetes 是由谷歌初始開源的一個專案,它起源於谷歌自己的 Borg 系統,大家都瞭解谷歌是一家技術出身的公司,Borg 系統或者說 Kubernetes 釋出之初的時候給人的印象也是如此——是面向開發者、面向技術人員的,使用起來非常的複雜。谷歌在裡面又抽象了很多他自己理解的排程層面的一些概念,使用者想要去了解、然後再去使用這個平臺需要很長的學習過程。
同時 Kubernetes 部署安裝非常複雜。在兩年前你要想搭建一套 Kubernetes 的平臺,可能要花一週甚至更長的時間。當然到了現在,由於它越來越得到大家的認可,有很多自動化工具可以幫助你做這件事情,但即使有了這些工具的支撐幫助,去了解這些自動化工具其實也是一個二次學習的成本。
另外,Kubernetes 專注做的是底層分散式的容器排程平臺,它把上游的一些業務場景以及跟底層資源的對接都開放出來,通過各種開源專案和廠商去支援。比如說儲存,它通過 CSI 標準,把標準定出來之後,儲存廠商可以接進來,網路、容器執行環境也都是如此;包括上游的一些場景,比如 CI/CD、微服務、這些都是通過其他開源專案去支援的。
所以當企業想要去通過 Kubernetes 完成這種業務場景的交付,那麼就要去選型、去選擇合適自己的開源專案,這些對企業來說也是很麻煩的一件事情。
綜上可以看出,想使用 k8s 它的隱形成本是很高的,企業需要運維一個專業的團隊去負責這個平臺,同時 Kubernetes 多租戶的模式非常複雜、安全性低,另外它作為通過開源社群支援的一個專案,缺乏本土化支援,這都是在使用 Kubernetes 過程中非常典型的一些問題和挑戰。
所以基於客戶的這些痛點,我們開發了我們自己的 k8s 發行版 KubeSphere,我們的 KubeSphere 和原生的 Kubernetes 的區別是什麼呢?
第二部分
KubeSphere 和原生的 Kubernetes 的區別
首先來說原生的 k8s 它的安裝是非常複雜的,但是我們的 KubeSphere 非常簡單,只需要配置兩個配置檔案,然後就可以一鍵安裝了。
另外,由於它整個安裝過程是需要拉取各種容器映象的,有些映象由於網路等原因,拉取起來比較複雜,而 KubeSphere 支援離線安裝,在網路環境比較限制的情況下或者說在一些私有云的場景、私有化網路情況下,通過離線安裝,你可以很方便地搭建一個 k8s 管理叢集。
原先的 Kubernetes 是沒有介面性的東西來輔助工作的,你可以額外使用開源的 Dashboard,但是 Dashboard 提供的功能是比較弱的,體驗也不是很好,而 KubeSphere 的介面功能比較強大,大家可以自己去體驗一下。
原先的 Kubernetes 的多租戶和許可權控制是通過配置檔案和命令列去完成的,我們的 KubeSphere 提供了統一的管理入口、多租戶的管理方式,可以提供資源和操作級別的許可權配置。
另外,Kubernetes 沒有應用管理的概念,它是通過 Helm 去做的,使用命令列可以完成 Helm 應用包的部署、升級、刪除的工作。而 KubeSphere 提供了完整的應用生命週期的管理,從應用的開發、釋出、版本管控、後面使用的運維,都可以提供一整套的完整的工具。
另外原生的 Kubernetes 是沒有 CI/CD、微服務這些業務場景支援的,在我們的 KubeSphere 裡面提供了這些業務場景的支援。
監控告警,Kubernetes 它的配置是相對比較複雜的,需要基於不同的開源專案去選型。而我們提供了更簡便的方式,同時我們也可以做第三方的整合支援,可以把你的監控資料匯入到企業現有的監控系統裡面。
然後是儲存網路。Kubernetes 儲存網路是兩大塊,有很多開源專案的支援,我們 KubeSphere 也整合了這些主流開源的網路儲存的解決方案,同時青雲作為一個雲廠商,我們也開發並開源了我們自己的儲存網路外掛去對接青雲現在的 SDN 網路、SDS 塊儲存,可以使用青雲的雲平臺上的硬碟。
我們還有另外一款分散式儲存產品 NeonSAN,它是可以獨立部署的,我們也開發了對應的 NeonSAN 的儲存外掛。另外像雲平臺上有負載均衡器,我們也開發了負載均衡器外掛,如果你把 KubeSphere 部署在青雲的雲平臺之上,那麼你可以通過我們的負載均衡器外掛,在暴露服務的時候選擇負載均衡器的型別,那麼你的服務就通過負載均衡器去暴露了。
簡單地概括一下:KubeSphere 是在 Kubernetes 之上構建的企業級分散式多租戶容器管理平臺。
它的幾大亮點包括:統一門戶、實現跨平臺管理多種 k8s;學習成本比較低,UI 體驗比較好;提供了多場景支援的整體化解決方案;可以很方便地整合第三方的系統;我們提供多租戶、更細粒度的許可權管理方式;我們除了提供開源的網路和儲存解決方案,還有我們自己特色的網路和儲存方案。
這是 KubeSphere 一個簡單的架構圖,底層可以支援不同的基礎設施,如物理機、vmware 虛擬機器或者是公有云上的雲主機,中間的門戶管理多種 k8s 叢集,網路和儲存我們支援各種儲存外掛、網路外掛,同時我們還有自己的網路和儲存外掛的支援。
我們自己作為雲廠商有自己的負載均衡器外掛,同時我們還提供基於物理交換機的負載均衡器解決方案,這對物理機的部署是非常重要的。
它的上層提供了幾大場景的支援,包括多叢集的運維排程、CI/CD、微服務治理、應用生命週期管理。其中應用生命週期管理,我們是基於 OpenPitrix——由我們主導開源的一個專案,大家可以在 GitHub 上搜到,它是實現多雲應用管理的一個平臺。
第三部分
KubeSphere 高階版 1.0.0 的主要功能
這是 KubeSphere 的全景功能圖,大家可以看到這裡面體現了剛才提到的幾大功能的支援。
比如說多租戶這一塊,從叢集層面我們提供了平臺管理角色;在叢集下面我們提供了多租戶的支援,我們叫做企業空間;企業空間底下我們提供了專案,對應 k8s 裡面的就是 Namespace;另外基於 CI/CD 的場景,我們有 DevOps 工程層級的資源支援,如果企業想去執行自己的 CI/CD 流水線,可以建立一個 DevOps 工程,然後在裡面跑自己的流水線。
KubeSphere 定義了叢集層級、企業空間層級、專案的 DevOps 工程層級,這是三個層級,它繫結的是每個層級資源不同的角色,角色底下關聯的是不同的使用者。關於多租戶,我們接下來會專門有一期線上培訓,給大家介紹裡面詳細的概念和操作。
從右邊這一塊能看到,我們支援的 k8s 資源工作負載型別有很多,包括部署、有狀態副本集、守護程式集、任務和定時任務。儲存這邊除了主流的開源儲存外掛,我們還有 NeonSAN 分散式塊儲存,以及支援青雲的塊儲存;暴露服務可以通過 Ingress 的方式;配置上我們支援 Secret 和 Configmap。
DevOps 工程裡面我們提供了視覺化流水線,我們支援 Jenkinsfile in&out of SCM。這是什麼意思呢?其實有很多企業已經用了 Jenkins 這種流水線管理平臺了,他們已經有了自己的 Jenkinsfile 去跑自己的流水線,並把 Jenkinsfile 作為他們程式碼管理的一部分,放在自己的程式碼倉庫裡面。
比如說 OA 專案,我要跑自己的流水線,有一個程式碼倉庫,你把 Jenkinsfile 放在這個程式碼倉庫裡面了,我們支援這種方式,那麼你在配置流水線的時候,告訴我程式碼倉庫的位置,我會自動地去拉取你已有 Jenkinsfile 裡面的內容,去把流水線構建出來並執行。
如果你之前沒有 Jenkinsfile 、,那麼通過我們提供的這種視覺化流水線構建工具,你可以在頁面上簡單地去操作、建立自己的流水線。
同時我們的 DevOps 工程支援憑證管理,可以去幫助你訪問各種程式碼倉庫、映象倉庫等等。
另外在高階版 1.0.0 中我們提供了獨立的監控中心,可以提供不同維度的監控功能,比如說我們可以從叢集視角去檢視各種指標,包括記憶體、CPU、磁碟、容器組執行情況、網路等等。從應用視角也可以去監控整個業務的執行狀況,比如說你的專案裡面使用多少資源,你的專案底下的應用使用多少資源,都是可以去檢視的。
總結一下多租戶的部分:
我們現在已經支援了 LDAP 和 AD 的統一認證,同時我們支援 OAuth 的認證整合。
網路與儲存
除了支援各種主流的網路儲存外掛,我們也提供了自主可控的網路和儲存。特別是在一些關鍵性業務上,如果你使用一些開源的外掛去跑一些關鍵性業務的話,一旦出了問題,服務、支援都是很頭疼的事情。這種自主可控的、可以得到及時支援的網路和儲存的方案,對於某些客戶還是非常重要的。
作為我們青雲平臺的企業使用者,在網路上您可以使用我們提供的開源的 hostnic 網路方案,pod 上直接繫結青雲 SDN 的網路卡,可以實現網路卡的直通。
然後我們還提供基於物理交換機的負載均衡器解決方案,且不繫結裝置,比如說你可以自己採購華三的交換機,通過物理交換器達到負載均衡器暴露服務的場景支援。
我們自己的 CSI 儲存外掛可以直接掛載青雲的 SDS 塊儲存,我們也開發了 QingStor CSI 的外掛,這個 pod 可以直接掛載 NeonSAN 的塊儲存。
CI/CD on KubeSphere
基於 CI/CD 我們可以實現容器的標準化交付物,快速構建、升級、回滾應用環境,提供完整的自動化工具的鏈條,降低運維成本,同時 CI/CD 為微服務場景提供了強有力的支援。比如說把一些業務拆分放在不同的容器裡面去,然後再通過 CI/CD 構建整個的開發、測試和部署的鏈條,實現快速釋出,降低管理成本。
我們現在釋出的是 1.0.0,剛才也提到 Jenkinsfile In and out 和 Source Code Management 兩種方式,我們即將釋出的 2.0.0 版本會支援 source to image,程式碼到映象的構建,還支援程式碼安全掃描。
叢集運維
我們在專案這個層級提供配額管理,比如這個專案底下你可以去使用多少 CPU、多少記憶體、可以建立多少個部署、多少個服務,這些都可以通過配額去配置。在工作負載上除了支援 k8s 原生之外我們還支援 HPA,即 pod 的自動彈性伸縮,你可以設定自己的CPU指標,pod 的下限和上限,當指標達到、超過的時候,pod 會自動的擴容。
應用的生命週期管理
這個是通過我們自己開源的一個專案 OpenPitrix 做的,OpenPitrix 是多雲應用的全生命週期管理,支援不同的雲廠商,如阿里雲、AWS 等,k8s 也是 OpenPitrix 支援的執行平臺。
它底層是基於 Helm 去做的,也就是說 OpenPitrix 是去呼叫 Helm 的 API,在應用層實現包的管理。但是 OpenPitrix 比 Helm 能做的事情更多,因為 Helm 其實就是簡單地實現應用打包,然後部署、版本管控、升級這些功能,但是其實應用管理、生命週期管理是非常複雜的場景,它不單單是 Helm 考慮到的那些東西,它還包括了不同角色人員的需求,還有不同場景的支援。
比如說我作為一個應用開發者,我怎麼去開發自己的應用、怎麼釋出、版本管控,以及應用釋出之後,我的計費計量、使用者使用的情況是什麼樣的?它碰到的各種問題怎麼通過我的平臺去獲取支援?這都是整個應用生命週期管理裡面各種場景的訴求,這個在 Helm 是沒有的。而 OpenPitrix 提供了整個應用生命週期管理的功能。
這裡簡單畫了一個 KubeSphere 和 OpenPitrix 怎麼做整合支援的場景介紹。比如說我是一個應用開發者,我開發一個應用,那麼我可以通過 OpenPitrix 把我的應用打包上傳,上傳之後釋出應用,再通過我的 KubeSphere 的 CI/CD 流水線跑一些測試,都通過之後把它釋出,釋出之後我就可以在我的應用倉庫裡面看到這個應用了。作為一個應用的消費者、使用者,他可以在應用倉庫的介面裡面看到並使用這個應用。
這個是 KubeSphere 高階版的產品路線圖。高階版 1.0.0 裡面我們提供的是多租戶、監控和 CI/CD,高階版 2.0 的時候我們會提供微服務治理、日誌、告警的支援。
2019 年,我們會在公有云上線我們自己的 QingCloud Kubernetes Service,提供容器超融合一體機。我們的 AppCenter 裡提供了各種 PaaS 和 SaaS 的應用,我們會把線上比較關鍵性的 PaaS 應用容器化,放到 KubeSphere 的內建應用倉庫裡,同時我們在明年還會支援 GPU 和 arm 的架構,可以支援大資料深度學習的場景。
最後,這是 KubeSphere 產品從開發至今累計的開源專案的地址,第一個就是 KubeSphere 這個專案的地址,然後是文件的專案,大家使用時碰到的各種問題、各種需求都可以在這上面告訴我們,我們會及時去解答。
比如說我剛才講到的我們自己對接雲平臺的各種外掛,像負載均衡器外掛、網路卡外掛、儲存外掛,還有我剛才提到的多雲的應用管理平臺 OpenPitrix,我們都在 Github 上開源。
另外我們提供了兩個線上網站,KubeSphere.io 和 KubeSphere.qingcloud.com ,大家可以在這些地址上獲取想了解的資訊。