草庐IT

k8s镜像下载不下来?利用 github Action 自己动手一次性解决难题,丰衣足食

Young丶 2023-06-02 原文

docker-image-syncer

无论是在学习k8s还是正式环境部署k8s中,第一步安装k8难倒了各大英雄好汉。原因是k8s 各种组件镜像在谷歌服务器上(k8s.gcr.io),而我们有墙的存在,所以会经常性的下载失败。解决办法是搭梯子,或者是使用其他镜像源。

本仓库使用 aliyun image-syncer 配合 github action 同步 k8s docker镜像(k8s.gcr.io) 到 dockerhub。提高k8s docker镜像(k8s.gcr.io)成功率,解决云原生第一大难题。

docker-image-syncer 运行原理

  1. docker pull 下拉所需镜像

    由于github action 运行再国外的github服务器的,没有qiang一说,docker pull 是很方便的

  2. docker tag 修改镜像tag

  3. docker push 推送镜像到相应docker register

Getting Started

1. 方式一

提交 PR ,和合并到 main 分支之后,自动执行github action同步到 dockerhub

2. 方式二

2.1、fork 这个仓库, 创建你自己的docker register 账号密码:

    1. Settings
    1. Secrets
    1. New Repository Secrets
    1. Add your DOCKER_USERNAME and DOCKER_PASSWORD key values.

2.2、修改images.json 文件,改成你需要的

{
  "quay.io/coreos/kube-rbac-proxy": "admin4j/kube-rbac-proxy",
  "k8s.gcr.io/metrics-server/metrics-server": "admin4j/metrics-server",
  "k8s.gcr.io/ingress-nginx/controller": "admin4j/ingress-nginx-controller",
  "k8s.gcr.io/git-sync/git-sync": "admin4j/git-sync",
  "gcr.io/kaniko-project/executor:debug,latest": "admin4j/kaniko-executor",
  "k8s.gcr.io/kube-state-metrics/kube-state-metrics": "admin4j/kube-state-metrics",
  "k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner": "admin4j/nfs-subdir-external-provisioner",
  "k8s.gcr.io/prometheus-adapter/prometheus-adapter": "admin4j/prometheus-adapter",
  "k8s.gcr.io/kube-apiserver": "admin4j/kube-apiserver",
  "k8s.gcr.io/kube-controller-manager": "admin4j/kube-controller-manager",
  "k8s.gcr.io/kube-scheduler": "admin4j/kube-scheduler",
  "k8s.gcr.io/kube-proxy": "admin4j/kube-proxy",
  "k8s.gcr.io/pause": "admin4j/pause",
  "k8s.gcr.io/etcd": "admin4j/etcd",
  "coredns/coredns": "admin4j/coredns"
}

修改auth.json,可以添加其他 docker register源

{
  "registry.hub.docker.com": {
    "username": "${USERNAME}",
    "password": "${PASSWORD}"
  }
}

2.3、检查 action logs

Action 执行完后,检查成果

dockerhub

k8s使用镜像

  1. 方式一
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list

# 下载镜像
# 此镜像在kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替代方案
images=(
    kube-apiserver:v1.23.15
	kube-controller-manager:v1.23.15
	kube-scheduler:v1.23.15
	kube-proxy:v1.23.15
	pause:3.6
	etcd:3.5.1-0
	coredns/coredns:v1.8.6
)

for imageName in ${images[@]} ; do
	docker pull admin4j/$imageName
	docker tag admin4j/$imageName 		k8s.gcr.io/$imageName
	docker rmi admin4j/$imageName
done

  1. 方式二

    直接修改 yml 部署文件的 image 属性

仓库地址

https://github.com/admin4j/docker-imager-sync
https://github.com/AliyunContainerService/image-syncer
https://hub.docker.com/repositories/admin4j

有关k8s镜像下载不下来?利用 github Action 自己动手一次性解决难题,丰衣足食的更多相关文章

  1. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  2. k8s-污点 (Taint)和容忍 (Tolerations) - 2

    文章目录一、污点(Taint)1、污点简介2、污点的组成3、污点的设置和去除二、容忍(Tolerations)1、容忍简介2、容忍的基本用法3、示例4、多污点与多容忍配置三、警戒(cordon)和转移(drain)四、Pod启动阶段(相位phase)五、故障排除步骤一、污点(Taint)节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点Taint则相反,它使节点能够排斥一类特定的PodTaint和Toleration相互配合,可以用来避免Pod被分配到不合适的节点上。每个节点上都可以应用一个或多个taint,这表示对于那些不能容忍这些taint的Pod,是不会被

  3. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  4. K8s部署PHP项目 - 2

    前言    前端时间PHP项目部署升级需要,需要把Laravel开发的项目部署K8s上,下面以laravel项目为例,讲解采用yaml文件方式部署项目。一、部署步骤1.创建Dockerfile文件Dockerfile是一个用来构建镜像的文本文件,在容器运行时,需要把项目文件和项目运行所必须的组件安装其中。#基础镜像FROMphp:7.4-fpm#时区ARGTZ=Asia/Shanghai#更换容器时区RUNcp"/usr/share/zoneinfo/$TZ"/etc/localtime&&echo"$TZ">/etc/timezone#替换成阿里apt-get源RUNsed-i"s@http

  5. 【k8s】二、containerd的安装 - 2

    目录前言安装containerd解压安装配置成systemd任务安装runc​编辑安装cni配置containerd镜像源containerd基本使用拓展阅读nerdctl工具安装及使用整体脚本总结写在后面前言上一篇文章,我们介绍了虚拟机的基础环境以及基础的网络配置,还有一些k8s节点要用到基础环境配置。本文将带领大家把containerd给安装了containerd的项目官方地址https://github.com/containerd/containerdcontainerd的发布版本地址如下https://github.com/containerd/containerd/releases

  6. idea连接远程k8s集群使用kubernetes-client - 2

    文章目录一.k8s集群修改config1.1备份当前k8s集群配置文件1.2删除当前k8s集群的apiserver的cert和key1.3生成新的apiserver的cert和key1.4刷新admin.conf1.5重启apiserver1.6刷新.kube/config二.安装kubectl2.1下载kubectl2.2配置kubectl三.使用kubernetes-client操作k8s集群3.1依赖3.2注意(可忽略)3.3创建StatefulSet3.4运行shell命令3.5删除StatefulSet3.6线上运行注意一.k8s集群修改config因为默认的是内网IP,复制出来后,

  7. ruby-on-rails - 如何在不下载文件的情况下使用其 URL 检查文件是否存在? - 2

    我需要编写代码,通过检查文件的URL来确定文件是否存在。目前我实现了这个:error_code=400;response=Net::HTTP.get_response(URI(url));returnresponse.code.to_i但是,它不能正常工作,因为每次它都下载文件,如果我有大文件或很多文件,这真的很慢。如何在不下载文件的情况下判断远端是否存在文件? 最佳答案 如果你想使用Rubys包含的Net::HTTP那么你可以这样做:uri=URI(url)request=Net::HTTP.newuri.hostresponse

  8. ruby-on-rails - 如何搭建rubygems镜像服务器? - 2

    我的工作场所禁止我们访问互联网,因此我们无法连接到ruby​​gems.org以远程安装gems。我可以在家访问ruby​​gems.org。有没有一种简单的方法可以让我在家里下载和更新我们需要的gems,然后将它们(通过可移植硬盘或其他东西)同步到我工作场所的本地gems镜像服务器,以便其他同事可以从那个镜像服务器安装gem? 最佳答案 您可以使用rubygems-mirror镜像gem和Geminabox接待他们。安装rubygems镜像:$geminstallrubygems-mirror编辑~/.gem/.mirrorrc:

  9. 把java项目打包成镜像在docker中运行 - 2

    1,首先要准备一个maven项目,把它打成jar包如下图:找Maven->package->运行好了之后下面有路径。 2,在docker下创建一个目录mkdir  /mydocker3,把打包好的java项目用Xtfp(这是一个软件,专门用来连接虚拟机上传文件的)把那个jar包拉到 /mydocker下面   连接好了之后直接找到那个jar包 直接拉过去4,然后在同一目录下建一个文件vim Dockerfile 5,并进行编辑(这个文件非常的重要!!!)#基础镜像使用javaFROM java:8#作者MAINTAINER xiaoliu# VOLUME指定临时文件目录/tmp 在主机/var

  10. javascript - 代码镜像2 : How to format a pasted content? - 2

    在CodeMirror2中是否可以在类似“onPaste”的事件之后格式化插入的内容?-我想在粘贴后缩进剪贴板中的内容。我已经知道使用JavaScript无法访问剪贴板。所以我认为也没有可能创建具有剪切/复制/粘贴功能的上下文菜单?-我可以创建自己的JS剪贴板还是有现有的解决方案?谢谢!莱克斯 最佳答案 我花了一些时间来解决这个问题,所以如果它对任何人有帮助,下面是我拦截粘贴并将每个选项卡替换为2个空格的方式:editor.on("beforeChange",(cm,change)=>{if(change.origin==="pas

随机推荐