无法从私有docker注册表启用图像删除

问题描述 投票:0回答:1

所有!!我正在使用以下yaml文件在K8S群集中部署私有注册表:

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

我只是想知道在将它们推送到本地注册表之后没有删除docker镜像的选项。我找到了它在这里工作的方式:https://github.com/byrnedo/docker-reg-tool。我可以在本地存储库中列出docker镜像,通过命令行查看所有标签,但无法删除它们。阅读docker注册表文档后,我发现注册表docker需要运行以下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

但是使用命令kubectl apply -f manifests/registry.yaml应用此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文件中启用docker图像删除的建议都非常感谢。

docker docker-registry
1个回答
1
投票

yaml中true的值被解析为布尔数据类型,语法调用字符串。你需要明确引用它:

value: "true"
© www.soinside.com 2019 - 2024. All rights reserved.