首页 > 其他分享 >k8s 镜像下载并上传

k8s 镜像下载并上传

时间:2022-12-16 18:25:53浏览次数:45  
标签:name kubernetes version file release 镜像 logger k8s 上传

该脚本用于将多个版本的k8s官方的镜像及二进制文件下载到本地,并将镜像上传到自己的docker仓库中去
直接运行即可(需要保障运行脚本的机器能够访问k8s镜像仓库,并且已经登陆了docker仓库)

upload_k8s_images_to_docker.sh

#!/bin/bash


# set -x
function logger() {
  TIMESTAMP=$(date +'%Y-%m-%d %H:%M:%S')
  case "$1" in
    debug)
      echo -e "$TIMESTAMP \033[36mDEBUG\033[0m $2"
      ;;
    info)
      echo -e "$TIMESTAMP \033[32mINFO\033[0m $2"
      ;;
    warn)
      echo -e "$TIMESTAMP \033[33mWARN\033[0m $2"
      ;;
    error)
      echo -e "$TIMESTAMP \033[31mERROR\033[0m $2"
      ;;
    *)
      ;;
  esac
}

download_images() {
    chmod +x kubeadm
    images=($(./kubeadm config images list --kubernetes-version=${kubernetes_version}))
    logger info "images: ${images}"
    pusded=$(cat ../pusded.txt)
    for imagename in ${images[@]}; do
        if [[ ! "${pusded[*]}" =~ ${imagename} ]]; then
            docker pull $imagename || { logger error "pull 镜像 $imagename 失败!"; exit 1; }
            imagename_tag=xwjh/$(echo $imagename | awk -F '/' '{print $NF}')
            docker tag $imagename $imagename_tag
            docker push $imagename_tag || { logger error "上传镜像 $imagename_tag 失败!"; exit 1; }
            echo $imagename >> ../pusded.txt
            docker rmi -f $imagename_tag
        fi
    done
}

download_k8s() {
  file_name="kubeadm"
  if [[ -f "${file_name}" && -f "${file_name}.sha256" ]]; then
    echo "$(cat ${file_name}.sha256) ${file_name}" | sha256sum --check >/dev/null 2>&1 || { logger error "${file_name} sha256sum failed."; exit 1; }
  else
    rm -f "${file_name}"{,.sha256}
    wget -nv https://storage.googleapis.com/kubernetes-release/release/${kubernetes_version}/bin/linux/amd64/"${file_name}"{,.sha256}
  fi

  file_name="kubelet"
  if [[ -f "${file_name}" && -f "${file_name}.sha256" ]]; then
    echo "$(cat ${file_name}.sha256) ${file_name}" | sha256sum --check >/dev/null 2>&1 || { logger error "${file_name} sha256sum failed."; exit 1; }
  else
    rm -f "${file_name}"{,.sha256}
    wget -nv https://storage.googleapis.com/kubernetes-release/release/${kubernetes_version}/bin/linux/amd64/"${file_name}"{,.sha256}
  fi

  file_name="kubectl"
  if [[ -f "${file_name}" && -f "${file_name}.sha256"  ]]; then
    echo "$(cat ${file_name}.sha256) ${file_name}" | sha256sum --check >/dev/null 2>&1 || { logger error "${file_name} sha256sum failed."; exit 1; }
  else
    rm -f "${file_name}"{,.sha256}
    wget -nv https://storage.googleapis.com/kubernetes-release/release/${kubernetes_version}/bin/linux/amd64/"${file_name}"{,.sha256}
  fi

  if [ -f /etc/debian_version ]; then
    if [ ! -f kubelet.service ]; then
      wget -nv "https://raw.githubusercontent.com/kubernetes/release/${kubernetes_release_version}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service"
    fi
    if [ ! -f 10-kubeadm.conf ]; then
      wget -nv "https://raw.githubusercontent.com/kubernetes/release/${kubernetes_release_version}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf"
    fi

  elif [ -f /etc/redhat-release ]; then
    if [ ! -f kubelet.service ]; then
      wget -nv "https://raw.githubusercontent.com/kubernetes/release/${kubernetes_release_version}/cmd/kubepkg/templates/latest/rpm/kubelet/kubelet.service"
    fi

    if [ ! -f 10-kubeadm.conf ]; then
      wget -nv "https://raw.githubusercontent.com/kubernetes/release/${kubernetes_release_version}/cmd/kubepkg/templates/latest/rpm/kubeadm/10-kubeadm.conf"
    fi
  else
    echo "ERROR: no deb or rpm."
    exit 1;
  fi
}


main() {
  logger info "开始..."
  which curl >/dev/null 2>&1 || yum install curl || { logger error "安装 curl 失败!"; exit 1; }
  jq --version >/dev/null 2>&1
  if [[ $? != 0 ]]; then
    jq_tag="$(curl -sSL https://api.github.com/repos/stedolan/jq/releases/latest | grep '  "tag_name": ' | awk -F'"' '{print $4}' || exit 1;)" && \
           curl --retry 5 -sSL "https://github.com/stedolan/jq/releases/download/${jq_tag}/jq-linux64" -o /usr/bin/jq && chmod +x /usr/bin/jq || { logger error "安装 jq 失败!"; exit 1; }
  fi
  rm -rf releases
  logger info "获取最新的releases文件(https://api.github.com/repos/kubernetes/kubernetes/releases)"
  wget -nv https://api.github.com/repos/kubernetes/kubernetes/releases || { logger error "获取releases失败!"; exit 1; }
  releases=($(cat releases | jq -r '.[].tag_name'|grep -Pv 'alpha|beta|rc'))
  # logger info "releases: ${releases}"
  kubernetes_release_version="$(curl --retry 5 -sSL https://api.github.com/repos/kubernetes/release/releases/latest | jq -r '.tag_name' || exit 1;)"
  logger info "kubernetes_release_version: ${kubernetes_release_version}"
  
  for version in ${releases[@]}; do
      kubernetes_version=$version
      logger info "kubernetes_version: ${kubernetes_version}"
      mkdir -p $kubernetes_version
      logger info "开始下载..."
      cd $kubernetes_version && download_k8s
      download_images
      cd ..
  done
}
main

标签:name,kubernetes,version,file,release,镜像,logger,k8s,上传
From: https://www.cnblogs.com/xwjh/p/16988031.html

相关文章

  • 公有镜像仓库的优势和局限性
     公有镜像仓库是指暴露在互联网、可以从互联网的任意位置拉取镜像的镜像仓库,比如docker.io、quay.io等熟知的公有镜像仓库,企业可以通过公有镜像仓库优缺点对比来拉取合适......
  • 利用python实现typora自动上传图片
    利用python实现Typora内图像的上传缘由及目的在之前的markdown文件书写中,采用Notion软件。但是后来发现Notion的导出存在很多问题,尤其是在上传到博客园时,对于图片的处理......
  • SiteFactory支持Word内容一键上传
    ​ ueditor粘贴不能粘贴word中的图片是一个很头疼的问题,在我们的业务场景中客户要求必须使用ueditor并且支持word的图片粘贴,因为这个需求头疼了半个月,因为前端方面因为安......
  • Asp.Net上传文件示例(保存文件路径到数据库)
    把下面的代码保存为Upload.aspx即可运行(事先在同目录下建立一个Upload文件夹保存上传的文件,再建立一个数据库、表Upload,字段ID:自动编号,FilePath:文本型):<%@ImportName......
  • 【快应用】重新打开快应用, 保存/上传的图片资源不显示
    ​ 现象描述将上传的图片或者保存在手机本地的图片在快应用中显示出来,但是退出快应用后再次打开会无法显示. 问题分析此问题是由于将图片的路径保存在Temp区(表示从......
  • 部署k8s详细步骤(避坑版)
    部署k8s详细步骤(避坑版)一、docker部署1.命令一键安装(公网)curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun2.启动并查看docker状态systemctlena......
  • 【快应用】重新打开快应用, 保存/上传的图片资源不显示
     现象描述将上传的图片或者保存在手机本地的图片在快应用中显示出来,但是退出快应用后再次打开会无法显示.问题分析此问题是由于将图片的路径保存在Temp区(表示从外部映射过......
  • 支付宝 上传应用公钥并获取支付宝公钥(新版接入)
    支付宝支付新版接入方式:开通企业支付宝帐号》开通四个产品(APP支付电脑网站支付手机网站支付)>>再开通开放平台(选择自研开发者)>>在开放平台中创建应用>>添加需要的功能>>......
  • 原生JS加jQuery实现拖拽和单击上传文件
    单击实现用的是html的input标签,设置multiple='multiple'之后就可以同时选多个文件了<inputtype="file"multiple='multiple'/>拖拽实现依赖event.dataTransfer实现event.da......
  • docker私有镜像仓库registry基础管理命令系列一
    registry使用前必备:必须安装Docker引擎version1.6.0 基础命令:1.启动一个registry容器:dockerrun-d-p5000:5000--nameregistryregistry:latest2.从远程仓......