前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TKE集群如何拉取不同镜像仓库镜像

TKE集群如何拉取不同镜像仓库镜像

原创
作者头像
聂伟星
发布2021-12-15 14:04:29
1.9K0
发布2021-12-15 14:04:29
举报

最近遇到了很多在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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 拉取阿里云镜像

代码语言:javascript
复制
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镜像

命令创建方式如下

代码语言:javascript
复制
kubectl create secret docker-registry harbor-pull-secret  --namespace=image-pull-ns --docker-username=xxxx --docker-password=xxxxx --docker-server=harbor.tke.niewx.cn

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 拉取腾讯云个人版(ccr)镜像仓库镜像
    • 1.1 拉取同地域镜像
      • 1.2 拉取不同地域下的镜像
      • 2. 拉取腾讯云企业版(tcr)镜像仓库镜像
        • 2.1 免密拉取tcr镜像
          • 2.2 内网拉取镜像
            • 2.3 公网拉取镜像
            • 3. 拉取第三方镜像仓库镜像
              • 3.1 拉取阿里云镜像
                • 3.2 拉取自建harbor镜像
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档