网站存在风险什么意思,电子商务网站策划书,集团有限公司,兴化网站网站建设一、探针原理 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序#xff0c;并将请求#xff08;request#xff09;重新路由到其他可用系统#xff0c;恢复损坏的组件。健康检查是应对该挑战的一种可靠方法。使用 Kubernetes#xff0c;可以通过探针配置运…一、探针原理 分布式系统和微服务体系结构的挑战之一是自动检测不正常的应用程序并将请求request重新路由到其他可用系统恢复损坏的组件。健康检查是应对该挑战的一种可靠方法。使用 Kubernetes可以通过探针配置运行状况检查以确定每个 Pod 的状态。
二、探针类型 liveness探针影响的是单个容器如果检查失败将杀死容器根据pod的restartPolicy来操作。
readiness探针影响的是整个pod即如果pod中有多个容器只要有一个容器的readiness探针诊断失败那么整个pod都会处于unready状态。
startup探针指示容器中的应用是否已经启动。如果提供了启动探针(startup probe)则禁用所有其他探针直到它成功为止。如果启动探针失败kubelet 将杀死容器容器服从其重启策略进行重启。如果容器没有提供启动探针则默认状态为成功Success
三、探针参数 initialDelaySeconds容器启动后第一次执行探测是需要等待多少秒。 periodSeconds执行探测的频率。默认是10秒最小1秒。 timeoutSeconds探测超时时间。默认1秒最小1秒。 successThreshold探测失败后最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。 failureThreshold探测成功后最少连续探测失败多少次才被认定为失败。默认是3。最小值是1
四、探测结果 SuccessContainer通过了检查。 FailureContainer未通过检查。 Unknown未能执行检查因此不采取任何措施。
五、探测运行原理 liveness probe存活探针 用于判断容器是否存活即Pod是否为running状态如果LivenessProbe探针探测到容器不健康则kubelet将kill掉容器并根据容器的重启策略是否重启。 如果一个容器不包含LivenessProbe探针则Kubelet认为容器的LivenessProbe探针的返回值永远成功。
有时应用程序可能因为某些原因后端服务故障等导致暂时无法对外提供服务但应用软件没有终止导致K8S无法隔离有故障的pod调用者可能会访问到有故障的pod导致业务不稳定。 K8S提供livenessProbe来检测应用程序是否正常运行并且对相应状况进行相应的补救措施。
readiness probe就绪探针 用于判断容器是否启动完成即容器的Ready是否为True可以接收请求如果ReadinessProbe探测失败
若容器的Ready将为False控制器将此Pod的Endpoint从对应的service的Endpoint列表中移除从此不再将任何请求调度此Pod上直到下次探测成功。
通过使用Readiness探针Kubernetes能够等待应用程序完全启动然后才允许服务将流量发送到新副本。
关于 Readiness 探针有一点很重要它会在容器的整个生命周期中运行。这意味着 Readiness 探针不仅会在启动时运行而且还会在 Pod 运行期间反复运行。这是为了处理应用程序暂时不可用的情况比如加载大量数据、等待外部连接时。在这种情况下我们不一定要杀死应用程序可以等待它恢复。Readiness 探针可用于检测这种情况并在 Pod 再次通过 Readiness 检查后将流量发送到这些 Pod。
Startup probe启动探针 startup 探针与 Readiness 探针类似但它仅在启动时执行能针对启动缓慢的容器或在初始化过程中有不可预测行为的应用程序进行优化。借助 Readiness 探针我们可以配置 initialDelaySeconds 来确定 Readiness 探测在准备就绪前要等待多长时间。
六、探测方式 exec通过执行shell命令的方式判断退出状态码是否是0针对复杂检测或无HTTP接口的服务命令返回值为0则表示容器健康。
tcpSocket通过容器的IP和Port执行TCP检查kubelet尝试打开容器上的某个端口如果能够建立TCP连接则表明容器健康。
httpGet通过发送http请求检查服务是否正常每进行一次HTTP健康检查都会curl访问一次指定的URL返回200-399状态码则表明容器健康否则认为容器运转不正常。
HTTP kubelet 将 HTTP GET 请求发送到 endpoint并检查 2xx 或 3xx 响应。我们可以重复使用现有的 HTTP endpoint 或设置轻量级 HTTP 服务器以进行探测例如具有 /healthz endpoint 的 Express server。HTTP 探针包含其他额外参数 host要连接的主机名默认值pod 的 IP。 schemeHTTP默认或 HTTPS。 pathHTTP/S 服务器上的路径 。 httpHeaders自定义标头如果需要标头用于身份验证、CORS 设置等 。 port访问服务器的端口名称或端口号。
apiVersion: v1
kind: Pod
metadata:name: pod-liveness-httpgetnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports:- name: nginx-portcontainerPort: 80livenessProbe:httpGet: # 其实就是访问http://127.0.0.1:80/hello scheme: HTTP #支持的协议http或者httpsport: 80 #端口号path: /hello #URI地址TCP 如果仅需要检查是否可以建立 TCP 连接则可以指定 TCP 探针。如果建立 TCP 连接则将 Pod 标记为运行状况良好。对于不适合使用 HTTP 探针的 gRPC 或 FTP 服务器TCP 探针可能会有用。
apiVersion: v1
kind: Pod
metadata:name: pod-liveness-tcpsocketnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:tcpSocket:port: 8080 # 尝试访问8080端口Command 可以将探针配置为运行 shell 命令。如果命令返回的退出代码为 0则检查通过否则 Pod 将被标记为不健康。如果不希望公开 HTTP 服务器与端口或者希望通过命令检查初始化步骤例如检查是否已创建配置文件、运行 CLI 命令这种类型的探针会很有用
apiVersion: v1
kind: Pod
metadata:name: pod-liveness-execnamespace: dev
spec:containers:- name: nginximage: nginx:1.17.1ports: - name: nginx-portcontainerPort: 80livenessProbe:exec:command: [/bin/cat,/tmp/hello.txt] # 执行一个查看文件的命令