Не удается включить удаление изображений из частного реестра докеров

все!! Я развертываю частный реестр в кластере K8S со следующим файлом yaml:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: registry
  labels:
    type: local
spec:
  capacity:
    storage: 4Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/registry/"

---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: registry-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
---

apiVersion: v1
kind: Service
metadata:
  name: registry
  labels:
    app: registry
spec:
  ports:
    - port: 5000
      targetPort: 5000
      nodePort: 30400
      name: registry
  selector:
    app: registry
    tier: registry
  type: NodePort
---

apiVersion: v1
kind: Service
metadata:
  name: registry-ui
  labels:
    app: registry
spec:
  ports:
    - port: 8080
      targetPort: 8080
      name: registry
  selector:
    app: registry
    tier: registry
  type: NodePort
---

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: registry
  labels:
    app: registry
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: registry
        tier: registry
    spec:
      containers:
      - image: registry:2
        name: registry
        volumeMounts:
        - name: docker
          mountPath: /var/run/docker.sock
        - name: registry-persistent-storage
          mountPath: /var/lib/registry
        ports:
        - containerPort: 5000
          name: registry

      - name: registryui
        image: hyper/docker-registry-web:latest
        ports:
        - containerPort: 8080
        env:
        - name: REGISTRY_URL
          value: http://localhost:5000/v2
        - name: REGISTRY_NAME
          value: cluster-registry
      volumes:
      - name: docker
        hostPath:
          path: /var/run/docker.sock
      - name: registry-persistent-storage
        persistentVolumeClaim:
          claimName: registry-claim

Мне просто интересно, что нет возможности удалить образы докеров после их добавления в локальный реестр. Я нашел способ, как это должно работать здесь: https://github.com/byrnedo/docker-reg-tool. Я могу перечислить изображения докеров внутри локального репозитория, просмотреть все теги через командную строку, но не могу их удалить. Прочитав документацию по реестру докеров, я обнаружил, что докер реестра необходимо запустить со следующим env: REGISTRY_STORAGE_DELETE_ENABLED=true.. Я попытался добавить эту переменную в файл yaml:

.........
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: registry
      labels:
        app: registry
    spec:
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: registry
            tier: registry
        spec:
          containers:
          - image: registry:2
            name: registry
            volumeMounts:
            - name: docker
              mountPath: /var/run/docker.sock
            - name: registry-persistent-storage
              mountPath: /var/lib/registry
            ports:
            - containerPort: 5000
              name: registry
            env:
            - name: REGISTRY_STORAGE_DELETE_ENABLED
              value: true

Но применение этого yaml-файла с помощью команды kubectl apply -f manifests/registry.yaml вернет следующее сообщение об ошибке:

Deployment in version "v1beta1" cannot be handled as a Deployment: v1beta1.Deployment.Spec: v1beta1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.Env: []v1.EnvVar: v1.EnvVar.Value: ReadString: expects " or n, but found t, error found in #10 byte of ...|,"value":true}],"ima|..., bigger context ...|"name":"REGISTRY_STORAGE_DELETE_ENABLED","value":true}],"image":"registry:2","name":"registry","port|...

После того, как я найду другое предложение:

Реестр принимает параметры конфигурации либо через файл, либо через переменные среды. Таким образом, переменная среды REGISTRY_STORAGE_DELETE_ENABLED = true эквивалентна этому в вашем файле конфигурации:

storage:
  delete:
    enabled: true

Я также пробовал эту опцию в моем файле yaml, но все равно не повезло ... Любые предложения, как включить удаление изображений докеров в моем файле yaml, приветствуются.


person Igor Rabkin    schedule 14.03.2019    source источник


Ответы (1)


Значение true в yaml разбирается в логический тип данных, а синтаксис вызывает строку. Вам нужно будет явно процитировать это:

value: "true"
person BMitch    schedule 14.03.2019