基於Docker及Kubernetes構建的容器雲平臺

##開篇
最近整理筆記,不知不覺發現關於kubernetes相關的筆記已經達99篇了,索性一塊兒總結了。算是對這兩年作容器雲平臺的一個總結,本文是開篇,先介紹下全部用到的組件。首先來看下架構圖(實在畫的太醜,求推薦工具)
基於Docker及Kubernetes構建的容器雲平臺

nginx

如圖,容器平臺主要涉及的組件有:git

##正所謂開局一張圖,後面全靠編,哈哈,開幹。。。github

首先,介紹Docker,廢話很少說,先上圖
基於Docker及Kubernetes構建的容器雲平臺
###docker是什麼?
根據官網的介紹,容器是把代碼及其全部依賴打包的一個標準單元,你能夠把這個程序從一個環境快速可靠的轉移到另一個環境。Docker鏡像是一個輕量級的,獨立的,可執行的軟件包,其中就包含了運行程序所須要的一切。


算法

說白了就是把應用程序及其依賴打包到一個文件裏,運行這個文件,就會生成一個虛擬容器。程序在裏面運行就跟在物理機或者虛擬機上同樣。~~~真拗口docker

###docker的用途數據庫

  1. 簡化配置
  2. 代碼流水線管理
  3. 提升開發效率
  4. 隔離應用
  5. 整合服務器
  6. 快速部署
  7. 提供一致性環境
  8. 提供彈性服務

###docker的缺點以及爲何用kubernetes
docker容器的輕量化,意味着在等量資源的基礎上能建立出更多的容器實例。可是在面對分佈在多臺主機上且擁有數量不少容器(成百上千)的大規模應用程序時,傳統的單機容器管理解決方案就會變得力不從心。另外,因爲微服務愈來愈完善的原生支持,在一個容器集羣中的容器粒度愈來愈小,數量愈來愈多。在這種狀況下,都須要藉助容器管理平臺,從而實現調度,負載均衡以及任務分配等。
apache

容器集羣管理工具能在一組服務器上管理多容器組合成的應用,每一個應用集羣在容器編排工具看來是一個部署或管理實體,容器集羣管理工具全方位爲應用集羣實現自動化,包括應用實例部署、應用更新、健康檢查、彈性伸縮、自動容錯等等。哈哈,好巧不巧,Kubernetes就提供了這些功能,這就是爲何咱們要用Kubernetes的緣由。緩存


###Kubernetes是什麼?
Kubernetes:Google 開源的容器管理系統,起源於Borg 系統。用於自動部署,擴展和管理容器化應用程序的開源系統。它將組成應用程序的容器組合成邏輯單元,以便於管理和服務發現。
安全

Kubernetes架構圖
基於Docker及Kubernetes構建的容器雲平臺
服務器

###Kubernetes的用途

  1. 服務發現與負載均衡
  2. 自我修復
  3. 自動化上線和回滾
  4. 配置管理
  5. 存儲編排
  6. 批量執行
  7. Service拓撲
  8. 斷點切片
  9. 自動裝箱
  10. 水平擴縮
  11. 雙協議棧

###Kubernetes的挑戰
做爲整個平臺的核心,Kubernetes的功能強大,可是就其自己架構而言,學習成本不低。

  1. kubernetes概念太多,可能一個月也沒法入門,甚至連集羣都搭建不出來。
  2. 學習kubernetes對運維的技術能力要求比較高,和傳統的運維有必定差別,須要有修改代碼的能力。
  3. kubernetes的誕生,把運維從傳統轉向devops,須要面臨的新技術不少。
  4. 可是當你掌握到了k8s的核心使用,就會受益不淺。

###鏡像倉庫docker-registry & harbor
倉庫,顧名思義,就是存放東西的地方,docker-registry,理所固然,就是存放docker鏡像(image)的地方了。docker的倉庫有公有倉庫和私有倉庫。共有倉庫好比hub.docker.com,gcr.io,k8s.gcr.io等,通常下載速度比較慢,尤爲k8s相關的鏡像,得魔法上網。私有倉庫通常是公司內部自行搭建,用於存放內部構建的docker鏡像,部署服務時從私有倉庫下載,速度很快。
harbor就是一個用於存儲docker鏡像的企業級Registry服務。相比較於原生的Regisrty來講,它具備不少的優點。

  • 提供分層傳輸機制,優化網絡傳輸
  • 提供WEB界面,優化用戶體驗
  • 支持水平擴展集羣
  • 良好的安全機制
  • Harbor提供了基於角色的訪問控制機制,並經過項目來對鏡像進行組織和訪問權限的控制

harbor架構圖
基於Docker及Kubernetes構建的容器雲平臺


###ceph介紹
在能對kubernetes提供存儲服務的衆多服務當中,ceph的優點在於提供了多樣化的存儲方式,包括對象存儲,塊存儲,文件系統三種。ceph做爲一個統一的分佈式存儲系統,提供了高性能,高可用性,搞擴展性。對於kubernetes來講,做爲基礎服務,這些特性是必不可少的。

ceph架構圖
基於Docker及Kubernetes構建的容器雲平臺

下面就來了解下ceph的幾大特性:

  • 高性能
    採用CRUSH算法,數據分佈均衡,並行度高。
    容災域的隔離,可以實現各種負載的副本放置規則,例如跨機房、機架感知等。
    可以支持上千個存儲節點的規模,支持TB到PB級的數據。


  • 高可用性
    副本數能夠靈活控制。
    支持故障域分隔,數據強一致性。
    多種故障場景自動進行修復自愈。
    沒有單點故障,自動管理。



  • 高可擴展性
    去中心化。
    擴展靈活。
    隨着節點增長而線性增加。


  • 支持三種存儲接口:塊存儲、文件存儲、對象存儲
  • 支持自定義接口,支持多種語言驅動

固然了,ceph做爲獨立的系統,能夠部署到裸機上,也能夠部署到kubernetes集羣。
PS:若是用的公有云部署kubernetes,能夠直接使用公有云提供的存儲服務,簡單省事。

ceph介紹完,再來介紹另外一個存儲etcd


###ETCD介紹
Etcd做爲kubernetes的存儲核心,做爲保存 Kubernetes 全部集羣數據的後臺數據庫。etcd 是兼具一致性和高可用性的鍵值數據庫。

etcd架構圖

基於Docker及Kubernetes構建的容器雲平臺

etcd有如下的特色:

  • 簡單:安裝配置簡單,並且提供了HTTP API進行交互,使用也很簡單
  • 安全:支持SSL證書驗證
  • 快速:根據官方提供的benchmark數據,單實例支持每秒2k+讀操做
  • 可靠:採用raft算法,實現分佈式系統數據的可用性和一致性

爲了保證數據的高可用,通常狀況下都使用奇數節點的集羣。

接下來,介紹kubernetes集羣的網絡插件


###Flannel介紹
Flannel: CoreOS 開源的網絡方案,爲 kubernetes 設計,功能是讓集羣中的不一樣節點主機建立的Docker容器都具備全集羣惟一的虛擬IP地址。Flannel的底層通訊協議的可選餘地有不少,好比UDP、VXlan、AWS VPC等等,不一樣協議實現下的網絡通訊效率相差較多,默認爲使用UDP協議,部署和管理簡單。
Flannel的後臺數據也存儲於ETCD中。

Flannel架構圖
基於Docker及Kubernetes構建的容器雲平臺

如過只是搭建kubernetes集羣環境,以上組件就足夠了,下面繼續介紹的組件,主要是基於kubernetes之上的應用,主要用於構建流水線,監控集羣,日誌分析。


###drone介紹
開始以前,先介紹兩個概念:CI和CD

什麼是CI/CD

持續集成(Continous Intergration,CI)是一種軟件開發實踐,即團隊開發成員常常集成它們的工做,一般每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都須要經過自動化的編譯、發佈、自動化迴歸測試來驗證,從而儘快地發現集成錯誤。而這些自動化的操做則由CI軟件進行執行。

持續部署(Continous Delivery,CD)在持續集成的基礎上,將集成後的代碼部署到真實運行環境中(本文指部署到kubernetes集羣)。交付團隊 ->版本控制 ->構建和單元測試 ->自動驗收測試 -> 發佈

什麼是Drone
Drone 是一個基於Docker容器技術的可擴展的持續集成引擎,用於自動化測試、構建、發佈。每一個構建都在一個臨時的Docker容器中執行,使開發人員可以徹底控制其構建環境並保證隔離。開發者只需在項目中包含 .drone.yml文件,將代碼推送到 git 倉庫,Drone就可以自動化的進行編譯、測試、發佈。

流程如圖
基於Docker及Kubernetes構建的容器雲平臺


###prometheus-operator
Prometheus:一個很是優秀的監控工具或者說是監控方案。它提供了數據蒐集、存儲、處理、可視化和告警一套完整的解決方案。做爲kubernetes官方推薦的監控系統,用Prometheus來監控kubernetes集羣的情況和運行在集羣上的應用運行情況。

Prometheus架構圖
基於Docker及Kubernetes構建的容器雲平臺

那Prometheus Operator是作什麼的呢?
Operator是由CoreOS公司開發的,用來擴展 Kubernetes API,特定的應用程序控制器,它用來建立、配置和管理複雜的有狀態應用,如數據庫、緩存和監控系統。
能夠理解爲,Prometheus Operator就是用於管理部署Prometheus到kubernetes的工具,其目的是簡化和自動化對Prometheus組件的維護。

Prometheus Operator架構
基於Docker及Kubernetes構建的容器雲平臺


###EFK介紹
EFK,全稱Elasticsearch Fluentd Kibana ,是kubernetes中比較經常使用的日誌收集方案,也是官方比較推薦的方案。
經過EFK,能夠把集羣的全部日誌收集到Elasticsearch中,而後能夠對日誌作分析。通常用於故障排查,數據分析等。。。

數據流程圖
基於Docker及Kubernetes構建的容器雲平臺


###Dashboard介紹
kubernetes的Dashboard有不少,官方Dashboard,rancher, kuboard, octant, Lens等等,這裏只簡單介紹Lens

Lens 一個開源的管理 Kubernetes 集羣的IDE,支持 MacOS, Windows 和 Linux。經過 Lens,咱們能夠很方便地管理多個 Kubernetes 集羣。

直接上圖,本身體驗,效果更佳。
基於Docker及Kubernetes構建的容器雲平臺

最後GIT/SVN和Ingress-nginx先不介紹,後續實戰再說


###總結
至此,容器雲平臺的全部組件都基本作了個介紹,如今從使用者的角度,簡單梳理流程:

  1. 開發人員向git(gitlab/github/gogs)提交代碼,代碼中必須包含Dockerfile和.drone.yml文件
  2. 將代碼commit到遠程倉庫
  3. 發佈應用時須要填寫服務類型、服務名稱、資源數量、實例個數等信息,肯定後觸發drone自動構建
  4. Drone的CI流水線自動編譯代碼並打包成docker鏡像推送到Harbor鏡像倉庫
  5. Drone的CI流水線中包括了自定義腳本,根據準備好的kubernetes的YAML模板,將其中的變量替換成用戶輸入的選項
  6. 生成應用的kubernetes YAML配置文件
  7. 更新Ingress的配置,根據新部署的應用的名稱,在ingress的配置文件中增長一條路由信息
  8. 更新DNS,向其中插入一條DNS記錄,IP地址是ingress節點的IP地址。
  9. Drone的CI流水線中包括了自定義腳本調用kubernetes的API,部署應用。

PS:整理+排版花了好幾天,我真是太難了%#¥@@~¥!……#……太難了~~~~
下一篇,發實戰水文&……%¥#@!

Tips: 更多好文章,首發公X衆X號「菜鳥運維雜談」!!!

相關文章
相關標籤/搜索