通过 YAML 安装

何时使用此方法?

推荐用于

  • 具有 Kubernetes 专业知识,偏好手动操作的高级用户
  • 需要企业级存储(NAS、AWS S3、Ceph 等)的生产级部署
  • 需要对 TLS、ingress 进行细粒度控制的环境。
  • 需要完全自定义 YAML 以实现高级配置。

前提条件

  • 安装 Alauda Container Platform Registry 集群插件到目标集群。
  • 配置好 kubectl,能够访问目标 Kubernetes 集群
  • 具备集群管理员权限,以创建集群范围的资源。
  • 获取已注册的域名(例如 registry.yourcompany.com)创建域名
  • 提供有效的NAS 存储(例如 NFS、GlusterFS 等)。
  • (可选)提供有效的S3 存储(例如 AWS S3、Ceph 等)。如果没有现有的 S3 存储,可在集群中部署 MinIO(内置 S3)实例 部署 MinIO

通过 YAML 安装 Alauda Container Platform Registry

操作步骤

  1. 创建一个名为 registry-plugin.yaml 的 YAML 配置文件,内容模板如下:

    apiVersion: cluster.alauda.io/v1alpha1
    kind: ClusterPluginInstance
    metadata:
      annotations:
        cpaas.io/display-name: image-registry
      labels:
        create-by: cluster-transformer
        manage-delete-by: cluster-transformer
        manage-update-by: cluster-transformer
      name: image-registry
    spec:
      config:
        access:
          address: ''
          enabled: false
        fake:
          replicas: 2
        infra:
          enabled: false
        global:
          expose: false
          isIPv6: false
          replicas: 2
          oidc:
            ldapID: ''
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 256Mi
        ingress:
          enabled: true
          hosts:
            - name: <YOUR-DOMAIN> # [REQUIRED] Customize domain
              tlsCert: <NAMESPACE>/<TLS-SECRET> # [REQUIRED] Namespace/SecretName
          ingressClassName: '<INGRESS-CLASS-NAME>' # [REQUIRED] IngressClassName
          insecure: false
        persistence:
          accessMode: ReadWriteMany
          nodes: ''
          path: <YOUR-HOSTPATH> # [REQUIRED] Local path for LocalVolume
          size: <STORAGE-SIZE> # [REQUIRED] Storage size (e.g., 10Gi)
          storageClass: <STORAGE-CLASS-NAME> # [REQUIRED] StorageClass name
          type: StorageClass
        s3storage:
          bucket: <S3-BUCKET-NAME> # [REQUIRED] S3 bucket name
          enabled: false # Set false for local storage
          env:
            REGISTRY_STORAGE_S3_SKIPVERIFY: false # Set true for self-signed certs
          region: <S3-REGION> # S3 region
          regionEndpoint: <S3-ENDPOINT> # S3 endpoint
          secretName: <S3-CREDENTIALS-SECRET> # S3 credentials Secret
        service:
          nodePort: ''
          type: ClusterIP
      pluginName: image-registry
  2. 根据您的环境自定义以下字段

    spec:
      config:
        global:
          oidc:
            ldapID: '<LDAP-ID>' # LDAP ID
        infra:
          enabled: false  # 是否将组件部署到 infra 节点,默认 false 表示所有节点
        ingress:
          hosts:
            - name: '<YOUR-DOMAIN>' # 例如 registry.your-company.com
              tlsCert: '<NAMESPACE>/<TLS-SECRET>' # 例如 cpaas-system/tls-secret
          ingressClassName: '<INGRESS-CLASS-NAME>' # 例如 cluster-alb-1
        persistence:
          size: '<STORAGE-SIZE>' # 例如 10Gi
          storageClass: '<STORAGE-CLASS-NAME>' # 例如 cpaas-system-storage
        s3storage:
          bucket: '<S3-BUCKET-NAME>' # 例如 prod-registry
          region: '<S3-REGION>' # 例如 us-west-1
          regionEndpoint: '<S3-ENDPOINT>' # 例如 https://s3.amazonaws.com
          secretName: '<S3-CREDENTIALS-SECRET>' # 包含 AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 的 Secret
          env:
            REGISTRY_STORAGE_S3_SKIPVERIFY: 'true' # 自签名证书时设置为 "true"
  3. 如何创建 S3 凭据的 Secret

    kubectl create secret generic <S3-CREDENTIALS-SECRET> \
      --from-literal=access-key-id=<YOUR-S3-ACCESS-KEY-ID> \
      --from-literal=secret-access-key=<YOUR-S3-SECRET-ACCESS-KEY> \
      -n cpaas-system

    <S3-CREDENTIALS-SECRET> 替换为您的 S3 凭据 Secret 名称。

  4. 将配置应用到集群:

    kubectl apply -f registry-plugin.yaml

配置参考

必填字段

参数描述示例值
spec.config.global.oidc.ldapIDOIDC 认证的 LDAP IDldap-test
spec.config.ingress.hosts[0].name镜像仓库访问的自定义域名registry.yourcompany.com
spec.config.ingress.hosts[0].tlsCertTLS 证书 Secret 引用(命名空间/Secret 名称)cpaas-system/registry-tls
spec.config.ingress.ingressClassName镜像仓库的 Ingress 类名cluster-alb-1
spec.config.persistence.size镜像仓库存储大小10Gi
spec.config.persistence.storageClass镜像仓库使用的 StorageClass 名称nfs-storage-sc
spec.config.s3storage.bucket镜像存储的 S3 桶名称prod-image-store
spec.config.s3storage.regionS3 存储所在的 AWS 区域us-west-1
spec.config.s3storage.regionEndpointS3 服务端点 URLhttps://s3.amazonaws.com
spec.config.s3storage.secretName包含 S3 凭据的 Secret 名称s3-access-keys
spec.config.s3storage.env.REGISTRY_STORAGE_S3_SKIPVERIFY自签名证书时设置为 truetrue
spec.config.infra.enabled是否将组件部署到 infra 节点或所有节点false

验证

  1. 查看插件状态:
    kubectl get clusterplugininstances image-registry -o yaml
  2. 验证 registry Pod:
    kubectl get pods -n cpaas-system -l app=image-registry

更新/卸载 Alauda Container Platform Registry

更新

在 global 集群执行以下命令,根据上述参数描述更新资源中的值完成更新:

# <CLUSTER-NAME> 是插件安装所在的集群名称
kubectl edit -n cpaas-system \
  $(kubectl get moduleinfo -n cpaas-system -l cpaas.io/cluster-name=<CLUSTER-NAME>,cpaas.io/module-name=image-registry -o name)

卸载

在 global 集群执行以下命令:

# <CLUSTER-NAME> 是插件安装所在的集群名称
kubectl get moduleinfo -n cpaas-system -l cpaas.io/cluster-name=<CLUSTER-NAME>,cpaas.io/module-name=image-registry -o name | xargs kubectl delete -n cpaas-system