TKE集群如何拉取不同镜像仓库镜像
最近遇到了很多在tke集群部署服务出现拉取镜像失败的问题,很多人碰到这个问题不知道该怎么解决,下面我们来讲讲在tke上如何配置拉取不同镜像仓库的镜像。
1. 拉取腾讯云个人版(ccr)镜像仓库镜像
ccr是腾讯云默认给个人开发者免费使用的镜像仓库,如果你需要在tke集群拉取ccr镜像仓库的镜像,可以不用单独配置镜像拉取秘钥(前提是集群和镜像仓库是同地域)。
ccr镜像仓库分为国内和国外地域,国内地域统一访问地址是ccr.ccs.tencentyun.com,控制台可以在广州地域展查看个人版实例。但是您仍可在北京,上海等地域跨城访问托管在广州的个人版镜像仓库。其他地域都是在tcr控制台对应的地域可以查看到。
1.1 拉取同地域镜像
如果tke集群和ccr实例是同地域,那么拉取镜像,只需要在集群对应的namespace下发qcloudregistrykey这个秘钥即可,然后在工作负载配置下镜像拉取秘钥即可,如果是控制台创建的namespace,创建时候可以选择是否下发。
如果你的namespace不是控制台创建,则需要手动下发下
当保证命名空间下发了qcloudregistrykey这个秘钥后,在工作负载配置下镜像拉取秘钥即可
1.2 拉取不同地域下的镜像
如果是拉取不同地域的镜像,则需要手动配置镜像拉取秘钥才行,很多人会奇怪为什么qcloudregistrykey这个就不行呢?这里解释下,不同地域下的tke集群都会默认有qcloudregistrykey,但是不同地域配置的域名是不一致的,也就是国内默认地域是ccr.ccs.tencentyun.com,但是香港地域配置的是hkccr.ccs.tencentyun.com,所以扩地域拉取镜像需要单独配置镜像拉取秘钥才行,下面我说明下在广州地域拉取香港地域ccr的镜像如何配置。
这里也可以用命令创建secret
kubectl create secret docker-registry <secret名称(docker-image-secret)> --namespace=<命名空间名称> --docker-username=<镜像仓库用户名> --docker-password=<镜像仓库密码> --docker-server=<镜像仓库地址>
看事件日志,这里说明已经成功在广州地域的tke集群拉取香港地域的镜像了,说明镜像拉取秘钥配置没问题。
2. 拉取腾讯云企业版(tcr)镜像仓库镜像
由于ccr一般是提供给个人使用,有很多限制,所以现在很多公司都迁移到企业版了,也是就tcr,下面我们来说说如何在tke集群拉取tcr镜像。
2.1 免密拉取tcr镜像
tke为了能够更加便捷的从tcr上拉取镜像,这里开发了一款插件,用来免密拉取tcr镜像,具体可以参考文档https://cloud.tencent.com/document/product/457/49225 ,使用免密拉取插件,需要先在tcr将集群所在vpc接入内网访问,然后开启自动解析,最后在tke集群安装插件即可,具体操作步骤如下
这里需要注意下,如果你在tcr的内网开启了自动解析,安装tcr组件时候可以不配置内网访问配置,因为自动解析默认用private dns在vpc进行了自动解析配置,但是如果你没开自动解析,需要配置内网访问配置,配置后,会部署一个DaemonSet用来在每个节点配置tcr域名和内网访问ip的hosts
当组件安装好之后,pod拉取镜像就可以不用配置imagePullSecrets,直接拉取镜像了。这里需要注意下,deployment不要配置
imagePullSecrets,YAML 中重复指定 ImagePullSecret,从而造成节点使用错误的镜像拉取访问凭证,引起拉取失败。
免密拉取插件问题
因为指定imagePullSecrets会导致镜像拉取失败,这里就产生了一个问题,就是当我一个pod里面有多个容器,但是不同容器镜像是不同镜像仓库,比如我一个是ccr,一个是tcr,这样就会导致tcr镜像拉取失败。
当前这个问题的解决方案有2种,一种就是将镜像都放到tcr上,另外一种就是不通过免密自动下发,手动配置tcr的镜像仓库拉取秘钥,然后在yaml配置ccr和tcr的镜像拉取秘钥。
2.2 内网拉取镜像
当然拉取tcr镜像也可以不安装组件,如果是内网拉取,首先还是要在tcr配置内网访问并开启自动解析。如果是新建namespace,可以配置自动下发仓库秘钥。
如果是已有的命名空间则需要手动创建镜像拉取秘钥。先在实例生成一个永久访问凭证,然后创建secert。
如果你不习惯控制台操作,或者没有控制台权限,也可以用kubectl创建secret
kubectl create secret docker-registry <secret名称(docker-image-secret)> --namespace=<命名空间名称> --docker-username=<镜像仓库用户名> --docker-password=<镜像仓库密码> --docker-server=<镜像仓库地址>
秘钥创建好之后,在创建工作负载指定ImagePullSecret即可
2.3 公网拉取镜像
公网拉取镜像和内网拉取镜像配置步骤差不多,新建namespace可以自动下发,存量的namespace需要手动创建secret,具体可以参考2.2,公网需要注意的是白名单控制,这里需要获取你集群的公网出口ip,然后在tcr侧公网访问配置好白名单。
tke集群的公网出口ip,如果你节点都是通过nat访问公网,则白名单加上nat的eip即可,如果不是nat访问公网,则需要将每个节点公网ip加入白名单。
3. 拉取第三方镜像仓库镜像
如果你tke集群拉取的镜像不是腾讯云提供的,是友商的,或者自建的,则需要手动在namespace配置secret,这里我们说下如何在tke拉取阿里云镜像仓库和自建harbor的镜像。
3.1 拉取阿里云镜像
kubectl create secret docker-registry aliyun-pull-secret --namespace=image-pull-ns --docker-username=xxxx --docker-password=xxxxx --docker-server=registry.cn-hangzhou.aliyuncs.com
创建好秘钥后,在工作负载配置,从事件日志可以看能成功从阿里云正常拉取镜像了。
3.2 拉取自建harbor镜像
命令创建方式如下
kubectl create secret docker-registry harbor-pull-secret --namespace=image-pull-ns --docker-username=xxxx --docker-password=xxxxx --docker-server=harbor.tke.niewx.cn
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击