kubernetes集羣-pod與控制器

Pod是可以創建和管理Kubernetes計算的最小可部署單元,一個Pod代表着集羣中運行的一個進程,每個pod都有一個唯一的

ip。一個pod類似一個豌豆莢,包含一個或多個容器(通常是docker),多個容器間共享IPC、Network和UTC namespace。

Pod的生命週期

創建一個pod

kubectl describe pod myapp查看具體的pod的信息

Pod 可以包含多個容器,應用運行在這些容器裏面,同時 Pod 也可以有一個或多個先於應用容器啓動的 Init 容器。

Init 容器與普通的容器非常像,除了如下兩點:

它們總是運行到完成。

Init 容器不支持 Readiness,因爲它們必須在 Pod 就緒之前運行完成。

每個 Init 容器必須運行成功,下一個才能夠運行。

如果 Pod 的 Init 容器失敗,Kubernetes 會不斷地重啓該 Pod,直到 Init 容器成功爲止。然而,如果 Pod 對應的 restartPolicy 值爲 Never,它不會重新啓動。

Init 容器能做什麼?

Init 容器可以包含一些安裝過程中應用容器中不存在的實用工具或個性化代碼。

Init 容器可以安全地運行這些工具,避免這些工具導致應用鏡像的安全性降低。

應用鏡像的創建者和部署者可以各自獨立工作,而沒有必要聯合構建一個單獨的應用鏡像

Init 容器能以不同於Pod內應用容器的文件系統視圖運行。因此,Init容器可具有訪問 Secrets 的權限,而應用容器不能夠訪問。

由於 Init 容器必須在應用容器啓動之前運行完成,因此 Init 容器提供了一種機制來阻塞或延遲應用容器的啓動,直到滿足了一組先決條件。一旦前置條件滿足,Pod內的所有的應用容器會並行啓動。

我們創建一個init

查看

只有初始化成功纔會執行pod

創建一個service讓外部的可以訪問我們的

創建完成後就可以完成解析

read爲1就表明可以對外訪問了,用戶可以訪問到他,然後就開始執行別的

探針 是由 kubelet 對容器執行的定期診斷:

ExecAction:在容器內執行指定命令。如果命令退出時返回碼爲 0 則認爲診斷成功

TCPSocketAction:對指定端口上的容器的 IP 地址進行 TCP 檢查。如果端口打開,則診斷被認爲是成功的

HTTPGetAction:對指定的端口和路徑上的容器的 IP 地址執行 HTTP Get 請求。如果響應的狀態碼大於等於200 且小於 400,則診斷被認爲是成功的。

每次探測都將獲得以下三種結果之一

成功:容器通過了診斷

失敗:容器未通過診斷

未知:診斷失敗,因此不會採取任何行動

探針的狀態

掛起(Pending):Pod 已被Kubernetes系統接受,但有一個或者多個容器讀像尚未創建。等待時間包括調度Pod的時間和通過網絡下載統像的時間,這可能需要花點時間。
運行中(Runming):該Pod已經綁定到了一個節點上,Pod中所有的容器都已被創難。至少有一個容器正在運行,或者正處於啓動或重啓狀態。
成功(Succeeded):Pod中的所有容器都被成功終止,並且不會再重啓。
失敗aied):Pod中的所有容貓都已終止了,並且至少有一個容貓是因爲失敗終止。也就是說,容器以非0狀態退出或者被系統終止。
未知(Unknown):因爲某些原因無法粵得Pod的狀態,通常是因爲與Pod所在主機通信失敗。

常用的探針

livenessProbe:指示容器是否正在運行。如果存活探測失敗,則kubelet會殺死容器,並且容器將受到其重啓集路的影響。如果容器不損供存活探針,則默認狀態爲Success。
readinessProbe:指示容器是否準備好服務請求。如果就緒探測失敗,端點控制器將從與Pod匹配的所有Service的媒點中刪除該Pod的P地址。初始廷遲之前的就緒狀態默認爲Failure。如果容器不提供就緒探針,則默認狀態爲Success。

探針存活檢測

檢測延時、檢測頻率、檢測超時

然後創建探針

如果我們把端口改成8080就會一直重啓,因爲myapp佔用的是80端口

查看restart的狀態分別是0、1、2一直再重啓

就緒檢測

一直未read但是就是沒有就緒查看日誌

因爲找不到test.html文件

這個時候如果我們把文件創建上就會就緒

他會持續檢測,如果我們刪除頁面,發現就緒又變成0爲未完成

重啓策略

PodSpec 中有一個 restartPolicy 字段,可能的值爲 Always、OnFailure 和 Never。默認爲 Always。

Pod 的生命 

一般Pod 不會消失,直到人爲銷燬他們這可能是一個人或控制器

建議創建適當的控制器來創建 Pod,而不是直接自己創建 Pod。因爲單獨的 Pod 在機器故障的情況下沒有辦法自動復原,而控制器卻可以

三種可用的控制器

使用 Job 運行預期會終止的 Pod,例如批量計算。Job 僅適用於重啓策略爲 OnFailure 或 Never 的 Pod。

對預期不會終止的 Pod 使用 ReplicationController、ReplicaSet 和 Deployment ,例如 Web 服務器ReplicationController 僅適用於具有 restartPolicy 爲 Always 的 Pod。

提供特定於機器的系統服務,使用 DaemonSet 爲每臺機器運行一個 Pod 。

控制器

Pod 的分類
自主式 Pod:Pod 退出不會被創建
控制器管理的 Pod:在控制器的生命週期裏,始終要維持 Pod 的副本數目

 

控制器類型
Replication Controller和ReplicaSet
Deployment
DaemonSet
StatefulSet
Job
CronJob
HPA全稱Horizontal Pod Autoscaler

 

Replication Controller和ReplicaSet
ReplicaSet 是下一代的 Replication Controller官方推薦使用ReplicaSet
ReplicaSet 和 Replication Controller 的唯一區別是選擇器的支持ReplicaSet 支持新的基於集合的選擇器需求
ReplicaSet 確保任何時間都有指定數量的 Pod 副本在運行。
雖然 ReplicaSets 可以獨立使用,但今天它主要被Deployments 用作協調 Pod 創建、刪除和更新的機制。
Deployment
Deployment 爲 Pod 和 ReplicaSet 提供了一個申明式的定義方法
典型的應用場景
用來創建Pod和ReplicaSet
滾動更新和回滾
擴容和縮容
暫停與恢復
DaemonSet
DaemonSet 確保全部(或者某些)節點上運行一個 Pod 的副本。當有節點加入集羣時, 也會爲他們新增一個 Pod 。當有節點從集羣移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它創建的所有 Pod。
DaemonSet 的典型用法:
在每個節點上運行集羣存儲 DaemonSet,例如 glusterd、ceph。
在每個節點上運行日誌收集 DaemonSet,例如 fluentd、logstash。
在每個節點上運行監控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等
一個簡單的用法是在所有的節點上都啓動一個 DaemonSet,將被作爲每種類型的 daemon 使用。
一個稍微複雜的用法是單獨對每種 daemon 類型使用多個 DaemonSet,但具有不同的標誌, 並且對不同硬件類型具有不同的內存、CPU 要求。
StatefulSet
StatefulSet 是用來管理有狀態應用的工作負載 API 對象。實例之間有不對等關係,以及實例對外部數據有依賴關係的應用,稱爲“有狀態應用”
StatefulSet 用來管理 Deployment 和擴展一組 Pod,並且能爲這些 Pod 提供*序號和唯一性保證*。
StatefulSets 對於需要滿足以下一個或多個需求的應用程序很有價值:
穩定的、唯一的網絡標識符。
穩定的、持久的存儲。
有序的、優雅的部署和縮放。
有序的、自動的滾動更新。
Job
執行批處理任務,僅執行一次任務,保證任務的一個或多個Pod成功結束
CronJob
Cron Job 創建基於時間調度的 Jobs。
一個 CronJob 對象就像 crontab (cron table) 文件中的一行它用 Cron 格式進行編寫,並週期性地在給定的調度時間執行 Job。
HPA
根據資源利用率自動調整service中Pod數量,實現Pod水平自動縮放

創建一個rs.yml

用來控制pod副本

修改app的label

我們創建一個deploment控制

我們如果將上述replicas改爲4就相當於做了一個拉伸

如果我們上述鏡像改成v2相當於做了滾動更新

這樣他會重新建立四個新的並且刪除原來的

查看更新結果

在做滾動更新的時候首先創建一個rs然後重建原來的pod刪除原來的pod並且斷開原來的rs並且保留

如果rs比較多我們可以刪除

但是pod還是存在的

daemonset

創建一個yml文件

當我們刪除pod的時候他會自動幫我們拉取

vim job.yaml(計算圓周率)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章