3个版本
0.1.2 | 2023年7月10日 |
---|---|
0.1.1 | 2023年6月12日 |
0.1.0 | 2023年6月7日 |
56 在 #virtualization
每月25 次下载
78KB
802 行
Proa用于Kubernetes边车管理
受https://github.com/redboxllc/scuttle、https://github.com/joho/godotenv、https://github.com/kubernetes/enhancements/issues/753等启发。该程序旨在成为Pod中包含边车容器的“主要”容器的入口点。Proa是主容器中主进程的包装器。它在启动主程序之前等待边车准备好,并在主进程退出时关闭边车,以便整个Pod可以优雅地退出,就像Job的情况一样。
简要来说,它做了以下几件事
- 监视其Pod的规范和状态。
- 等待所有容器(除了它自己的)都准备好。
- 启动主(包装的)进程并等待其退出。
- 执行一些关闭操作,如击中本地主机的HTTP端点或发送类似
pkill
的信号。 - 等待边车退出。
如果在关闭期间遇到错误,它会记录每个错误,但会以与包装进程相同的退出代码退出。
要求
- 边车需要就绪探针。
- 服务帐户需要权限来读取和监视其自身的Pod。
用法
如果您愿意,只需复制 job.yaml 并对其进行修改以供您使用。作业有一个边车,由Python脚本模拟,必须在主进程开始之前就绪。我们通过在启动Python HTTP服务器之前休眠30秒来模拟一个缓慢启动的边车。Proa使用Kubernetes关于边车容器就绪状态的知识。这意味着每个边车都必须提供 readinessProbe
,并且Pod的 serviceAccount
需要权限来读取和监视其运行的Pod。
或者,如果您愿意,按照以下步骤进行
- 构建一个包含您的主应用程序和
proa
可执行文件的容器镜像。最简单的方法可能是使用多阶段Dockerfile来编译proa
并将其复制到最终镜像中。请参阅Dockerfile 以获取示例。 - 为您的作业创建一个
ServiceAccount
。 - 创建一个
Role
和RoleBinding
,给服务账户授权,使其能够在自己的命名空间中get
、watch
和list
pods
。 - 修改 Job 的
spec.template.spec.serviceAccountName
,使其指向该服务账户。 - 修改 Job 并确保每个侧载容器的
spec.template.spec.containers
条目都有一个readinessProbe
。(主容器是否有 readiness probe 并不重要;proa 会忽略它。) - 更改主容器的入口点(
command
和/或args
),使其调用 proa。- 传递标志来告诉 proa 如何关闭您的侧载。这通常将是
--shutdown-http-get=URL
或--shutdown-http-post=URL
。这些标志可以重复多次。 - 传递分隔符字符串
--
,后跟主程序及其所有参数的路径。
- 传递标志来告诉 proa 如何关闭您的侧载。这通常将是
- 可选地为主容器添加一个
RUST_LOG
环境变量来控制 proa 的日志详细程度。
终止
在需要关闭时,proa 可以通过发送 SIGTERM 来结束您的侧载进程,但这可能不是您想要的。大多数接收到 SIGTERM 的进程将以状态 143 或其他非零值退出。Kubernetes 将将其解释为容器故障,并尝试重启或重新创建 Pod 以再次尝试。
如果您确定想使用此功能,请使用功能 kill
编译程序,并确保您的 Pod 满足以下要求
- 需要
shareProcessNamespace
以使 proa 能够停止侧载,并且- 主容器需要以 UID 0 运行(不推荐)
- 所有容器需要运行相同的 UID。
- 不要使用
hostPID
,否则在尝试杀死节点上的每个进程时,会导致混乱。
名称
这是一个管理侧载的程序,但侧载是一个摩托车比喻,而 Kubernetes 是关于航海梗的。一个 proa 是一种带有外舷板的帆船,有点像摩托车上的侧载。
开发
要求
- 使用
kind create cluster
在本地 Docker 中启动一个微型的 Kubernetes 集群。 - 使用
skaffold dev
启动编译-构建-部署循环。
每次保存文件时,skaffold 都会重新构建和重新部署,然后显示 Pod 中的容器输出。
赞助商
此项目由 IronCore Labs 赞助,IronCore Labs 是云应用程序数据隐私和安全解决方案的制造商,包括用于多租户 SaaS 应用程序的 SaaS Shield 和用于在 Elasticsearch 和 OpenSearch 上进行数据使用加密的 Cloaked Search。
依赖关系
~71MB
~1M SLoC