在使用k8s的过程中,经常遇到k8s.gcr.io的镜像无法下载的问题,现在国内有不少镜像站点,可以通过镜像站点下载
比如我想在k8s中部署 metrics-server 服务,发现其yaml文件中使用如下:见黄色标记部分
containers:
- name: metrics-server
image: k8s.gcr.io/metrics-server-amd64:v0.3.6
args:
- --cert-dir=/tmp
- --secure-port=4443
ports:
- name: main-port
containerPort: 4443
protocol: TCP
securityContext:
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
imagePullPolicy: IfNotPresent
volumeMounts:
- name: tmp-dir
mountPath: /tmp
nodeSelector:
beta.kubernetes.io/os: linux
kubernetes.io/arch: "amd64"
这里可以通过国内镜像来下载,我这里使用的是阿里云的k8s镜像站点:registry.cn-hangzhou.aliyuncs.com/google_containers
下载下来的镜像的REPOSITORY 变成了registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64如图:
而上述了yaml文件中的镜像名为:k8s.gcr.io/metrics-server-amd64:v0.3.6 所有,
如果不更改名称,默认还是会从google下载而不会使用本地文件
为了让docker 在本地镜像存在的镜框下,直接使用本地镜像,imagePullPolicy: IfNotPresent 而不是imagePullPolicy: Always
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64 k8s.gcr.io/metrics-server-amd64:v0.3.6
更改镜像tag之后,原来的镜像可以删除了,
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
群集新增的services都安装在node上面,所以,镜像需要导出到所有的node示例上面
docker save -o metrics-serveramd64:v0.3.6.tar k8s.gcr.io/metrics-server-amd64:v0.3.6 #把镜像导出到当前目录下的 metrics-serveramd64:v0.3.6.tar 文件中
然后复制到各个node上面,然后 docker load <metrics-serveramd64:v0.3.6.tar 即可
当然也可以直接修改 yaml文件的中 k8s.gcr.io/metrics-server-amd64:v0.3.6 仓库,修改为阿里云的也是可以的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!