以单词开头时删除所有 pod(不完整的 pod 名称)

RCa*_*Cat 2 openshift kubernetes

我在 OC 中有一些项目,Pod 的名称是在链和提交的基础上生成的。因此,我想在 AzureDevOps 中创建一个指令,以删除所有 pod,名称不完整,名称带有特定字符,但以其他方式完成。

例子:

root@oc-jump-pod:/# oc get po
NAME                           READY     STATUS    RESTARTS   AGE
podA-74rt7                     1/1       Running   0          20h
podB-6744849c59                1/1       Running   0          20h
podB-6746378213                1/1       Running   0          20h
Run Code Online (Sandbox Code Playgroud)

我需要使用类似的东西:

oc delete po podB*
Error from server (NotFound): pods "podB*" not found
Run Code Online (Sandbox Code Playgroud)

如何使用几个字符而不是 pod 的完整名称过滤删除?

添加了 DeployConfig:

root@oc-jump-pod-pre:/# oc describe deploy NAME
Name:                   NAME
Namespace:              NAME-pre
CreationTimestamp:      Mon, 25 May 2020 07:01:14 +0000
Labels:                 app.kubernetes.io/instance=NAME
                        app.kubernetes.io/managed-by=Helm
                        app.kubernetes.io/name=NAME
                        app.kubernetes.io/version=latest
                        helm.sh/chart=NAME-1.0.0
Annotations:            deployment.kubernetes.io/revision=3
                        meta.helm.sh/release-name=NAME
                        meta.helm.sh/release-namespace=sda-NAME-pre
Selector:               app.kubernetes.io/instance=NAME,app.kubernetes.io/name=NAME
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           app.kubernetes.io/instance=NAME
                    app.kubernetes.io/name=NAME
  Service Account:  default
  Containers:
   NAME:
    Image:  registry/sda-NAME-dev/test-NAME-java:0.0.2
    Port:   8080/TCP
    Limits:
      cpu:     150m
      memory:  1444Mi
    Requests:
      cpu:     100m
      memory:  1Gi
    Environment:
      APP_NAME:                     NAME
      JAVA_OPTS_EXT:                ....
      SPRING_CLOUD_CONFIG_PROFILE:  pre
      TZ:                           Europe/Madrid
      WILY_MOM_PORT:                5001
      spring_application_name:      NAME_pre
      spring_cloud_config_uri:      https://config.d.cluster.local
    Mounts:
      /etc/jks from jks (ro)
      /etc/secret-vol from secretvol (ro)
      /etc/truststore from jssecacerts (ro)
  Volumes:
....
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  NAME-6744849c59 (1/1 replicas created)
NewReplicaSet:   <none>
Events:          <none>
Run Code Online (Sandbox Code Playgroud)

小智 6

对于基于正则表达式的方法,以下命令将删除所有以“podB”开头的 pod

oc get pods | awk '/^podB/{system("oc delete pod " $1)}'
Run Code Online (Sandbox Code Playgroud)

无论如何,我建议使用 Dashrath Mundkar 提供的方法。对于 openshift,如果您只想访问当前项目中的资源,则不需要提供任何命名空间,因此您只需从以下命令中删除“-n 命名空间”即可

oc get pod -l labelname=value
Run Code Online (Sandbox Code Playgroud)
oc delete pod -l labelname=value
Run Code Online (Sandbox Code Playgroud)

只需确保您提供的标签对于您要删除的 Pod 来说是唯一的


小智 5

我使用以下命令批量删除 Pod。这个命令可以帮助我删除我选择的选择性 Pod。它确实方便快捷,节省大量时间。快乐编码!

oc get pods -o wide -n <namespace> | grep -i -E "<search_string_1>|<search_string_2>" | grep -v "<exclude_results_with_search_string_3>" | awk '{print $1}' | xargs oc delete pod
Run Code Online (Sandbox Code Playgroud)