Удаление аннотации по умолчанию для класса хранения AKS не сохраняется - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь установить новый класс хранения по умолчанию в нашем Azure Kubernetes Service. (1.15.10). Я пробовал несколько вещей, но поведение мне кажется странным.

Я создал новый класс хранилища custom, установил его как класс хранилища по умолчанию, а затем удалил класс is-default из класса хранилища default.

default-storage-class.yml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: custom
parameters:
  cachingmode: ReadOnly
  kind: Managed
  storageaccounttype: Standard_LRS
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Delete
volumeBindingMode: Immediate

и команды:

# create new storage class "custom"
kubectl apply -f ./default-storage-class.yml
# set storageclass as new default
kubectl patch storageclass custom -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
# remove default storage class from default
kubectl patch storageclass default -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"false"}}}'

Сначала кажется, что все работает нормально:

$kubectl get sc
custom (default)   kubernetes.io/azure-disk   6d23h
default            kubernetes.io/azure-disk   14m

Но в течении минуты, ничего не меняя:

$kubectl get sc
custom (default)   kubernetes.io/azure-disk   6d23h
default (default)  kubernetes.io/azure-disk   16m

Я, наверное, что-то тут упустил, но не знаю что.

Если я сделаю kubectl describe sc default через минуту, оно не изменилось обратно:

storageclass.beta.kubernetes.io/is-default-class=false,storageclass.kubernetes.io/is-default-class=false

И мгновение спустя:

storageclass.beta.kubernetes.io/is-default-class=true,storageclass.kubernetes.io/is-default-class=false

Ответы [ 2 ]

2 голосов
/ 25 июня 2020

После длительного тестирования было обнаружено, что единственный способ сделать значение по умолчанию отличным от значения по умолчанию - это обновить не только аннотацию storageclass.beta.kubernetes.io/is-default-class, но и аннотацию kubectl.kubernetes.io/last-applied-configuration.

kubectl patch storageclass default -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"false", "kubectl.kubernetes.io/last-applied-configuration": "{\"allowVolumeExpansion\":true,\"apiVersion\":\"storage.k8s.io/v1beta1\",\"kind\":\"StorageClass\",\"metadata\":{\"annotations\":{\"storageclass.beta.kubernetes.io/is-default-class\":\"false\"},\"labels\":{\"kubernetes.io/cluster-service\":\"true\"},\"name\":\"default\"},\"parameters\":{\"cachingmode\":\"ReadOnly\",\"kind\":\"Managed\",\"storageaccounttype\":\"StandardSSD_LRS\"},\"provisioner\":\"kubernetes.io/azure-disk\"}"}}}'

После применения в этом случае StorageClass по умолчанию не был задан по умолчанию.

0 голосов
/ 26 мая 2020

Выполните следующие действия

  1. kubectl get sc default > default-sc.yaml
  2. Измените тип учетной записи хранения в файле YAML
  3. kubectl delete sc default
  4. kubectl apply -f default-sc.yaml

Просто убедитесь, что нет большого промежутка времени между шагом 3 и шагом 4, иначе класс хранения по умолчанию будет создан снова, прежде чем вы сможете выполнить шаг 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...