当前位置: 首页 > 知识库问答 >
问题:

用kubectl查找新豆荚的名称

伍宝
2023-03-14

我是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分钟的间隔内删除豆荚。这是容易的部分。

假设调用kubectl delete firstpod-123456789-something并等待k8s重新创建一个新的pod。这个新的pod将有一个新的名称,比如firstpod-[这里有一些随机散列]-something

问题是,我需要在bash脚本中捕获该pod的名称,以便在该pod中执行一个命令,如uname-a或其他命令,以验证新pod是否已启动并运行良好。

我在谷歌上搜索了它,并阅读了kubectl文档,但我不认为有一个简单的方法通过bash脚本做到这一点?我假设这里获得吊舱名称的唯一方法是通过k8s API?

我很乐意在这一点上使用任何解决方案。我想知道当k8s产生一个新的豆荚时,是否有什么方法可以重新命名新的豆荚?所以我可以grep一个特定的关键字?

请注意,我不想编写类似firstpod-[0-9]-something的内容,因为这只是一个示例。很多豆荚都有很多不同的名字,这只是一个例子。

谢了!

共有1个答案

盖斌
2023-03-14

您需要以某种方式标记部署,例如,我们在下面设置labelapp: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
 类似资料:
  • PostgreService.yaml 已创建服务的终结点为 然后我在pod(kubectl exec-it mark-dummy-pod bash)内运行ping172.31.6.149,但不工作。(ping localhost正在工作)

  • 我们在k8s中运行以下命令 kubectl部署我们的-deployment-name 当我删除一个部署时,我有一个孤立的副本集,如下所示...

  • 环境*Kubernetes 1.9.3*使用在AWS(专用网络拓扑)上运行的kops(V1.8)创建的集群*网络:weave-net*集群:1主,3节点 事件实例时间线 > 我们已经使用kops执行了滚动集群更新,以使用我们构建的新AMI(基于kops AMI k8s-1.8-debian-jessie-amd64-hvm-ebs-2017-11-27)启动节点和主机。调整kops AMI从来都不

  • 我在一个有3个节点的kubernetes集群上运行nginx。 我想知道是否有任何好处,例如,有4个豆荚和限制他们的CPU/MEM约。节点容量的1/4相对于每个节点运行一个pod,限制CPU/MEM,以便pod可以使用整个节点的资源(为了简单起见,我们将cubernet服务排除在等式之外)。 我的感觉是,豆荚越少,开销就越小,每个节点使用1个豆荚应该是性能最好的? 提前致谢

  • 我们有一个应用程序,其中包含 4 个 pod,并使用负载均衡器运行!我们想尝试滚动更新,但我们不确定当 Pod 出现故障时会发生什么!文档不清楚!特别是《豆荚的终止》中的这句话: Pod将从服务的endpoint列表中删除,并且不再被视为复制控制器的运行Pod集的一部分。缓慢关闭的Pod可以继续为流量提供服务,因为负载平衡器(如服务代理)将它们从轮换中删除。 因此,如果有人能在以下问题上指导我们:

  • 我希望我的pod在一段时间后(例如每周或每月)从我的部署中优雅地回收。如果我知道库伯内特斯命令,我知道我可以为此添加一个cron作业。 问题是在库伯内特斯做这件事的最好方法是什么,哪个命令会让我实现这个目标? 非常感谢你在这件事上帮助我。