1. 初窺kubernetes全貌— kubernetes入門到實戰【入門+進階篇】

1. kubernetes簡介

1.1 docker容器技術

Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries.Build once, Run anywhwere.

Docker提供了一種將應用程序安全,隔離運行的一種方式,能夠將應用程序依賴和庫文件打包在一個容器中,後續再任何地方運行起來即可,其包含了應用程序所依賴相關環境,一次構建,任意運行(build once,run anywhere)

docker架構

Docker組成:

  • Docker Daemon 容器管理組件,守護進程,負載容器,鏡像,存儲,網絡等管理
  • Docker Client 容器客戶端,負責和Docker Daemon交互,完成容器生命週期管理
  • Docker Registry 容器鏡像倉庫,負責存儲,分發,打包
  • Docker Object 容器對象,主要包含container和images

容器給應用程序開發環境帶來很大的便利,從根本上解決了容器的環境依賴,打包等問題,然而,Docker帶來的容器打包的便利,同時也帶來了以下的挑戰:

  • 容器如何調度,分發
  • 多臺機器如何協同工作
  • Docker主機故障時應用如何恢復
  • 如何保障應用高可用,橫向擴展,動態伸縮
    容器挑戰

1.2 kubernetes簡介與功能

Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community.

Kubernetes是google開源的一套微服務,容器化的編排引擎,提供容器話應用的自動化部署,橫向擴展和管理,是google內部容器十多年實戰沉澱的結晶,已戰勝Swarm,Mesos成爲容器編排的行業標準。

三大容器編排引擎:

  • Swarm Docker原生提供的容器化編排引擎,隨着docker支持kubernetes逐漸廢棄
  • Mesos 結合Marathon提供容器調度編排的能力,還能提供其他framwork的調度
  • Kubernetes 已成爲容器編排引擎的唯一標準,越來越多程序支持kubernetes。

kuberntes內置有很多非常優秀的特性使開發者專注於業務本身,其包含的功能如下:

1. 初窺kubernetes全貌— kubernetes入門到實戰【入門+進階篇】

  • Service discovery and load balancing,服務發現和負載均衡,通過DNS實現內部解析,service實現負載均衡
  • Storage orchestration,存儲編排,通過plungin的形式支持多種存儲,如本地,nfs,ceph,公有云快存儲等
  • Automated rollouts and rollbacks,自動發佈與回滾,通過匹配當前狀態與目標狀態一致,更新失敗時可回滾
  • Automatic bin packing,自動資源調度,可以設置pod調度的所需(requests)資源和限制資源(limits)
  • Self-healing,內置的健康檢查策略,自動發現和處理集羣內的異常,更換,需重啓的pod節點
  • Secret and configuration management,密鑰和配置管理,對於敏感信息如密碼,賬號的那個通過secret存儲,應用的配置文件通過configmap存儲,避免將配置文件固定在鏡像中,增加容器編排的靈活性
  • Batch execution,批處理執行,通過job和cronjob提供單次批處理任務和循環計劃任務功能的實現
  • Horizontal scaling,橫向擴展功能,包含有HPA和AS,即應用的基於CPU利用率的彈性伸縮和基於平臺級的彈性伸縮,如自動增加node和刪除nodes節點。

1.3 kubernetes架構解析

kubernetes組件

kubernetes包含兩種角色:master節點和node節點,master節點是集羣的控制管理節點,作爲整個k8s集羣的大腦。

  • 負責集羣所有接入請求(kube-apiserver),在整個集羣的入口;
  • 集羣資源調度(kube-controller-scheduler),通過watch監視pod的創建,負責將pod調度到合適的node節點;
  • 集羣狀態的一致性(kube-controller-manager),通過多種控制器確保集羣的一致性,包含有Node Controller,Replication Controller,Endpoints Controller等;
  • 元數據信息存儲(etcd),數據持久存儲化,存儲集羣中包括node,pod,rc,service等數據;

node節點是實際的工作節點,負責集羣負載的實際運行,即pod運行的載體,其通常包含三個組件:Container Runtime,kubelet和kube-proxy

  • Container Runtime是容器運行時,負責實現container生命週期管理,如docker,containerd,rktlet;
  • kubelet負責鏡像和pod的管理,
  • kube-proxy是service服務實現的抽象,負責維護和轉發pod的路由,實現集羣內部和外部網絡的訪問。

其他組件還包括:

  • cloud-controller-manager,用於公有云的接入實現,提供節點管理(node),路由管理,服務管理(LoadBalancer和Ingress),存儲管理(Volume,如雲盤,NAS接入),需要由公有云廠商實現具體的細節,kubernetes提供實現接口的接入,如騰訊雲目前提供CVM的node管理,節點的彈性伸縮(AS),負載均衡的接入(CLB),存儲的管理(CBS和CFS)等產品的集成;
  • DNS組件由kube-dns或coredns實現集羣內的名稱解析;
  • kubernetes-dashboard用於圖形界面管理;
  • kubectl命令行工具進行API交互;
  • 服務外部接入,通過ingress實現七層接入,由多種controller控制器組成
    • traefik
    • nginx ingress controller
    • haproxy ingress controller
    • 公有云廠商ingress controller
  • 監控系統用於採集node和pod的監控數據
    • metric-server 核心指標監控
    • prometheus 自定義指標監控,提供豐富功能
    • heapster+influxdb+grafana 舊核心指標監控方案,現已廢棄
  • 日誌採集系統,用於收集容器的業務數據,實現日誌的採集,存儲和展示,由EFK實現
    • Fluentd 日誌採集
    • ElasticSearch 日誌存儲+檢索
    • Kiabana 數據展示

1.4 kubernetes生態

https://landscape.cncf.io/

1.5 kubernetes高可用架構

kubernetes高可用集羣通常由3或5個節點組成高可用集羣,需要保障各個節點的高可用性

  • etcd 內置集羣機制,保障數據持久存儲
  • kube-apiserver 無狀態api服務,有負載均衡調度器做負載分發,如haproxy或nginx
  • kube-scheduler 內置選舉機制,保障調度器高可用,確保同個時刻一個leader節點工作,其他處於阻塞,防止腦裂
  • kube-controller-manager 內置的選舉機制保障控制器高可用,機制和kube-scheduler一致。
    1. 初窺kubernetes全貌— kubernetes入門到實戰【入門+進階篇】

參考文檔

  1. kubernetes功能介紹,https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

  2. kubernetes組件介紹https://kubernetes.io/docs/concepts/overview/components/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章