前文 Kubernetes筆記(一):十分鐘部署一套K8s環境 介紹瞭如何快速搭建一個k8s系統。爲了繼續使用k8s來部署咱們的應用,須要先對k8s中的一些基本組件與概念有個瞭解。html
Kubernetes是Google於2014年基於其內部Brog系統開源的一個容器編排管理系統,可以使用聲明式的配置(以yaml文件的形式)自動地執行容器化應用程序的管理,包括部署、伸縮、負載均衡、回滾等。node
kubernetes提供的功能:docker
咱們先來看一張Kubernetes的架構圖json
Kubernetes是一套分佈式系統, 與大多數分佈式系統相似,包含控制節點(master node)與工做節點(worker node)。api
控制節點就是指揮官,負責發號施令的,其上運行一些管理服務來對整個系統進行管理與控制,包括微信
工做節點就是具體幹活的小兵,其上也運行一些服務來執行指揮官分派的任務,包括網絡
另外還有既在master node上也在worker node上運行的網絡通訊組件 kube-flannel。這些服務組件通常運行在kube-system的命名空間中,如圖架構
咱們再來看第二張圖負載均衡
功能組件在上面已經作了介紹。Kubernetes的操做對象主要包括容器組(Pod),服務(Service),副本控制器(replication-controller),及圍繞這些的其它輔助對象ssh
Pod是Kubernetes建立或部署的最小基本單元。一個Pod封裝一個或多個應用容器、存儲資源、一個獨立的網絡IP以及管理控制容器運行方式的策略選項。Pod中的每一個容器共享網絡命名空間(包括IP與端口),Pod內的容器可使用localhost相互通訊。Pod能夠指定一組共享存儲卷Volumes,Pod中全部容器均可以訪問共享的Volumes,Volumes用於數據持久化,防止容器重啓丟失數據。
Kubernetes使用Volume來解決Pod中容器重啓數據丟失的問題,以及Pod中多個容器間數據共享的問題。Kubernetes支持的Volume類型包括:
ReplicationController確保在任什麼時候候都有按配置的Pod副本數在運行。如今推薦使用配置ReplicaSet(下一代ReplicationController)的Deployment來創建副本管理機制。
ReplicaSet是下一代ReplicationController,二者的惟一區別是ReplicaSet支持新的基於集合的選擇器,而ReplicationController僅支持基於相等選擇器的需求。
Deployment爲Pod與ReplicaSet提供了聲明式的定義,描述你想要的目標狀態是什麼,Deployment controller就會幫你將Pod與ReplicaSet的實際狀態改變到你想要的目標狀態。
一個Service能夠看作一組提供相同服務的Pod的對外訪問接口。Kubernetes提供兩種類型的Service:
Label就是一對key/value,能夠附加到各類資源對象上,如Node、Pod、Service等,一個資源對象能夠定義任意數量的Label。能夠經過Label選擇器來選擇具有某個(些)Label的資源。
PersistentVolume(PV) 爲用戶提供了一個存儲抽象,由管理員設置,它是集羣的一部分。就像節點是集羣中的資源同樣,PV也是集羣中的資源。 PV是Volume之類的卷插件,但具備獨立於Pod的生命週期。
PersistentVolumeClaim(PVC)是用戶存儲的請求。它與Pod類似。Pod消耗節點資源,PVC消耗PV資源。Pod能夠請求特定級別的資源(CPU和內存)。PVC能夠請求特定大小和訪問模式的存儲資源(例如,能夠以讀/寫或只讀模式掛載)。
Secret解決了密碼、token、密鑰等敏感數據的存儲問題,Secret的三種類型:
ConfigMap用來保存key/value對的配置數據,這個數據能夠在Pods裏使用,或者被用來爲像controller同樣的系統組件存儲配置數據。ConfigMap能夠方便的處理不含敏感信息的字符串(敏感信息可以使用Secret)。
Namespace相似於Kubernetes中的虛擬集羣,便於不一樣的分組在共享使用整個集羣的資源的同時還能被分別管理。好比咱們若是開發測試共用一個Kubernetes集羣,則能夠將開發環境的服務部署到dev的namespace,測試環境的部署到test的namespace。
爲集羣服務提供外部訪問,包括基於Nginx與Traefik兩個版本,爲服務提供域名綁定訪問與路徑路由功能。也能夠基於Ingress實現服務的灰度發佈。
本文對Kubernetes中涉及的基本組件與概念進行了整理,對其基本構成有了一個大體的理解與印象。下一篇將從一個實踐出發,實現一個基於Gitlab+Jenkins+K8s的CI/CD流程,以對涉及的各個組件進行深刻了解與學習。
相關閱讀:
做者:雨歌
歡迎關注做者微信公衆號:半路雨歌,一塊兒學習成長