Openshift «o c apply» перезаписывает всю конфигурацию или только включенные параметры? - PullRequest
1 голос
/ 08 января 2020

В настоящее время мы используем следующую команду для обновления настроек configmap в Openshift (после чего мы перезапускаем модули, чтобы настройки вступили в силу):

oc apply -f configmap.yml

Мой вопрос:

Будет ли эта команда удалять существующую конфигурационную карту и заменять ее содержимым этого файла, или она только импортирует настройки из файла, оставляя любые другие настройки без изменений?

Как правило, если живая конфигурация содержит настройку mytest: true и новый файл не включает параметр mytest, параметр остается в оперативной конфигурации в Openshift или удаляется, поскольку его нет в импортированном файле?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Я воспроизвел ваш случай, и после применения нового yaml с другими настройками configmap происходит новая версия. Таким образом, OpenShift не объединяет configmap, а заменяет.

Давайте go через это вместе ...

kind: ConfigMap
apiVersion: v1
metadata:
  name: example-config
data: 
  mytest0: "HELLO"
  mytest1: "STACK"
  mytest2: "COMMUNITY"
  mytest3: "!!!"

oc apply -f configmap_lab.yaml

Как мы видим, у нас все включено, как и ожидалось:

$ oc get configmap/example-config -o yaml
apiVersion: v1
data:
  mytest0: HELLO
  mytest1: STACK
  mytest2: COMMUNITY
  mytest3: '!!!'
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"mytest0":"HELLO","mytest1":"STACK","mytest2":"COMMUNITY","mytest3":"!!!"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"example-config","namespace":"myproject"}}
  creationTimestamp: 2020-01-09T10:42:11Z
  name: example-config
  namespace: myproject
  resourceVersion: "7987774"
  selfLink: /api/v1/namespaces/myproject/configmaps/example-config
  uid: b148dbef-32cc-11ea-9339-525400d653ae

Теперь давайте развернем новый yaml поверх этого:

kind: ConfigMap
apiVersion: v1
metadata:
  name: example-config
data: 
  mytest0: "THANKS"
  mytest1: "STACK"
  newmytest0: "COMMUNITY"
  newmytest1: "!!!"

Здесь мы меняем значение, удаляя 2 и добавляя 2 параметра. Давайте проверим, как O C будет относиться к этому:

oc apply -f configmap_lab_new.yaml
$ oc get configmap/example-config -o yaml
apiVersion: v1
data:
  mytest0: THANKS
  mytest1: STACK
  newmytest0: COMMUNITY
  newmytest1: '!!!'
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"mytest0":"THANKS","mytest1":"STACK","newmytest0":"COMMUNITY","newmytest1":"!!!"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"example-config","namespace":"myproject"}}
  creationTimestamp: 2020-01-09T10:42:11Z
  name: example-config
  namespace: myproject
  resourceVersion: "7988585"
  selfLink: /api/v1/namespaces/myproject/configmaps/example-config
  uid: b148dbef-32cc-11ea-9339-525400d653ae

Как мы можем заметить, все изменения приняты и активны.

Хотя, если вы хотите сделать это в более контролируемым способом, вы можете использовать oc patch. Do c здесь .

1 голос
/ 08 января 2020

oc apply вычисляет и применяет различия между объектами:

Выполняет трехстороннее объединение между:

  1. вводом в команду,

  2. текущая версия объекта и

  3. последнее указанное пользователем определение объекта, сохраненное в виде аннотации в текущем объекте.

Затем существующий объект обновляется с результатом.

На есть еще ссылка на do c.

...