前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s-provision - 获取镜像

k8s-provision - 获取镜像

作者头像
后端云
发布2022-11-25 16:43:59
2820
发布2022-11-25 16:43:59
举报
文章被收录于专栏:后端云后端云

k8s-provision - 获取镜像

fetch-images.sh

代码语言:javascript
复制
#!/bin/bashset -euo pipefailfunction usage() {
    cat <<EOF
Usage: $0 <k8s-cluster-dir> [source-image-list]

    Fetches all images from the cluster provision source and manifests. Returns a list that is sorted and
    without double entries.

    If source-image-list is provided this is taken as an input and added to the result.

EOF}function check_args() {
    if [ "$#" -lt 1 ]; then
        usage        exit 1
    fi
    if [ ! -d "$1" ]; then
        usage        echo "Directory $1 does not exist"
        exit 1
    fi}function main() {
    check_args "$@"

    temp_file=$(mktemp)
    trap 'rm -f "${temp_file}"' EXIT SIGINT SIGTERM    provision_dir="$1"
    image_regex='([a-z0-9\_\.]+[/-]?)+(@sha256)?:[a-z0-9\_\.\-]+'
    image_regex_w_double_quotes='"?'"${image_regex}"'"?'

    (        # Avoid bailing out because of nothing found in scripts part
        set +e
        find "$provision_dir" -type f -name '*.sh' -print0 |
            xargs -0 grep -iE '(docker|podman)[ _]pull[^ ]+ '"${image_regex_w_double_quotes}"
        find "$provision_dir" -type f -name '*.yaml' -print0 |
            xargs -0 grep -iE '(image|value): '"${image_regex_w_double_quotes}"
        set -e        # last `grep -v` is necessary to avoid trying to pre pull istio "images", as the regex also matches on values
        # from the generated istio deployment manifest
    ) | grep -ioE "${image_regex_w_double_quotes}"'$' | grep -v '.svc:' >>"${temp_file}"

    sed -E 's/"//g' "${temp_file}" | sort | uniq
}

main "$@"

main()调用了check_args()。然后把镜像信息都提取出来。

check_args()检查若参数个数小于1,打印help信息。检查第一个参数对应的文件夹不存在,报错以及打印help信息。

main()处理逻辑中用到了下面几个技巧:

  • 用linux命令mktemp创建临时文件用来保存查询出来的中间数据。
  • trap 'rm -f "${temp_file}"' EXIT SIGINT SIGTERM 在程序退出后清理临时文件。
  • 用到了正则匹配image_regex是镜像名称格式,image_regex_w_double_quotes在image_regex基础加上了可以匹配双引号前后包裹的情况。主要是下面的三种镜像格式。
  • find的-print0参数和-print的区别是前者去掉了后者的换行符。
  • 用了2次find,分别查找sh脚本的镜像和manifest yaml配置文件里的镜像。
  • find有可能查不到信息,而脚本的开头配置了set -e,就是find查不到信息的情况会退出当前脚本,显然不是想要的遇到错误退出当前脚本,在find前后配置set +e和恢复。
  • grep用了-e参数,表示后面的字符串采用正则匹配,也可以用egrep代替。-i忽略大小写,正则表达式就不需要频繁加入A-Z,只需要a-z。-o只打印匹配的内容,可以去除镜像前的image,podman等信息。
  • 最后对临时文件保存的中间数据去掉双引号,去重,排序
代码语言:javascript
复制
quay.io/openshift/origin-kube-rbac-proxy@sha256:baedb268ac66456018fb30af395bb3d69af5fff3252ff5d549f0231b1ebb6901
docker.io/calico/kube-controllers:v3.18.0"quay.io/external_storage/local-volume-provisioner:v2.3.2"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端云 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • k8s-provision - 获取镜像
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档