【问题标题】:reboot multiple and very specific pods using a single syntax使用单一语法重新启动多个非常特定的 pod
【发布时间】:2021-03-18 09:45:47
【问题描述】:
root@x:~# kubectl get pods -A -o wide| grep nic
a      k-e-f-v1-k-e-nic-s-r8tjn           1/1     Running     1          5d11h   192.168.99.1     master.k                <none>           <none>
a      k-e-f-v1-k-e-nic-s-w6tk8           1/1     Running     0          5d11h   192.168.99.231   e-519-19121100100009   <none>           <none>
a      k-e-f-v1-k-e-nic-s-z8pmq           1/1     Running     0          5d11h   192.168.99.127   e-519-19121100100008   <none>           <none>

想要从上面的结果中重新启动命名空间 a 中除 master 之外的所有 pod。 有没有一种语法可以做到这一点?

【问题讨论】:

    标签: kubectl kubernetes-pod


    【解决方案1】:

    这些 pod 是否有任何可用于识别它们的特定标签?如果到目前为止还没有标记它们,我建议您这样做,因为 grep-ing 对于它们名称中的特定字符串既不是很方便也不是优雅的解决方案。当然,如果不使用 grep 之类的外部工具,您将无法使用纯 kubectl 命令选择名称中包含特定字符串的 pod。

    至于选择所有 pod(在特定的 --namespace--all-namespaces 中),在除特定节点之外的所有节点上运行,可以通过在 @ 中使用 negation 轻松完成987654326@:

    以下命令将列出Pods 来自--all-namespaces,在master 以外的任何节点上运行。此外,它将仅列出标有 app 键和值 nginxPods

    kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName!=master --selector=app=nginx
    

    如果你想删除这样的Pods,运行:

    kubectl delete pods --all-namespaces --field-selector spec.nodeName!=master --selector=app=nginx
    

    您可能知道,Pods删除重新启动/重新启动它们基本相同。如果那些Pods 被管理,例如通过Deployment,它们将在删除后简单地重新创建。

    如果您确实必须使用grep 来搜索您的Pods 名称中的特定字符串,您可以使用一个相当简单的脚本来删除这样特定的Pods

    kubectl get pods --all-namespaces -o name --field-selector spec.nodeName!=master | grep nic | xargs kubectl delete
    

    但正如您所见,上述命令比使用--selector 标志仅过滤带有特定标签的Pods 的单个kubectl delete 复杂得多。这个使用grepxargs,两个管道和两个独立的kubectl命令运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      相关资源
      最近更新 更多