Когда я запускаю свой модуль, я получаю, что модуль (cas-de) является недопустимой спецификацией: запрещенные обновления модуля не могут изменять поля, кроме spec.containers[*].image, spec.initContainers[*].image, spec.activeDeadlineSeconds или {{X3} } (только дополнения к существующим допускам)

Однако я поискал на сайте kubernetes и не нашел ничего плохого: (я действительно не понимаю, в чем моя ошибка)

Что лучше: установить volumeMounts в модуле или в развертывании?

apiVersion: v1
kind: Pod 
metadata:
  name: cas-de
  namespace: ds-svc
spec:
  containers:
  - name: ds-mg-cas
    image: "docker-all.xxx.net/library/ds-mg-cas:latest"
    imagePullPolicy: Always
    ports:
    - containerPort: 8443
    - containerPort: 6402
    env:
    - name: JAVA_APP_CONFIGS
      value: "/apps/ds-cas/configs"
    - name: JAVA_EXTRA_PARAMS
      value: "-Djava.security.auth.login.config=./config/jaas.config -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6402"
    volumeMounts:
    - name: ds-cas-config
      mountPath: "/apps/ds-cas/context"
  volumes:
    - name: ds-cas-config
      hostPath:
        path: "/apps/ds-cas/context"
2
morla 8 Окт 2018 в 17:05

2 ответа

Лучший ответ

Шаблон YAML действителен. Некоторые из запрещенных полей могли быть изменены, и тогда выполняется kubectl apply .....

Похоже больше на разработку. Решение - удалить существующий модуль с помощью команды kubectl delete pod cas-de и затем выполнить kubectl apply -f file.yaml или kubectl create -f file.yaml.

2
Praveen Sripati 8 Окт 2018 в 14:30

Есть несколько полей на объектах, которые вам просто не разрешено изменять после первоначального создания объекта. В качестве конкретного примера, справочная документация для Контейнеры отмечает, что volumeMounts "не может быть обновлен". Если вы попали в один из этих случаев, вам нужно удалить и воссоздать объект (возможно, сначала создав новый с другим именем).

Что лучше: установить volumeMounts в модуле или в развертывании?

Никогда не используйте голые капсулы; всегда предпочитаю использовать один из контроллеров, который управляет модулями, чаще всего развертывание.

Переход на развертывание фактически решит эту проблему, потому что обновление спецификации модуля развертывания будет проходить через последовательность создания нового модуля, ожидания его доступности и последующего удаления старого для вас. Он никогда не пытается обновить Pod на месте.

2
Praveen Sripati 9 Окт 2018 в 00:58