删除所有 pods when starts for a word(pod 名称不完整)

Delete all pods when starts for a word (uncomplete name of the pod)

我在 OC 中有一些项目,pods 的名称是在链和提交的基础上生成的。因此,我想在 AzureDevOps 中创建一条指令,通过不完整的名称删除所有 pods 具有特定字符的名称,但以其他字符结尾。

示例:

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

我需要使用类似的东西:

oc delete po podB*
Error from server (NotFound): pods "podB*" not found

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

已添加部署配置:

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>

首先获取 pod 名称,如果它属于这样的 deploymentConfig,我不认为使用通配符可以删除 pods,我建议为此使用标签和选择器。

oc get po -n namespace -l labelname=value

然后删除那些pods

oc delete po -l labelname=value -n namespace

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

oc get pods | awk '/^podB/{system("oc delete pod " )}'

无论如何,我会推荐使用 Dashrath Mundkar 提供的方法。 对于 openshift,如果您只想访问当前项目中的资源,则无需提供任何命名空间,因此您只需从

等命令中删除“-n 命名空间”
oc get pod -l labelname=value
oc delete pod -l labelname=value

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

我使用以下命令批量删除 pods。这个单一的命令帮助我删除了我选择的选择性 pods。它非常方便快捷,可以节省很多时间。编码愉快!

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 }' | xargs oc delete pod