kubectl patch каждый элемент массива

Я хотел бы исправить все шаблоны контейнеров в развертывании Kubernetes с помощью одной команды kubectl patch, не зная их имени. Это возможно?

Я знаю, что могу добиться замены с помощью awk, sed, jq и kubectl replace, но я бы предпочел что-то вроде [*] в выражении ...

Команда исправления для определенной спецификации контейнера

kubectl patch deployment mydeployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"myname","imagePullPolicy":"Always"}]}}}}'

Пример развертывания

apiVersion: extensions/v1beta1
kind: Deployment
spec:
  replicas: 1
  template:
    spec:
      containers:
      - image: example.com/my/fancyimage:latest
        imagePullPolicy: Never
        name: myname
      dnsPolicy: ClusterFirst
      restartPolicy: Always

person Dennis Stritzke    schedule 26.07.2017    source источник
comment
Я абсолютно уверен, что смогу найти ответ через исходный код Kubectl patch.go, библиотека evanphx / json-patch , RFC 6902 и RFC 7396. Это займет некоторое время, которое я не могу вложить в этот сценарий. Может быть, мы сумеем быть хорошими мастерами и найдем здесь отличное решение ...   -  person Dennis Stritzke    schedule 26.07.2017


Ответы (2)


Лучший способ добиться этого, если вы хотите, чтобы это было постоянным требованием, - это использовать AlwaysPullImages AdmissionController

AlwaysPullImages

Этот контроллер доступа изменяет каждый новый модуль, чтобы принудительно установить политику извлечения изображений Всегда ...

Вы применили бы это к своему контроллеру api, добавив его к аргументу --enable-admission-plugins

person deedubs    schedule 15.08.2018

Это не совсем то, о чем вы спрашивали, поскольку я использую здесь инструменты командной строки, но если бы он появился здесь, это сэкономило бы мне время. Так что я отправляю его для других, кто пришел сюда из поисковых систем.

kubectl \
  --username=USERNAME \
  --password=PASSWORD \
  --server="https://EXAMPLE.COM" \
  --insecure-skip-tls-verify=true \
  --namespace=MY_NAMESPACE \
  get deployments | \
  grep -v NAME | cut -f1 -d" " | \
  xargs kubectl \
    --username=USERNAME \
    --password=PASSWORD \
    --server="https://EXAMPLE.COM" \
    --insecure-skip-tls-verify=true \
    --namespace=MY_NAMESPACE \
    patch deployment \
      -p='{"spec":{"template":{"spec":{"containers":[{"name":"myname","imagePullPolicy":"Always"}]}}}}' 
person YuriR    schedule 25.04.2018