一、探針介紹
Kubernetes探針在容器技術中扮演着非常重要的角色。探針是一種檢查容器應用程序狀態的機制,它是Kubernetes用於確保應用程序健康的一部分。探針分為兩種類型:Liveness探針和Readiness探針。
1. Liveness探針
Liveness探針用於確定容器是否處於活動狀態。當Liveness探針發現容器狀態不正常時,容器將被自動重啟。例如,在一個Web服務器容器中,Liveness探針可以將負責處理網絡請求的進程作為探測目標。一旦Liveness探針檢測到該進程不再響應請求,它會將容器標記為失敗狀態,並啟動容器的自動重新啟動。
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
timeoutSeconds: 1
2. Readiness探針
Readiness探針用於確定容器是否準備好接收流量。當容器準備好接收新的請求時,Kubernetes會將流量路由到該容器中。如果Readiness探針因某種原因失敗,Kubernetes會將新的流量路由到其他容器。這樣可以保證流量始終發送到可用的容器中。
apiVersion: v1
kind: Pod
metadata:
name: readiness-pod
spec:
containers:
- name: readiness
image: k8s.gcr.io/readiness
args:
- /server
readinessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
timeoutSeconds: 1
二、Kubernetes探針台
Kubernetes探針台(Probe Manager)是一個檢查容器狀態的監視器。探針台負責檢查探針,並根據探針結果來管理容器狀態。當探針檢測到容器狀態異常時,探針台會啟動自動重啟或重新調度容器。Kubernetes探針台內置探針的類型和實現機制
1. Liveness探針類型
Kubernetes內置了多種Liveness探針類型,包括Exec探針和HTTP Request探針。這些探針類型可以根據容器類型、應用程序類型和需求來進行選擇。例如,在一個單節點容器集群中,Exec探針可能是最好的選擇。但是,如果應用程序需要較高的可用性,則HTTP請求探針可能是更好的選擇。
Exec探針
Exec探針用於直接執行命令,以驗證容器是否處於正常狀態。以下代碼簡要演示了如何在容器中執行一個簡單的命令:
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 5
timeoutSeconds: 1
HTTP Request探針
HTTP Request探針用於通過HTTP檢查容器狀態。以下代碼簡要展示了如何配置HTTP Request Probe探針:
apiVersion: v1
kind: Pod
metadata:
name: liveness-pod
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
2. Readiness探針類型
Kubernetes內置了多種Readiness探針類型,包括TCP Socket探針和HTTP Request探針。這些探針類型可以根據容器類型、應用程序類型和需求來進行選擇。例如,在一個需要保證高擴展性的Web應用程序中,HTTP請求探針可能是更好的選擇。但是,如果應用程序包含一個與互聯網緊密相關的服務,TCP Socket探針可能是更好的選擇。
TCP Socket探針
TCP Socket探針用於通過TCP檢查容器是否處於正常狀態。以下代碼簡要展示了如何在容器中配置TCP Socket Probe探針:
apiVersion: v1
kind: Pod
metadata:
name: readiness-pod
spec:
containers:
- name: readiness
image: k8s.gcr.io/readiness
args:
- /server
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
HTTP Request探針
HTTP Request探針用於通過HTTP檢查容器狀態。以下代碼簡要展示了如何在容器中配置HTTP Request探針:
apiVersion: v1
kind: Pod
metadata:
name: readiness-pod
spec:
containers:
- name: readiness
image: k8s.gcr.io/readiness
args:
- /server
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
timeoutSeconds: 1
三、GKS100探針
GKS100探針是Kubernetes提供的一種全新的探針機制。GKS100探針類型包括Console探針和Script探針。探針主要用於在Pod運行期間,監控、記錄Pod內部的重要狀態等信息,並通過探針台上報給Kubernetes系統,幫助Kubernetes系統管理Pod。
1. Console探針類型
Console探針類型主要通過收集並輸出Pod內部重要狀態信息的方式,進行Pod狀態的監控和記錄。以下為如何使用Console探針類型的示例代碼:
apiVersion: v1
kind: Pod
metadata:
name: console-pod
spec:
containers:
- name: console
image: k8s.gcr.io/console
args:
- /server
livenessProbe:
console:
command:
- sh
- "-c"
- cat /tmp/console.log
initialDelaySeconds: 5
timeoutSeconds: 1
2. Script探針類型
Script探針類型主要通過以腳本的形式來完成服務生命周期的管理。Script探針類型擁有更加靈活的定製性和可擴展性,適用於更為複雜的部署場景。以下為如何使用Script探針類型的示例代碼:
apiVersion: v1
kind: Pod
metadata:
name: script-pod
spec:
containers:
- name: script
image: k8s.gcr.io/script
args:
- /server
livenessProbe:
script:
command:
- sh
- "-c"
- echo OK
initialDelaySeconds: 5
timeoutSeconds: 1
結語
探針是Kubernetes容器編排技術中非常重要的一個組成部分。Liveness探針和Readiness探針的使用可以大大提高容器應用程序的可用性和可靠性。同時,Kubernetes探針台和GKS100探針機制的引入也為容器管理和監控提供了更好的手段。
原創文章,作者:JEEHF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/331844.html