繁体   English   中英

kubernetes 如何从现有 pod 创建新 pod

[英]kubernetes how to create new pod from an existing pod

我有以下疑问,假设我有一个具有 n=1 副本的 kubernetes pod A,我希望每 x 分钟它会创建一个类型为“Job”的新 pod B,我可以毫无问题地从 kubectl 创建一个作业 pod ,但是如何让一个 pod 从另一个 pod 实例化?

我可以尝试在父 pod 上使用 kubectl,但我认为这不是最优雅的方式。

In the pod you could use any supported kubernetes client library to call REST API exposed by kubernetes API server to create a pod.

客户端库需要经过认证才能调用kubernetes API。 客户端库可以为此使用服务帐户,并且服务帐户需要具有 RBAC 才能通过调用 kubernetes API 服务器来创建 pod。

kubectl 内部也调用了 REST API 暴露的 kubernetes ZDB974238714CA8DE634A7CE1D08

在我看来,您有两个选择:

  1. 如上一个答案中所建议,使用客户端库。

  2. 使用大使容器模式:大使容器代理与世界的本地连接,您可以在此处阅读有关此模式的更多信息。

这将如何解决您的问题:

您可以在主容器旁边的大使容器中运行kubectl kubectl proxy ,并通过它与 API 服务器进行通信,而不是直接从您的 pod 与 API 服务器通信。

Instead of talking to the API server directly, the app in the main container can connect to the ambassador through HTTP (instead of HTTPS) and let the ambassador proxy handle the HTTPS connection to the API server, taking care of security transparently. 它通过使用默认令牌的秘密卷中的文件来做到这一点(请参阅下面的脚本)。

因为 pod 中的所有容器共享相同的环回网络接口,所以您的应用可以通过 localhost 上的端口访问代理。

如何构建这样的容器?

Dockerfile(使用 v1.8):

FROM alpine
RUN apk update && apk add curl && curl -L -O https://dl.k8s.io/v1.8.0/kubernetes-client-linux-amd64.tar.gz && tar zvxf kubernetes-client-linux-amd64.tar.gz kubernetes/client/bin/kubectl && mv kubernetes/client/bin/kubectl / && rm -rf kubernetes && rm -f kubernetes-client-linux-amd64.tar.gz
ADD kubectl-proxy.sh /kubectl-proxy.sh
ENTRYPOINT /kubectl-proxy.sh

其中kubectl-proxy.sh是以下脚本:

#!/bin/sh

API_SERVER="https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT"
CA_CRT="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
TOKEN="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"

/kubectl proxy --server="$API_SERVER" --certificate-authority="$CA_CRT" --token="$TOKEN" --accept-paths='^.*'

剩下要做的就是构建此映像(将其推送到注册表),将其作为容器添加到您的应用程序 pod,并通过环回直接与其通信。

默认情况下,kubectl 代理绑定到 8001 端口,并且由于 pod 中的两个容器共享相同的网络接口,包括环回,您可以将您的请求指向localhost:8001

归功于 Kubernetes in Action book(太棒了!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM