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