kubectl получить модули по переменной среды контейнера - PullRequest
1 голос
/ 07 февраля 2020

Могу ли я использовать kubectl get pods с каким-либо селектором полей или селектором, который поддерживает получение одного модуля на основе переменной среды контейнера?

Я хотел бы получить этот модуль и только этот модуль тысяч и тысяч, исходя из значения ENVIRONMENT_VARIABLE с kubectl.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  namespace: default
spec:
  containers:
  - env:
    - name: ENVIRONMENT_VARIABLE
      value: abc123
    image: my-images
    imagePullPolicy: IfNotPresent
    name: my-pod

kubectl get pods --field-selector нет, поле не поддерживается

kubectl get pods -l это не метка

Что еще можно попробовать, если что?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

У меня есть модуль my-pod с переменной среды PORT со значением 8080, например:

  metadata:
  ...
    name: my-pod
  ...
  spec:
    containers:
    - env:
      - name: PORT
        value: "8080"
  ...

, и я могу использовать kubectl для фильтрации этого модуля, например:

$ kubectl get pods --all-namespaces \
-o=jsonpath=\
'{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].env[?(@.name=="PORT")]}{"\n"}{end}' | \
grep 8080

output is:

my-pod  map[name:PORT value:8080]

Итак, вы можете попробовать:

kubectl get pods --all-namespaces \
-o=jsonpath=\
'{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].env[?(@.name=="ENVIRONMENT_VARIABLE")]}{"\n"}{end}' | \
grep abc123
0 голосов
/ 09 февраля 2020

через jq ...

По имени

kubectl get pods --all-namespaces --chunk-size=0 -o json | \
  jq '.items[] | select(.spec.containers[].env[]?.name == "ENVNAME")
               | .metadata.name'

По значению

kubectl get pods --all-namespaces --chunk-size=0 -o json | \
  jq '.items[] | select(.spec.containers[].env[]?.value == "AVALUE")
               | .metadata.name'

По имени и значению

kubectl get pods --all-namespaces --chunk-size=0 -o json | \
  jq '.items[] | select(.spec.containers[].env[]? | .name == "ENVNAME" and .value == "AVALUE")
               | .metadata.name'

Или есть клиентские библиотеки API для большинства языков. Если вы добавите --v=9 к команде kubectl, она выведет конечные точки, которые она собирает для сбора данных. В этом случае: https://api-server/api/v1/pods

...