gpt4 book ai didi

kubectl - 使用 kubectl 查找新 pod 的名称

转载 作者:行者123 更新时间:2023-12-02 09:33:55 27 4
gpt4 key购买 nike

我是 k8s 新手,在这里遇到了一个小问题。

上下文如下:我需要每天通过 crontask 调用 kubectl delete [podname] 一次,并等到 k8s 重新创建 pod,然后登录到该 pod 中的容器并运行 shell 命令。

所以我查询部署并得到如下内容:

user@host:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
firstpod-123456789-something 1/1 Running 570 2d
secondpod-http-backend-something 1/1 Running 597 2d

然后我编写了一个 bash 脚本,该脚本会每隔 5 分钟删除一次 Pod。这是简单的部分。

假设我调用 kubectl delete firstpod-123456789-something 并等待 k8s 重新创建新的 pod。该新 Pod 将有一个新名称,例如 firstpod-[some random hash here]-something

问题是我需要在 bash 脚本中捕获该 pod 的名称,这样我就可以在该 pod 中执行 uname -a 等命令,以验证新 pod 是否已启动并运行良好。

我用谷歌搜索并阅读了 kubectl 文档,但我认为没有一种简单的方法可以通过 bash 脚本来做到这一点?我假设在这里获取 pod 名称的唯一方法是通过 k8s API?

此时我很乐意使用任何解决方案。我想知道当 k8s 产生一个新的 Pod 时,是否有任何方法可以重命名新的 Pod?所以我可以 grep 查找特定关键字?

请注意,我不想使用 egrep 之类的 firstpod-[0-9]-something 之类的东西,因为这只是一个示例。很多 pod 有很多不同的名称,这只是一个例子。

谢谢!

最佳答案

您需要以某种方式标记您的部署,例如我们在下面设置标签app: myapp:

apiVersion: extensions/v1beta1                                                                                                                                                                          
kind: Deployment
metadata:
name: nginx
spec:
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: nginx
name: nginx

之后您可以非常轻松地获取部署的 Pod 名称:

POD=$(kubectl get pod -l app=my-app -o jsonpath="{.items[0].metadata.name}")

并在那里执行一些命令,例如:

kubectl exec -ti $POD -- uname -a

关于kubectl - 使用 kubectl 查找新 pod 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com