#patch #kubectl #configmap #coredns
#исправление #kubectl #configmap #coredns
Вопрос:
Я хочу использовать kubectl patch
команду для добавления правила перезаписи DNS в coredns configmap, как описано в пользовательских записях DNS для Kubernetes. Карта конфигурации по умолчанию выглядит следующим образом:
apiVersion: v1
data:
Corefile: |
.:53 {
log
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
kind: ConfigMap
....
и я хочу добавить строку
rewrite name old.name new.name
но как указать добавление строки в элемент «.:53», меня смущает.
Я знаю, что могу получить аналогичный результат, используя kubectl get ... | sed ... | kubectl replace -f -
но это выглядело бы некрасиво, плюс я хочу расширить свои знания об kubctl patch
использовании JSON. Спасибо!
Ответ №1:
В вашем случае вы не можете изменить ConfigMap с помощью patch
.
data.Corefile
является ключом, а его значение (содержимое корефайла) имеет тип: string
.
API-сервер обрабатывает его как строку байтов. Вы не можете исправить часть строки с помощью исправления kubectl.
И, во-вторых:
Я хочу расширить свои знания о исправлении kubctl с помощью JSON
Corefile даже не является допустимым файлом json. Даже если бы это было так, api-сервер не видит json / yaml, для api-сервера это просто строка случайных буквенно-цифровых символов.
Итак, что вы можете сделать?
У вас остается kubectl get ... | sed ... | kubectl replace -f -
, и это абсолютно правильное решение.