k8s 多租戶 k8s 基礎介紹

2021-10-13 21:55:34 字數 3153 閱讀 3373

備註:

1)每乙個pod裡執行著乙個特殊的容器---pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume(邏輯卷)掛載卷。因此他們之間的通訊和資料交換更為高效。

2)k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器(container),k8s為每乙個pod提供乙個唯一的ip位址。乙個pod中的多個容器共享此ip位址。

3)pod執行在乙個節點(node)的環境中,通常乙個節點上可以執行幾百個pod

4)並不是每乙個pod和它裡面執行的容器都能夠對映到乙個service上,只有那些提供服務的一組pod才會被對映到乙個service上。

5)pod有兩中型別:

靜態的pod:不存放在etcd儲存中,存放在某個具體的node上的具體檔案中,並且只在此node中啟動執行

預設情況下,當pod裡的某個容器停止了,k8s會自動檢測到這個問題並且重新啟動這個pod(重啟pod裡的所有容器),如果pod所在的node宕機了,則會將這個node上的所有pod重新排程少其他節點上。

6)pod可以對器能使用的伺服器上的計算資源進行配額,在1.5.2版本中只能對cpu和記憶體進行限額,其中cpu和記憶體的配額都是乙個絕對值。

cpu配額的單位是m,通常乙個容器的cpu配額定義為100~300m,即占用0.1~0.3個cpu。

記憶體的單位是記憶體位元組數。

在k8s中,乙個計算資源進行配額限定需要設定一下兩個引數

requests:該資源最小申請量,系統必須滿足要求

limits:該資源最大允許使用的量,不能被突破,當試圖超過這個量時,會被k8s乾掉並重啟。

yaml檔案中配額的例項:

3.label標籤:建立service和pod之間的關聯關係

1)k8s為mysql的pod貼上了name=mysql標籤,然後給相應的service定義標籤選擇器(label selector)

2)mysql service 的標籤選擇器的選擇條件是name=mysql 意為該service要作用於所有包含name=mysql標籤的pod上。這樣就解決了service與pod的關聯關係,或者是基於集合的判斷(in 和 notin)

3)label selector在k8s中重要的使用場景:

a.kube-controller程序通過資源物件rc上定義的label selector來篩選要監控的pod副本的數量,從而實現pod副本的數量始終符合預期設定的全自動控制流程

b.kube-proxy程序通過service的label selector來選擇對應的pod,自動建立起每個service到對應的pod的請求**路由表,從而實現servcice的智慧型負載均衡機制。

c.通過對某些node定義特定的label,並且在pod定義檔案中使用nodeselector這種標籤排程策略,kube-scheduler程序可以實現pod定向排程的特性

4.集群管理方面

a.組成:master節點和一群node節點

master節點:

1.master指的是集群控制節點,每乙個k8s集群都有乙個master節點來負責集群中管理和控制,所有執行命令都是master節點上執行的。通常master會占用一台伺服器或者虛擬機器。

kube-apiserver:提供http reset藉口的關鍵服務程序,是k8s裡所有資源增刪改查操作的唯一入口,也是集群控制的入口程序

kube-controller-manager:所有資源物件的自動化控制中心,-------資源的大管家

kube-scheduler: 負責資源排程(pod排程)的程序,----------公司排程室

作用:實現整個集群的資源排程,pod排程,彈性伸展,安全控制,系統監控,和糾錯等管理功能,並且都是全自動完成

補充:master節點上還啟動乙個etcd server程序,因為k8s裡的所有的資源物件的資料全部是儲存在etcd(非關聯式資料庫)中的。

node節點:

1.node節點可以是物理機也可以是虛擬機器,node節點是k8s集群中的工作負載節點,每乙個node都會被master分配一些工作負載(docker 容器),當某個node宕機時,其上的工作負載會被master自動轉移到其他節點上去。在node上k8s管理的最小執行單元是pod

node上執行關鍵程序:

kubelet:負責pod對應的容器的建立,啟停等任務,同時與master節點密切協作,實現集群管理的基本功能

kube-proxy:實現kubernetes service(kube-apiserver)的通訊與負載均衡機制的重要元件

docker: docker 引擎,負責本機的容器建立和管理工作

作用:負責pod的建立,啟動,監控,重啟,銷毀,以及實現軟體模式的負載均衡器

補充:node節點可以在執行期間動態新增到k8s的集群中。預設情況下,kubelet會向master註冊自己,一旦node被納入集群管理範疇,kubelet會定時向master匯報自己的相關作業系統資訊和有哪些pod在執行,這樣master才能知道每個node的資源使用情況和實現高效均衡的資源排程策略。一旦master沒有收到node上報資訊,會判定該node已經不在了,會自動建立node。

5.擴容的處理

k8s集群中只需要為擴容service關聯的pod建立乙個replication controller(rc)檔案

在乙個rc檔案中包含3個關鍵的資訊:

目標pod的定義目標pod需要執行的副本數量(replicas)要監控的目標pod的標籤(label)

可以動態縮放實現rc的副本數量:

kubectl scale rc pod_name --replicas=num

rc set 的一些特徵和作用:

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

k8s元件介紹

master 管理節點 api server 供kubernetes api介面,主要處理 rest操作以及更新etcd中的物件。所有資源增刪改查的唯一入口。scheduler 繫結pod到node上,資源排程。controller manager 所有其他群集級別的功能,目前由控制器manager...

K8S基礎概念

node作為集群中的工作節點,執行真正的應用程式,在node上kubernetes管理的最小執行單元是pod。node上執行著kubernetes的kubelet kube proxy服務程序,這些服務程序負責pod的建立 啟動 監控 重啟 銷毀 以及實現軟體模式的負載均衡。node包含的資訊 no...