在实际的运维中,偶尔会出现想要查看测试环境和生产环境有那些微服务版本不同的问题,一个一个对比镜像地址的话未免有些麻烦,所以就做了下面这个小脚本,这里分享一下:
# 要查看哪个命名空间的 deployment
namespace=kube-system
# 获取所有的 deployment
deploys=`kubectl get deployments.extensions -n $namespace 2>/dev/null | awk -F ' ' '{ print $1 }'`
# 遍历所有 deployment 获取其镜像地址
for deploy in $deploys; do
image_url=$(kubectl get deployments.extensions -n $namespace $deploy -o yaml 2>/dev/null | grep image: | awk -F ': ' '{ print $2 }')
if [ "$image_url" != "" ]; then
printf "%-30s %-30s\n" $deploy $image_url
fi
done
把 namespace 修改为自己环境的命名空间名称既可以,以 kube-system
为例,输出如下:
calico-kube-controllers quay.io/calico/kube-controllers:v3.3.0
coredns registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.1.3
tiller-deploy registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.1
不过写完之后发现 kubectl 其实是可以快捷输出镜像版本的 ==,很尴尬,这里也贴出来:
kubectl get deployments -n kube-system -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
输出如下,前面的1
是指有多少 deploys 在使用该镜像:
1 quay.io/calico/kube-controllers:v3.3.0
1 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.1.3
1 registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.1