##開篇
最近整理筆記,不知不覺發現關於kubernetes相關的筆記已經達99篇了,索性一塊兒總結了。算是對這兩年作容器雲平臺的一個總結,本文是開篇,先介紹下全部用到的組件。首先來看下架構圖(實在畫的太醜,求推薦工具)nginx
如圖,容器平臺主要涉及的組件有:git
##正所謂開局一張圖,後面全靠編,哈哈,開幹。。。github
首先,介紹Docker,廢話很少說,先上圖
###docker是什麼?
根據官網的介紹,容器是把代碼及其全部依賴打包的一個標準單元,你能夠把這個程序從一個環境快速可靠的轉移到另一個環境。Docker鏡像是一個輕量級的,獨立的,可執行的軟件包,其中就包含了運行程序所須要的一切。算法
說白了就是把應用程序及其依賴打包到一個文件裏,運行這個文件,就會生成一個虛擬容器。程序在裏面運行就跟在物理機或者虛擬機上同樣。~~~真拗口docker
###docker的用途數據庫
###docker的缺點以及爲何用kubernetes
docker容器的輕量化,意味着在等量資源的基礎上能建立出更多的容器實例。可是在面對分佈在多臺主機上且擁有數量不少容器(成百上千)的大規模應用程序時,傳統的單機容器管理解決方案就會變得力不從心。另外,因爲微服務愈來愈完善的原生支持,在一個容器集羣中的容器粒度愈來愈小,數量愈來愈多。在這種狀況下,都須要藉助容器管理平臺,從而實現調度,負載均衡以及任務分配等。apache
容器集羣管理工具能在一組服務器上管理多容器組合成的應用,每一個應用集羣在容器編排工具看來是一個部署或管理實體,容器集羣管理工具全方位爲應用集羣實現自動化,包括應用實例部署、應用更新、健康檢查、彈性伸縮、自動容錯等等。哈哈,好巧不巧,Kubernetes就提供了這些功能,這就是爲何咱們要用Kubernetes的緣由。緩存
###Kubernetes是什麼?
Kubernetes:Google 開源的容器管理系統,起源於Borg 系統。用於自動部署,擴展和管理容器化應用程序的開源系統。它將組成應用程序的容器組合成邏輯單元,以便於管理和服務發現。安全
Kubernetes架構圖服務器
###Kubernetes的用途
###Kubernetes的挑戰
做爲整個平臺的核心,Kubernetes的功能強大,可是就其自己架構而言,學習成本不低。
###鏡像倉庫docker-registry & harbor
倉庫,顧名思義,就是存放東西的地方,docker-registry,理所固然,就是存放docker鏡像(image)的地方了。docker的倉庫有公有倉庫和私有倉庫。共有倉庫好比hub.docker.com,gcr.io,k8s.gcr.io等,通常下載速度比較慢,尤爲k8s相關的鏡像,得魔法上網。私有倉庫通常是公司內部自行搭建,用於存放內部構建的docker鏡像,部署服務時從私有倉庫下載,速度很快。
harbor就是一個用於存儲docker鏡像的企業級Registry服務。相比較於原生的Regisrty來講,它具備不少的優點。
harbor架構圖
###ceph介紹
在能對kubernetes提供存儲服務的衆多服務當中,ceph的優點在於提供了多樣化的存儲方式,包括對象存儲,塊存儲,文件系統三種。ceph做爲一個統一的分佈式存儲系統,提供了高性能,高可用性,搞擴展性。對於kubernetes來講,做爲基礎服務,這些特性是必不可少的。
ceph架構圖
下面就來了解下ceph的幾大特性:
固然了,ceph做爲獨立的系統,能夠部署到裸機上,也能夠部署到kubernetes集羣。
PS:若是用的公有云部署kubernetes,能夠直接使用公有云提供的存儲服務,簡單省事。
ceph介紹完,再來介紹另外一個存儲etcd
###ETCD介紹
Etcd做爲kubernetes的存儲核心,做爲保存 Kubernetes 全部集羣數據的後臺數據庫。etcd 是兼具一致性和高可用性的鍵值數據庫。
etcd架構圖
etcd有如下的特色:
爲了保證數據的高可用,通常狀況下都使用奇數節點的集羣。
接下來,介紹kubernetes集羣的網絡插件
###Flannel介紹
Flannel: CoreOS 開源的網絡方案,爲 kubernetes 設計,功能是讓集羣中的不一樣節點主機建立的Docker容器都具備全集羣惟一的虛擬IP地址。Flannel的底層通訊協議的可選餘地有不少,好比UDP、VXlan、AWS VPC等等,不一樣協議實現下的網絡通訊效率相差較多,默認爲使用UDP協議,部署和管理簡單。
Flannel的後臺數據也存儲於ETCD中。
Flannel架構圖
如過只是搭建kubernetes集羣環境,以上組件就足夠了,下面繼續介紹的組件,主要是基於kubernetes之上的應用,主要用於構建流水線,監控集羣,日誌分析。
###drone介紹
開始以前,先介紹兩個概念:CI和CD
什麼是CI/CD
持續集成(Continous Intergration,CI)是一種軟件開發實踐,即團隊開發成員常常集成它們的工做,一般每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都須要經過自動化的編譯、發佈、自動化迴歸測試來驗證,從而儘快地發現集成錯誤。而這些自動化的操做則由CI軟件進行執行。
持續部署(Continous Delivery,CD)在持續集成的基礎上,將集成後的代碼部署到真實運行環境中(本文指部署到kubernetes集羣)。交付團隊 ->版本控制 ->構建和單元測試 ->自動驗收測試 -> 發佈
什麼是Drone
Drone 是一個基於Docker容器技術的可擴展的持續集成引擎,用於自動化測試、構建、發佈。每一個構建都在一個臨時的Docker容器中執行,使開發人員可以徹底控制其構建環境並保證隔離。開發者只需在項目中包含 .drone.yml文件,將代碼推送到 git 倉庫,Drone就可以自動化的進行編譯、測試、發佈。
流程如圖
###prometheus-operator
Prometheus:一個很是優秀的監控工具或者說是監控方案。它提供了數據蒐集、存儲、處理、可視化和告警一套完整的解決方案。做爲kubernetes官方推薦的監控系統,用Prometheus來監控kubernetes集羣的情況和運行在集羣上的應用運行情況。
Prometheus架構圖
那Prometheus Operator是作什麼的呢?
Operator是由CoreOS公司開發的,用來擴展 Kubernetes API,特定的應用程序控制器,它用來建立、配置和管理複雜的有狀態應用,如數據庫、緩存和監控系統。
能夠理解爲,Prometheus Operator就是用於管理部署Prometheus到kubernetes的工具,其目的是簡化和自動化對Prometheus組件的維護。
Prometheus Operator架構
###EFK介紹
EFK,全稱Elasticsearch Fluentd Kibana ,是kubernetes中比較經常使用的日誌收集方案,也是官方比較推薦的方案。
經過EFK,能夠把集羣的全部日誌收集到Elasticsearch中,而後能夠對日誌作分析。通常用於故障排查,數據分析等。。。
數據流程圖
###Dashboard介紹
kubernetes的Dashboard有不少,官方Dashboard,rancher, kuboard, octant, Lens等等,這裏只簡單介紹Lens
Lens 一個開源的管理 Kubernetes 集羣的IDE,支持 MacOS, Windows 和 Linux。經過 Lens,咱們能夠很方便地管理多個 Kubernetes 集羣。
直接上圖,本身體驗,效果更佳。
最後GIT/SVN和Ingress-nginx先不介紹,後續實戰再說
###總結
至此,容器雲平臺的全部組件都基本作了個介紹,如今從使用者的角度,簡單梳理流程:
PS:整理+排版花了好幾天,我真是太難了%#¥@@~¥!……#……太難了~~~~
下一篇,發實戰水文&……%¥#@!
Tips: 更多好文章,首發公X衆X號「菜鳥運維雜談」!!!