本文共 4543 字,大约阅读时间需要 15 分钟。
在Kubernetes中,当创建容器资源对象时,可以通过lifecycle来管理容器在运行前和关闭前的各种动作。这种机制允许我们定义容器在启动时和终止时执行特定的任务,帮助实现更高效的资源管理。
lifecycle的核心 Feature 是通过回调函数(_hook)进行动作定义,主要有以下两种回调类型:
以下配置展示了一个Pod,其中包含一个基于Java的Web应用容器,设置了PostStart和PreStop回调函数。PostStart回调用于将sample.war
文件复制到/app
目录中,而PreStop回调则负责在容器即将终止时发送HTTP请求到监控系统,通知警告信息。
containers: - image: sample:v2 name: war lifecycle: postStart: exec: - "cp" - "/sample.war" - "/app" preStop: httpGet: host: monitor.com path: /waring port: 8080 scheme: HTTP
当用户执行删除操作(如删除ReplicationController、Deployment等资源)时,Kubernetes提供默认和非默认的资源删除机制:
docker stop
命令,向容器发送SIGTERM
信号。SIGKILL
信号强制终止进程。preStop
回调函数中定义优雅关闭任务,确保应用程序完成正在处理的请求后再终止。用户可以通过设置--grace-period
选项控制删除操作的优雅退出时间。例如,可以设置kubectl delete --grace-period=30s
以延长等待时间。
此外,在资源删除过程中,若资源对象被设置为gracefulDelete: true
,Kubernetes会尝试继续保持其状态直到覆盖删除或超时。
在Kubernetes的Pod中,容器划分为两类:POD自身的系统容器(Pod Container)和用户定义的应用容器(User Container)。这些用户容器又进一步划分为两种类型:
特点:
例如,在部署Web服务的Pod中,可以通过初始化容器从Git服务器拉取代码、验证运行环境配置是否正确等,确保所有准备工作完成后再启动服务容器。
例如,在分布式系统中,可以利用初始化容器遍历各节点,进行节点健康检查或配置同步操作,为后续的主容器服务节点提供必要信息。
以下是一个基于Kubernetes YAML配置文件的示例:
kind: Deploymentmetadata: name: lykops-deploy-init-container labels: project: lykops app: init-container version: v1 annotations: pod.beta.kubernetes.io/init-containers: - name: apache-web image: web:apache command: ["sh", "/etc/run.sh"] spec: minReadySeconds: 30 replicas: 1 selector: name: lykops-deploy-init-container project: lykops app: init-container version: v1 template: metadata: labels: name: lykops-deploy-init-container project: lykops app: init-container version: v1 spec: containers: - name: apache-web image: web:apache command: ["sh", "/etc/run.sh"] ports: - name: http containerPort: 80
容器资源的健康检查在Kubernetes中至关重要,主要针对以下问题:
livenessProbe
)。readinessProbe
)。这两种探测机制在功能上有所区别,但都能确保Pod的健康管理和负载均衡。
restartPolicy
定义)。initialDelaySeconds
控制)。以下是一个配置示例,展示了如何在Deployment中定义健康检查策略:
apiVersion: v1kind: Deploymentmetadata: name: inessprobe labels: project: lykops app: inessprobe version: v1 spec: replicas: 6 selector: project: lykops app: inessprobe version: v1 minReadySeconds: 120 restartPolicy: Always template: metadata: labels: project: lykops app: inessprobe version: v1 name: inessprobe spec: containers: - name: inessprobe image: web:apache ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80 scheme: HTTP initialDelaySeconds: 180 periodSeconds: 15 timeoutSeconds: 5 livenessProbe: httpGet: path: / port: 80 scheme: HTTP initialDelaySeconds: 180 timeoutSeconds: 5 periodSeconds: 15
根据以上概念,探测方式主要有以下三种:
livenessProbe: exec: command: [ "cat", "/home/laizy/test/hostpath/healthy" ]
livenessProbe: tcpSocket: port: 8080
readinessProbe: httpGet: path: /health port: 80 scheme: HTTP
为了实现灵活的探测策略,livenessProbe和readinessProbe均可配置以下参数:
这些参数为Kubernetes提供了高度的灵活性,可根据实际需求进行调整。
默认仓库地址:Kubernetes中文文档
如果需要进一步了解具体实现,可以根据各参数的配置示例自行实验验证所述内容。
转载地址:http://ioryk.baihongyu.com/