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.node

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

docker架構

Docker組成:docker

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

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

  • 容器如何調度,分發
  • 多臺機器如何協同工做
  • 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內置有不少很是優秀的特性使開發者專一於業務自己,其包含的功能以下:app

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-proxyide

  • 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/
相關文章
相關標籤/搜索