一、探针介绍
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探针机制的引入也为容器管理和监控提供了更好的手段。