Определите автономный патч как YAML

Мне нужно определить отдельный патч как YAML.

В частности, я хочу сделать следующее:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registry-my-registry"}]}'

Загвоздка в том, что я не могу использовать kubectl patch. Я использую рабочий процесс GitOps с flux, и этот ресурс, который я хочу исправить, является ресурсом по умолчанию, созданным вне flux.

Другими словами, мне нужно сделать то же, что и команда выше, но с kubectl apply только:

kubectl apply patch.yaml

Я не мог понять, можете ли вы определить такой патч.

Ключевой бит заключается в том, что я не могу предсказать имя секретного токена по умолчанию в новом кластере (поскольку имя случайное, т.е. default-token-uudge)

2 ответа

  • Поля, установленные и удаленные из конфигурации ресурсов, объединяются в ресурсы с помощью Kubectl apply:
  • Если ресурс уже существует, Apply обновляет ресурсы, объединяя локальную конфигурацию ресурсов с удаленными ресурсами.
  • Поля, удаленные из конфигурации ресурса, будут удалены из удаленного ресурса.

Вы можете узнать больше о семантике слияния полей Kubernetes.

  • Если ваше ограничение не знает секрет default-token-xxxxx name, без проблем, просто держите это поле подальше от вашего yaml.

  • Пока yaml имеет достаточно полей для идентификации целевого ресурса (имя, вид, пространство имен), он будет добавлять / редактировать установленные вами поля.

  • Я создал кластер (в данном примере minikube, но он может быть любым) и получил текущий serviceAccount по умолчанию:

$ kubectl get serviceaccount default -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2020-07-01T14:51:38Z"
  name: default
  namespace: default
  resourceVersion: "330"
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: a9e5ff4a-8bfb-466f-8873-58c2172a5d11
secrets:
- name: default-token-j6zx2
  • Затем мы создаем yaml-файл с содержимым, которое хотим добавить:
$ cat add-image-pull-secrets.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
imagePullSecrets:
 - name: registry-my-registry
  • Теперь подаем и проверяем:
$ kubectl apply -f add-image-pull-secrets.yaml 
serviceaccount/default configured

$ kubectl get serviceaccount default -o yaml
apiVersion: v1
imagePullSecrets:
- name: registry-my-registry
kind: ServiceAccount
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","imagePullSecrets":[{"name":"registry-my-registry2"}],"kind":"ServiceAccount","metadata":{"annotations":{},"name":"default","namespace":"default"}}
  creationTimestamp: "2020-07-01T14:51:38Z"
  name: default
  namespace: default
  resourceVersion: "2382"
  selfLink: /api/v1/namespaces/default/serviceaccounts/default
  uid: a9e5ff4a-8bfb-466f-8873-58c2172a5d11
secrets:
- name: default-token-j6zx2

Как видите, ImagePullPolicy был добавлен к ресурсу.

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

Допустим, ваш сервисный аккаунт YAML выглядит следующим образом:

$ kubectl get sa demo -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo
  namespace: default
secrets:
 - name: default-token-uudge

Теперь вы хотите добавить или изменить imagePullSecretsдля этой учетной записи службы. Для этого отредактируйте файл YAML и добавьтеimagePullSecrets.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo
  namespace: default
secrets:
 - name: default-token-uudge
imagePullSecrets:
 - name: myregistrykey

И наконец, примените изменения:

$ kubectl apply -f service-account.yaml
Другие вопросы по тегам