概述
在现实世界中,一些遗留应用程序和框架无法调整。因此,我们希望将其检查策略和应用程序逻辑分离。
一种常见方法是在容器的Dockerfile启动脚本中添加相关的服务依赖性检查逻辑。有关此方法的详细信息,请参阅此Docker文档。另一种方法是使用Kubernetes pod机制本身来添加依赖性检查逻辑。
在开始之前,我们必须了解pod生命周期。
首先,pod包含三种类型的容器:
- 基础设施容器:这是著名的暂停容器。
- Init容器:这是一个初始化容器,通常用于初始化和准备应用程序。只有在等待所有初始化容器完成运行后,应用程序容器才能启动。
- 主容器:这是一个应用程序容器。
Kubernetes的最佳实践通常依赖于初始化容器来检查服务依赖性。我们使用以下WordPress示例来说明如何完成此操作。
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
clusterIP: None
ports:
- name: mysql
port: 3306
selector:
app: mysql
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
ports:
- name: wordpress
port: 80
targetPort: 80
selector:
app: wordpress
type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "true"
livenessProbe:
exec:
command: ["mysqladmin", "ping"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
readinessProbe:
exec:
# Check we can execute queries over TCP (skip-networking is off).
command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"]
initialDelaySeconds: 5
periodSeconds: 2
timeoutSeconds: 1
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:4
ports:
- containerPort: 80
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_PASSWORD
value: ""
initContainers:
- name: init-mysql
image: busybox
command: ['sh', '-c', 'until nslookup mysql; do echo waiting for mysql; sleep 2; done;']
字段 | 说明 |
---|---|
initialDelaySeconds | 容器启动多久后开始第一次探测,显示为delay属性,默认是0 |
timeoutSeconds | 健康检查发送请求后等待响应的超时时间,显示为timeout属性,默认是1s |
periodSeconds | 探测的频率,显示为period属性,默认是10s,最小是1s |
successThreshold | 处于失败状态时,探测操作至少连续多少次成功才被认为是通过检测,显示为success属性,默认值为1 |
failureThreshold | 处于成功状态时,探测操作至少连续多少次失败才被认为是检测不通过,显示为failure属性,默认值为3 |
注意:
- 活动探测:此探测主要用于确定容器是否处于运行状态。例如,它可以检测服务死锁,响应缓慢和其他情况。
- 准备探针:此探针主要用于确定服务是否已正常工作。
- 准备探针不能在init容器中使用。
- 如果pod重新启动,则必须再次运行其所有init容器。
结论
本文讨论了用于检查服务依赖性的常用解决方案,并提供了一个示例来演示如何使用init容器,活动性和就绪性探针以及其他服务运行状况检查和依赖性检查功能。
最后
以上就是傲娇冰棍为你收集整理的k8s独立服务依赖检查逻辑的全部内容,希望文章能够帮你解决k8s独立服务依赖检查逻辑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复