

Kubernetes 设计模式笔记 —— 生命周期管理
source link: https://rollingstarky.github.io/2022/11/29/kubernetes-patterns-reading-notes-managing-lifecycle/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Kubernetes 设计模式笔记 —— 生命周期管理
由云原生平台管理的容器化应用,并不能控制其自身的生命周期。它们必须监听由管理平台发出的事件,再对生命周期做出相对应的变更。所谓的生命周期管理,即代表应用该如何读取和响应这些由管理平台发出的生命周期事件。
鉴于某些管理策略或者外部环境因素,在任意时间点,管理平台都有可能需要启动或者终止容器中的应用。容器化应用可以决定平台发出的哪些事件是重要的,应该以怎样的行为去响应。这实际上是一个平台用来同应用进行沟通、向应用发送命令的 API,应用可以选择接受或者忽略。
仅仅使用进程模型来启动和终止应用通常是不够的,现实世界中的应用往往需要更细粒度的交互控制和生命周期管理。有些应用需要 warm up,有些需要一个平滑、干净的关闭流程。因而 Kubernetes 设计了如下几种由平台发出的事件,容器可以选择监听和响应这些事件。
SIGTERM Signal
当 Kubernetes 决定关闭某个容器时,该容器会收到一个 SIGTERM 信号,之后容器会尝试尽快完成关闭流程。对于某些应用来说,干净的快速终止是可行的。但另外一些应用有可能需要完成处理中的请求,释放打开的连接,清理临时文件等。这会耗费更多的时间。
SIGKILL Signal
当某个容器进程在收到 SIGTERM 信号后并没有关闭,接下来它会再收到一个 SIGKILL 信号强制终止进程。默认情况下,Kubernetes 会在发出 SIGTERM 信号 30 秒后再发送 SIGKILL。这个 30 秒的过渡时间可以通过 Pod 的 .spec.terminationGracePeriodSeconds
字段进行配置。
Poststart Hook
仅仅使用进程信号来管理生命周期有一定程度的限制。因而 Kubernetes 又提供了 postStart
和 postStop
。postStart
示例:
apiVersion: v1
kind: Pod
metadata:
name: post-start-hook
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
lifecycle:
postStart:
exec:
command:
- sh
- -c
- sleep 30 && echo "Wake up!" > /tmp/postStart_done
postStart
指定的命令会在容器创建后执行,与容器的基础进程异步。postStart
是一种阻塞请求,其 handler 完成之前,容器会一直处于 Waiting 状态,同时 Pod 处于 Pending 状态。postStart
的这种特性可以用来延迟容器的启动,为容器的主进程的初始化争取时间。
另一个 postStart
的使用场景就是在 Pod 不满足特定的前提条件时,阻止容器完成启动。当 postStart
命令返回了一个非 0 的返回值,主进程会被 Kubernetes 杀掉。
类似于 Health Probe,postStart 和 preStop 有如下两种 handler 类型:
- exec:在容器中直接运行一个命令
- httpGet:向容器开放的某个端口发送 HTTP GET 请求
对于 postStart 执行的逻辑,需要注意以下几点:
- postStart 与容器进程是并行的关系,因而这个 hook 有可能在容器启动前执行
- postStart 有至少执行一次的目标,需要考虑重复执行的情况
- 对于失败的 HTTP 请求,postStart 不会重复尝试
preStop
preStop
hook 是一个在容器终止前发送给容器的阻塞请求。
apiVersion: v1
kind: Pod
metadata:
name: pre-stop-hook
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
lifecycle:
preStop:
httpGet:
port: 8080
path: /shutdown
虽然 preStop
是阻塞的,但若它挂起或者返回一个非成功的结果,并不会阻止进程被杀掉、容器被删除。preStop
只是为了能够平滑地关闭应用,是除 SIGTERM 之外的另一种方便的选择。
云原生平台能提供的最大的好处之一,就是在不够可靠的云计算基础设施上,可靠地运行和扩展应用。这类平台设计了一系列应用必须遵守的协议和约束。处理和响应协议中的事件,能够确保应用平稳地启动和关闭,对接受服务的客户端只有最小的影响。应用的生命周期不再由个人所控制,而是完全由平台自动化管理。
Recommend
-
14
精彩回顾 |【第41期CXO直播间】Synopsys 软件开发全生命周期管理战略安全说精彩回顾 |【第41期CXO直播间】Synopsys 软件开发全生命周期管理战略安全说 2020-12-17 15:25:32 来源:CIO时代网 VUCA...
-
9
神策数据孙文亮:客户全生命周期管理从方法到实践全解析 神策小秘书...
-
13
一、前言 在 Elasticsearch 的日常中,有很多如存储 系统日志 、 行为数据...
-
7
K8s 中生命周期管理设计模式由云原生平台管理的容器化应用对其生命周期没有控制权,要想成为优秀的云原生化 ,它们必须监听管理平台发出的事件,并相应地调整其生命周期。托管生命周期模式描述了应用程序如何能够并且应该对这些生命周期事件做出反应。 ...
-
9
API 生命周期管理是一个术语,是指需要管理的 API 整个生命周期中从创建到报废的所有步骤。API数量正在激增当中,因为它们是数字业务的关键。公司面临的主要挑战是通过以下方式来应对日益增长的新API需求。 迅速创建API 通过管理目...
-
13
本文预计阅读时间 13 分钟 索引生命周期管理将会是es维护管理中重要的一环,生产中已经有一个集群用的 7.x 版本,一直也没有使用自带的生命周期管理工具,今天就来研究一下,现在先通过简单的例子来理解这个功能以及用法。 1,...
-
5
elasticsearch 学习系列目录——更新ing二、问题描述GET _cat/tasks?v action task_id parent...
-
10
云简俞洋:企业全生命周期管理,关键是做好“AI” 企业作为一个组织,具有生命周期,就像人出生、成长、衰老、死亡的过程一样。全球最有影响力的管理学家之一,企业生命...
-
6
Kubernetes in Action 笔记 —— 管理 Pod 的生命周期 发表于...
-
4
Sep 21, 2020 · cloudKubernetes中Sidecar生命周期管理在多个容器的 Pod 中,通常业务容器需要依赖 sidecar。启...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK