创建并使用密钥
VKS部署容器时,要先把镜像推到与集群同步开通的镜像仓库里。集群拉镜像时通过Secret携带镜像仓库的凭据。本文介绍两种创建Secret的方式,以及在Pod中如何引用。
前提条件
镜像仓库连接地址
-
登录Alaya NeW官网,点击产品中心/AI资源/混闪-镜像,切换至私有镜像Tab页面。
-
在右上角选择开通弹性容器集群和开通镜像仓库的智算中心,然后点击私有镜像页签,查看镜像详情信息。

获取上图所示的访问地址部分即为镜像仓库连接地址,无需后面的项目名称信息。
获取用户名和密码
-
方式一:在开通镜像仓库以后,用户名和密码会以短信的形式发送。
-
方式二:如果您没有收到短信提醒或者误删了短信,您可以在产品中心/客户中心/权限管理/访问管理页面重置用户名和密码。
-
在页面右上角单击用户头像,点击用户名链接,切换至权限管理/访问管理。
-
在访问管理页面选择混闪-镜像页签,然后单击目标智算中心操作列的重置,重置镜像仓库的用户名和密码。

-
重置结果如下图所示。

-
命令行方式创建密钥
使用如下命令创建密钥,注意替换如下内容:
- 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.jsoncertutil -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不会自动可见。
最后更新于
