我是k8s的新手,我在这里遇到了一个小问题.
这是上下文:我需要kubectl delete [podname]
每天通过crontask 调用一次,并等到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
Run Code Online (Sandbox Code Playgroud)
然后我写了一个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一个特定的关键字?
请注意,我不想firstpod-[0-9]-something
因为那只是一个例子而得到了一些东西.很多豆荚有很多不同的名字,这只是一个例子.
谢谢!
Nic*_*lay 42
你需要以deployment
某种方式标记你的标签,例如我们在app: myapp
下面设置标签:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: nginx
name: nginx
Run Code Online (Sandbox Code Playgroud)
之后,您可以非常轻松地获得部署的pod名称:
POD=$(kubectl get pod -l app=my-app -o jsonpath="{.items[0].metadata.name}")
Run Code Online (Sandbox Code Playgroud)
并在那里执行一些命令,例如:
kubectl exec -ti $POD -- uname -a
Run Code Online (Sandbox Code Playgroud)
小智 8
就像Nickolay所写的那样,使用标签来帮助选择。那你可以用
kubectl get pods -l app=my-app -o custom-columns=:metadata.name
Run Code Online (Sandbox Code Playgroud)
这将为您提供标签为“ app = my-app”的广告连播的名称
归档时间: |
|
查看次数: |
13598 次 |
最近记录: |