通过 YAML 安装

目录

何时使用此方法?

推荐用于

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

先决条件

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

通过 YAML 安装 Alauda 容器平台注册中心

操作步骤

  1. 创建一个 YAML 配置文件,命名为 registry-plugin.yaml,使用以下模板:
apiVersion: cluster.alauda.io/v1alpha1
kind: ClusterPluginInstance
metadata:
  annotations:
    cpaas.io/display-name: internal-docker-registry
  labels:
    create-by: cluster-transformer
    manage-delete-by: cluster-transformer
    manage-update-by: cluster-transformer
  name: internal-docker-registry
spec:
  config:
    access:
      address: ""
      enabled: false
    fake:
      replicas: 2
    global:
      expose: false
      isIPv6: false
      replicas: 2
      resources:
        limits:
          cpu: 500m
          memory: 512Mi
        requests:
          cpu: 250m
          memory: 256Mi
    ingress:
      enabled: true
      hosts:
        - name: <YOUR-DOMAIN>   # [必填] 自定义域名
          tlsCert: <NAMESPACE>/<TLS-SECRET>  # [必填] 命名空间/密钥名称
      ingressClassName: "<INGRESS-CLASS-NAME>"  # [必填] IngressClass 名称
      insecure: false
    persistence:
      accessMode: ReadWriteMany
      nodes: ""
      path: <YOUR-HOSTPATH>  # [必填] 本地路径
      size: <STORAGE-SIZE>  # [必填] 存储大小(例如,10Gi)
      storageClass: <STORAGE-CLASS-NAME>  # [必填] StorageClass 名称
      type: StorageClass
    s3storage:
      bucket: <S3-BUCKET-NAME>             # [必填] S3 桶名称
      enabled: false                        # 设置为 false 以使用本地存储
      env:
        REGISTRY_STORAGE_S3_SKIPVERIFY: false  # 设置为 true 以使用自签名证书
      region: <S3-REGION>                        # S3 区域
      regionEndpoint: <S3-ENDPOINT>  # S3 端点
      secretName: <S3-CREDENTIALS-SECRET>             # S3 凭证密钥
    service:
      nodePort: ""
      type: ClusterIP
  pluginName: internal-docker-registry
  1. 根据您的环境自定义以下字段
spec:
  config:
    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 的密钥
      env:
        REGISTRY_STORAGE_S3_SKIPVERIFY: "true"  # 设置为 "true" 以使用自签名证书
  1. 如何创建 S3 凭证的密钥
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 凭证密钥的名称。

  1. ​​将配置应用于您的集群:
kubectl apply -f registry-plugin.yaml

配置参考

必填字段

参数描述示例值
spec.config.ingress.hosts[0].name注册中心访问的自定义域名registry.yourcompany.com
spec.config.ingress.hosts[0].tlsCertTLS 证书密钥引用(命名空间/密钥名称)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 凭证的密钥s3-access-keys

验证

  1. ​​检查插件:
kubectl get clusterplugininstances internal-docker-registry -o yaml
  1. 验证注册中心 Pods​​:
kubectl get pods -n cpaas-system -l app=internal-docker-registry

更新/卸载 Alauda 容器平台注册中心

更新

在全局集群上执行以下命令:

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

卸载

在全局集群上执行以下命令:

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