让 K8S 在 GFW 内愉快的航行
前言
K8S(kubernetes) 日渐火爆,但由于出自Google,对国内的用户及其的不友好。
而之前的 *.azk8s.cn
全能镜像站,也于 2020年4月2日限制了对 Azure China 之外的 IP访问,无疑又是雪上加霜 (很多生产集群应该开始跳脚了)。
https://github.com/Azure/container-service-for-azure-china/issues/58
ps: 这么大的事件,居然没有提前公告。。。
今天我们来梳理一下,K8S在国内如何愉快的航行。
首先梳理一下国内K8S 需要翻越的几座墙。
Linux Source
用于安装 docker、kubelet、kubectl、kubeadm 等软件。
容器镜像库
目前常用的K8S镜像库有
- docker.io (docker hub公共镜像库)
- gcr.io (Google container registry)
- k8s.gcr.io (等同于 gcr.io/google-containers)
- quay.io (Red Hat运营的镜像库)
国内应对之法
Linux Source
Linux的源镜像比较简单,这边推荐阿里的镜像源。
Docker CE: https://developer.aliyun.com/mirror/docker-ce
Kubernetes: https://developer.aliyun.com/mirror/kubernetes
容器镜像库
镜像库是一个比较难找的资源,由于 *.azk8s.cn
的关闭目前 gcr.io
还没有可替代资源,如大家有相关资源可以联系我,我会添加到文章上。
Docker Hub
关于 Docker Hub 国内有比较多的加速镜像源。
例如:
-
阿里云镜像加速器 (推荐, 需要注册用户)
-
DaoCloud镜像加速器
-
七牛云镜像加速器
- 加速器地址: https://reg-mirror.qiniu.com
使用方式
修改Docker的配置,为其添加 registry-mirrors ,需要重启docker。
配置文件路径位于 /etc/docker/daemon.json
{ "registry-mirrors": ["https://f1361db2.m.daocloud.io"], }
# 重启docker systemctl daemon-reload && systemctl restart docker
说明
如果大家在生产环境使用,推荐优先使用阿里云的镜像加速器,虽然注册麻烦了一些。
这是我目前用下来较为稳定的加速器 (此处极度怀念 dockerhub.azk8s.cn )。
quay.io
关于 quay.io 可用源很少,目前有如下镜像站
- quay-mirror.qiniu.com (七牛云, 推荐, 但没有找到长期支持的声明)
- quay.mirrors.ustc.edu.cn (中科大, 经常不可用, 不推荐)
使用方式
将镜像中的 quay.io
替换为 quay-mirror.qiniu.com
,例如:
quay.io/prometheus/node-exporter:v0.18.1 # 替换成如下格式 quay-mirror.qiniu.com/prometheus/node-exporter:v0.18.1
说明
这两个源都不是长期稳定
七牛云目前可用, 但没有找到任何官方说明长期支持。
中科大声明有维护, 但测试后基本呈现不可用状态。
gcr.io 和 k8s.gcr.io
先说结果,我没有找到这两个源的通用镜像站。
这是最难的一部分,也花费了我很多时间。
k8s.gcr.io 是 gcr.io/google-containers 的别名,所以
k8s.gcr.io/<image>:<tag> == gcr.io/google-containers/<image>:<tag>
目前只有折中方案可以曲线救国,但这在使用上还是造来的不变,没有稳定的镜像同步途径,如果你能FQ那么还好一些,如果不行很多K8S生态中的新兴技术你可能很难体验了 (tekton、knative)等,这种情况下你只能去国内镜像站找别人传上来的副本,如:阿里云第三方镜像、dockerhub等。
目前我找到了如下镜像库:
-
googlecontainersmirror (我自己从 gcr.io 同步到Docker Hub的镜像, 只包含核心的几个镜像和版本, 能保障K8S正常运行)
- registry.aliyuncs.com/google_containers (阿里云第三方用户上传的镜像,镜像比较多)
使用方式
将镜像中的 k8s.gcr.io
或 gcr.io/google-containers
替换为 registry.aliyuncs.com/google_containers
或 googlecontainersmirror
,例如:
registry.aliyuncs.com/google_containers
gcr.io/google-containers/kube-proxy:v1.18.0 # 替换为 registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 # 替换为 registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0
googlecontainersmirror
gcr.io/google-containers/kube-proxy:v1.18.0 # 替换为 googlecontainersmirror/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 # 替换为 googlecontainersmirror/kube-proxy:v1.18.0
宣称可以提供镜像的站点 (经测试全部不可用):
- gcr.mirrors.ustc.edu.cn (经测试不可用)
- gcr-mirror.qiniu.com (经测试不可用)
说明
- 为什么要自己同步镜像而不直接使用现有的镜像库?
因为现有的镜像库我没找到任何官方认证,应该是个人传上去的,我们担心跑在生产的K8S集群遭遇到安全问题。
对于大家来说都是第三方同步的镜像大家可以自行选择,如果是生产用还是推荐推到自己的镜像库来保障镜像安全。
- googlecontainersmirror 在Docker Hub上拉取速度会不会很慢?
这边取巧的利用了DockerHub加速器,拉取速度取决于加速器的速度,一般情况下很快。
总结
Linux软件镜像源
Docker CE: https://developer.aliyun.com/mirror/docker-ce
Kubernetes: https://developer.aliyun.com/mirror/kubernetes
容器镜像源 (删除线为不可用)
源 | 镜像 |
---|---|
Docker Hub | https://<user_code>.mirror.aliyuncs.com, https://f1361db2.m.daocloud.io, https://reg-mirror.qiniu.com, |
k8s.gcr.io | googlecontainersmirror, registry.aliyuncs.com/google_containers, |
quay.io | quay-mirror.qiniu.com, |
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
利用Grafana和Arthas自动抓取异常Java进程的线程堆栈
前言 近期发现业务高峰期时刻会出现CPU繁忙导致的timeout异常,通过监控来看是因为Node上面的一些Pod突发抢占了大量CPU导致的。 问: 没有限制CPU吗?是不是限制的CPU使用值就可以解决了呢? 解: 其实不能根本解决这个问题,因为使用的容器引擎是Docker,而Docker是使用了cgroups技术,这就引入了一个老大难的问题,cgroup的隔离性。当问题发生时并没有办法把异常CPU进程直接摁住,而会有短暂的高峰,现象为:限制了CPU为2核,突发时CPU可能是4、5、6等,然后容器会被kill掉,K8S会尝试重建容器。 那么该如何解决? 使用隔离性更好的容器引擎,如 kata(VM级别)。 优化程序 方案1 我们可以知道方案1解决的比较彻底,而且只需要全局处理一次即可,但技术比较新颖,不知道会不会带来其它问题,我们之后准备拿出部分Node尝试kata container。 方案2 对应用开发者要求比较高,需要对应的开发者针对性介入,短期收益很高,我们先部署了这种。 如何实施? 我们知道程序在运行中,除非特别严重的BUG,CPU高峰一般非常短暂,这时候靠人肉抓包基本上是来不...
- 下一篇
一文教你删除负载均衡实例的步骤
云栖号快速入门:【点击查看更多云产品快速入门】不知道怎么入门?这里分分钟解决新手入门等基础问题,可快速完成产品配置操作! 当您不再需要负载均衡服务时,可以将其删除,避免不必要的计费。删除负载均衡实例不会删除后端ECS,也不会影响后端ECS的运行。 背景信息 操作步骤 1.登录负载均衡管理控制台。2.在实例管理页面,选择负载均衡实例的所属地域。3.找到目标实例,单击列表底部的释放设置或者选择操作列的更多 > 释放设置。4.在释放设置对话框内,根据需要选择立即释放或者定时释放。如果您选择定时释放,设置自动释放的时间。 5.单击下一步。6.单击确定,完成负载均衡实例的释放。 本文来自 阿里云文档中心 负载均衡 删除负载均衡实例 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/zhibo 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果