代码之家  ›  专栏  ›  技术社区  ›  Bluz

与kubectl一起查找新pod的名称

  •  39
  • Bluz  · 技术社区  · 7 年前

    我是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
    

    然后我编写了一个bash脚本,该脚本将在5分钟的时间间隔内删除pod。这是最简单的部分。

    假设我调用 kubectl delete firstpod-123456789-something firstpod-[some random hash here]-something

    问题是,我需要在bash脚本中捕获该pod的名称,这样我就可以在该pod中像 uname -a 或者验证新吊舱是否正常运行。

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

    我很高兴在这一点上使用任何解决方案。我想知道当K8生成一个新的pod时,是否有任何方法可以重命名新的pod?所以我可以搜索一个特定的关键字?

    注意,我不想像这样 firstpod-[0-9]-something 因为这只是一个例子。很多豆荚有很多不同的名字,这只是一个例子。

    谢谢

    4 回复  |  直到 6 年前
        1
  •  81
  •   nickgryg    6 年前

    你需要给你的 deployment 例如,我们设置了标签 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
    
        2
  •  21
  •   P.Stromberg    5 年前

    正如Nickolay所写,使用标签来帮助选择。 然后你可以使用

    kubectl get pods -l app=my-app -o custom-columns=:metadata.name
    

    这将为您获取标签为“app=my app”的pod的名称

        3
  •  3
  •   RexRod    4 年前

    补充@nickgryg所说的,如果kubernetes在云中,您可以添加 命名空间 库贝Config 要获取pod名称:

    kubectl get pods -l app=my-app -o jsonpath="{.items[0].metadata.name}" -n my-namespace --kubeconfig=/home/$USER/.kube/kubeconfig
    

    要使用单个命令删除它,可以使用以下命令:

    NAMESPACE=my-namespace APP_NAME=my-app && kubectl delete -n $NAMESPACE pod $(kubectl get pods -l app=$APP_NAME -o jsonpath="{.items[0].metadata.name}" -n $NAMESPACE --kubeconfig=/home/$USER/.kube/kubeconfig) --kubeconfig=/home/$USER/.kube/kubeconfig
    
        4
  •  0
  •   ImranRazaKhan    2 年前

    所有其他答案都不适合我

    不工作选项

    kubectl -n $NAMESPACE get pods  -l app.kubernetes.io/name=nats  -o name
    

    工作选项

    kubectl -n $NAMESPACE get pods  --selector=app.kubernetes.io/name=nats  -o name