• Post author:
  • Post category:运维
  • Post comments:2评论
  • Reading time:3 mins read

K8S使用私有镜像仓库拉取镜像并不复杂,只需要创建登陆私有仓库的Secret资源,然后将Secret添加到对应的命名空间下的ServiceAccount中就可以了。

创建阿里云私有容器仓库

首先登陆阿里云账号,打开容器镜像服务页面,创建个人版实例。

创建完成后点击个人实例进入到概览页面。

首先创建命名空间,命名空间会包含在镜像名称内,比如你的命名空间叫test,镜像名称叫Nginx,全名为registry-vpc.cn-shanghai.aliyuncs.com/test/Nginx:latest,需要注意的是免费版限制使用3个命名空间。

此处有两个配置,分别是自动创建仓库,和默认仓库类型,解释如下:

  • 自动创建仓库:当开启自动创建后,可以在控制台仓库不存在的情况下,直接推送,系统会自动创建对应的仓库。
  • 默认仓库类型:当你开启“自动创建仓库”功能时,这个配置才有作用。这个配置将决定系统帮你创建的仓库默认是公开还是私有。

然后在访问凭证配置镜像仓库的访问方式,我选择的是固定密码。

之后可以选择配置代码源,可以根据你的代码仓库的webhook自动构建镜像,但我自己另外使用了别的ci构建镜像。

之后点镜像仓库,可以手动创建镜像仓库,当然你也可以直接push镜像来自动创建仓库。

如何login以及 如何push和pull镜像,仓库的操作指南已经说的很清楚了,需要注意的是网络地址的选择,分别有公网地址、专有网络、经典网络,如果你需要本地访问你的仓库,可能需要使用公网地址来访问,注意login和push、pull操作的地址要统一,不然登陆凭证不识别,如果你是要在云服务器上进行以上操作,比如cicd的时候使用,可以使用专有网络来操作,但是需要注意的是,要选择与你服务器相同的地域,比如我这里是华东2上海。这里可以看到username就是你的阿里云账号,而仓库密码是前文中配置的固定密码。

创建Secret

这里有两种方式,一种是写Secret的yaml文件,传入docker凭证的json文件base64编码,个人觉得有点麻烦,本文只介绍另一种方式,也就是命令行生成的方式:

kubectl create secret docker-registry <认证名称> \
--docker-server=<镜像仓库地址> \
--docker-username=<登录名> \
--docker-password=<密码> 

注意如果你使用阿里云镜像仓库的话,根据需要来选择仓库的地址。

将Secret添加到ServiceAccount

使用以下命令进行添加:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-registry"}]}'

注意命名空间要与使用该凭证的资源一致,比如你的Deployment资源内要拉取该仓库的镜像,那么该ServiceAccount和该Deployment要同属一个命名空间,你可以在上述命令末尾使用-n参数来指明命名空间,然后后面的name字段的value要与你上面定义的Secret的名称保持一致。

之后就可以在K8S内使用私有镜像仓库内的镜像了。

葫芦

葫芦,诞生于1992年8月11日,游戏宅,胶佬,爱好摸鱼,一个干过超市收银,工地里搬过砖,当过广告印刷狗,做过电焊铁艺的现役.Net程序员。

这篇文章有 2 个评论

发表回复