Kubernetes筆記(二):瞭解k8s的基本組件與概念

前文 Kubernetes筆記(一):十分鐘部署一套K8s環境 介紹瞭如何快速搭建一個k8s系統。爲了繼續使用k8s來部署咱們的應用,須要先對k8s中的一些基本組件與概念有個瞭解。html

Kubernetes是什麼

Kubernetes是Google於2014年基於其內部Brog系統開源的一個容器編排管理系統,可以使用聲明式的配置(以yaml文件的形式)自動地執行容器化應用程序的管理,包括部署、伸縮、負載均衡、回滾等。node

kubernetes提供的功能:docker

  • 自動發佈與伸縮:能夠經過聲明式的配置文件定義想要部署的容器,Kubernetes將自動進行容器的部署,達到指望的結果;經過指定容器副本數,或者設置根據資源負載狀況(如CPU、內存使用率),自動對容器組進行快速的伸縮——增大或縮小容器數量
  • 滾動升級與灰度發佈:採用逐步替換的策略實現滾動升級,使用Kubernetes也能夠很輕易地管理系統的灰度發佈
  • 服務發現與負載均衡:Kubernetes經過DNS名稱或IP地址暴露容器的訪問方式,而且可在同一容器組內實現負載分發與均衡
  • 存儲編排:Kubernetes能夠自動掛載指定的存儲系統,如local storage/nfs/雲存儲等
  • 故障恢復:Kubernetes自動重啓已經停機的容器,替換不知足健康檢查的容器
  • 密鑰與配置管理:Kubernetes能夠存儲與管理敏感信息,如Docker Registry的登陸憑證,密碼,ssh密鑰等

Kubernetes架構

咱們先來看一張Kubernetes的架構圖json

k8s-arch

Kubernetes是一套分佈式系統, 與大多數分佈式系統相似,包含控制節點(master node)與工做節點(worker node)。api

master node

控制節點就是指揮官,負責發號施令的,其上運行一些管理服務來對整個系統進行管理與控制,包括微信

  • apiserver:做爲整個系統的對外接口,提供一套Restful API供客戶端調用,任何的資源請求/調用操做都是經過kube-apiserver提供的接口進行,如kubectl、kubernetes dashboard等管理工具就是經過apiserver來實現對集羣的管理
  • kube-scheduler:資源調度器,負責將容器組分配到哪些節點上
  • kube-controller-manager:管理控制器,集羣中處理常規任務的後臺線程,包括節點控制器(負責監聽節點停機的事件並做出對應響應)、endpoint-controller(刷新服務與容器組的關聯信息)、replication-controller(維護容器組的副本數爲指定的數值)、Service Account & Token控制器(負責爲新的命名空間建立默認的 Service Account 以及 API Access Token)
  • etcd:數據存儲,存儲集羣全部的配置信息
  • coredns:實現集羣內部經過服務名稱進行容器組訪問的功能

worker node

工做節點就是具體幹活的小兵,其上也運行一些服務來執行指揮官分派的任務,包括網絡

  • kubelet:是工做節點上執行操做的代理程序,負責容器的生命週期管理,按期執行容器健康檢查,並上報容器的運行狀態
  • kube-proxy:是一個具備負載均衡能力的簡單的網絡訪問代理,負責將訪問某個服務的請求分配到工做節點的具體某個容器上(kube-proxy也運行於master node上)
  • Docker Daemon:這個不難理解,全部服務或容器組都要以Docker容器的形式來運行(但Kubernetes其實不侷限於Docker,它支持任何實現了Kubernetes容器引擎接口的容器引擎,如containerd、rktlet)

另外還有既在master node上也在worker node上運行的網絡通訊組件 kube-flannel。這些服務組件通常運行在kube-system的命名空間中,如圖架構

kube-system

Kubernetes基本概念

咱們再來看第二張圖負載均衡

k8s

功能組件在上面已經作了介紹。Kubernetes的操做對象主要包括容器組(Pod),服務(Service),副本控制器(replication-controller),及圍繞這些的其它輔助對象ssh

Pod

Pod是Kubernetes建立或部署的最小基本單元。一個Pod封裝一個或多個應用容器、存儲資源、一個獨立的網絡IP以及管理控制容器運行方式的策略選項。Pod中的每一個容器共享網絡命名空間(包括IP與端口),Pod內的容器可使用localhost相互通訊。Pod能夠指定一組共享存儲卷Volumes,Pod中全部容器均可以訪問共享的Volumes,Volumes用於數據持久化,防止容器重啓丟失數據。

Volume

Kubernetes使用Volume來解決Pod中容器重啓數據丟失的問題,以及Pod中多個容器間數據共享的問題。Kubernetes支持的Volume類型包括:

  • emptyDir:當Pod分配到Node上時,將會建立emptyDir,只要Node上的Pod一直運行,Volume就會一直存在。當Pod(無論任何緣由)從Node上被刪除時,emptyDir也同時會刪除,存儲的數據也將永久刪除,但刪除容器不影響emptyDir
  • hostPath:hostPath容許掛載Node上的文件系統到Pod裏面去。若是Pod須要使用Node上的文件,可使用hostPath
  • nfs: 使用nfs網絡文件系統提供的共享目錄

ReplicationController

ReplicationController確保在任什麼時候候都有按配置的Pod副本數在運行。如今推薦使用配置ReplicaSet(下一代ReplicationController)的Deployment來創建副本管理機制。

ReplicaSet

ReplicaSet是下一代ReplicationController,二者的惟一區別是ReplicaSet支持新的基於集合的選擇器,而ReplicationController僅支持基於相等選擇器的需求。

Deployment

Deployment爲Pod與ReplicaSet提供了聲明式的定義,描述你想要的目標狀態是什麼,Deployment controller就會幫你將Pod與ReplicaSet的實際狀態改變到你想要的目標狀態。

Service

一個Service能夠看作一組提供相同服務的Pod的對外訪問接口。Kubernetes提供兩種類型的Service:

  • NodePort: 集羣外部能夠經過Node IP與Node Port來訪問具體某個Pod
  • ClusterIP:指經過集羣的內部IP暴露服務,服務只可以在集羣內部能夠訪問,這也是默認的 ServiceType

Label

Label就是一對key/value,能夠附加到各類資源對象上,如Node、Pod、Service等,一個資源對象能夠定義任意數量的Label。能夠經過Label選擇器來選擇具有某個(些)Label的資源。

PV & PVC

PersistentVolume(PV) 爲用戶提供了一個存儲抽象,由管理員設置,它是集羣的一部分。就像節點是集羣中的資源同樣,PV也是集羣中的資源。 PV是Volume之類的卷插件,但具備獨立於Pod的生命週期。

PersistentVolumeClaim(PVC)是用戶存儲的請求。它與Pod類似。Pod消耗節點資源,PVC消耗PV資源。Pod能夠請求特定級別的資源(CPU和內存)。PVC能夠請求特定大小和訪問模式的存儲資源(例如,能夠以讀/寫或只讀模式掛載)。

Secret

Secret解決了密碼、token、密鑰等敏感數據的存儲問題,Secret的三種類型:

  • Service Account :用來訪問Kubernetes API,由Kubernetes自動建立,而且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中
  • Opaque :Base64編碼格式的Secret,用來存儲密碼、密鑰等
  • kubernetes.io/dockerconfigjson :用來存儲docker registry的認證信息

ConfigMap

ConfigMap用來保存key/value對的配置數據,這個數據能夠在Pods裏使用,或者被用來爲像controller同樣的系統組件存儲配置數據。ConfigMap能夠方便的處理不含敏感信息的字符串(敏感信息可以使用Secret)。

Namespace

Namespace相似於Kubernetes中的虛擬集羣,便於不一樣的分組在共享使用整個集羣的資源的同時還能被分別管理。好比咱們若是開發測試共用一個Kubernetes集羣,則能夠將開發環境的服務部署到dev的namespace,測試環境的部署到test的namespace。

Ingress

爲集羣服務提供外部訪問,包括基於Nginx與Traefik兩個版本,爲服務提供域名綁定訪問與路徑路由功能。也能夠基於Ingress實現服務的灰度發佈。

總結

本文對Kubernetes中涉及的基本組件與概念進行了整理,對其基本構成有了一個大體的理解與印象。下一篇將從一個實踐出發,實現一個基於Gitlab+Jenkins+K8s的CI/CD流程,以對涉及的各個組件進行深刻了解與學習。


相關閱讀:


做者:雨歌
歡迎關注做者微信公衆號:半路雨歌,一塊兒學習成長

微信公衆號

相關文章
相關標籤/搜索