九章智算云

创建并使用密钥

VKS 部署容器 时,要先把镜像推到与集群同步开通的镜像仓库里。集群拉镜像时通过 Secret 携带镜像仓库的凭据。本文介绍两种创建 Secret 的方式,以及在 Pod 中如何引用。

前提条件

镜像仓库连接地址

  1. 登录Alaya NeW官网,点击产品中心/AI资源/混闪-镜像,切换至私有镜像Tab页面。

  2. 在右上角选择开通弹性容器集群和开通镜像仓库的智算中心,然后点击私有镜像页签,查看镜像详情信息。

    企业注册

获取上图所示的访问地址部分即为镜像仓库连接地址,无需后面的项目名称信息。

获取用户名和密码

  • 方式一:在开通镜像仓库以后,用户名和密码会以短信的形式发送。

  • 方式二:如果您没有收到短信提醒或者误删了短信,您可以在产品中心/客户中心/权限管理/访问管理页面重置用户名和密码。

    1. 在页面右上角单击用户头像,点击用户名链接,切换至权限管理/访问管理

    2. 访问管理页面选择混闪-镜像页签,然后单击目标智算中心操作列的重置,重置镜像仓库的用户名和密码。

      企业注册

    3. 重置结果如下图所示。

      重置结果

命令行方式创建密钥

使用如下命令创建密钥,注意替换如下内容:

  • your-secret-name:替换成您自己定义的密钥名称
  • your-username:替换成您自己的镜像仓库用户名
  • your-password:替换成您自己的镜像仓库密码,如果有特殊字符,用''括起来
  • your-harbor-domain:替换成您自己的镜像仓库域名
  • your-namespace:替换成您自己使用该密钥的命名空间
kubectl create secret docker-registry your-secret-name \
  --docker-username=your-username \
  --docker-password='your-password' \
  --docker-server=your-harbor-domain \
  --namespace=your-namespace

your-harbor-domain应填入镜像仓库的访问域名(即地址中第一个/之前的内容)。例如,若镜像完整地址为your-domain.com:port/project/image:tag,则your-harbor-domain填写your-domain.com:port

K8S资源方式创建密钥

生成配置 JSON 示例如下:

{
    "auths": {
      "镜像仓库访问域名": {
        "username": "your-username",
        "password": "your-harbor-password",
        "email": "your-email"
    }
  }
}

其次对上述 JSON 文件进行 Base64 编码:

base64 config.json > encode-config.json
certutil -encode config.json encode-config.json

可以使用在线编码工具: https://www.bejson.com/enc/base64/

最后生成 K8s 的 Secret 资源:

其中.dockerconfigjson的值即上步中,编码后的文件内容示例:

apiVersion: v1
kind: Secret
metadata:
  name: ydyd-harbor-secret
  namespace: your-namespace
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ewogICAgImF***********************************Cn0K

在Pod中使用 Secret

在 Pod、Deployment 的 spec 里通过 imagePullSecrets 引用 Secret 名称即可:

apiVersion: v1
kind: Pod
metadata:
  name: your-pod-name
  namespace: your-namespace
spec:
  imagePullSecrets:
    - name: your-harbor-secret
  containers:
    - name: your-container-name
      image: your-image
      imagePullPolicy: IfNotPresent
      volumeMounts:
        - mountPath: /mnt/test
          name: your-volume-name
      command: ['/bin/bash', '-c', 'while true; do sleep 30; done']
  volumes:
    - name: your-volume-name
      persistentVolumeClaim:
        claimName: your-pvc-name

Secret 必须与使用它的 Pod 在同一个 namespace 下,跨 namespace 不会自动可见。

最后更新于

这篇文档对你有帮助吗?

目录