ctr-k8s镜像管理命令,crictl命令使用说明,将k8s正在使用的镜像推送仓库


一.k8s镜像管理命令

查出k8s中pod在使用的镜像

kubectl get -o wide deploy -n yxyw-uat |awk ‘{print $7}’

查出镜像地址,勾选正则开头配上镜像推送命令

gem-acr-p-a01-registry-vpc.cn-shenzhen.cr.aliyuncs.com/osale/gyx-admin:yxyw-pre-2023-06-05-11-18-10
ctr-k8s镜像管理命令,crictl命令使用说明,将k8s正在使用的镜像推送仓库_第1张图片


二.将pod在使用的镜像推送到阿里云镜像仓库

ctr -n k8s.io i push -u lj@gemdale-ali:passwd gem-acr-p-a01-registry-vpc.cn-shenzhen.cr.aliyuncs.com/osale/gyx-admin:yxyw-pre-2023-06-05-11-18-10

三.crictl 命令管理镜像
删除未被使用的镜像,思路打印所有镜像(crictl images) ,过滤掉正在使用的镜像(crictl ps),其余的都删除

crictl images 过滤出IMAGE ID
ctr-k8s镜像管理命令,crictl命令使用说明,将k8s正在使用的镜像推送仓库_第2张图片
inux 中shell文件内容,Linux Shell从一个文件去掉包含在另一个文件的内容
方法一:使用grep

grep -v -f file1 file2 &&grep -v -f file2 file1

参数-v,表示invert match,即反向匹配,输出没有匹配上的项。参数-f,表示从文件中读取匹配模板(pattern)。方法一中的前一部分,在文件file1中匹配模板,来反向匹配文件file2中的内容,即输出文件file2中,在file1中没有的内容。后面的一部分同理可得,输出文件file1中,在file2中没有的内容。方法二:使用comm

comm -3file1 file2

这个方法看起来最简单。命令comm的功能就是,逐行比较两个排好序的文件,默认输出有三列:只在file1中有的行、只在file2中有的行、在file1和file2中共有的行。有参数-1 -2 -3,分别来抑制输出对应的列。例如在我们的方法二中,实用-3参数,不输出file1和file2中共有的部分。即能达到我们本文的目的。
删除历史镜像脚本

#/bin/bash
ID=/home/crictl/id
IMAGE=/home/crictl/images
IMAGES_HISTORY=/home/crictl/images_history

crictl ps | awk '{print $2}' | grep -v 'ID' >$ID
crictl images  | awk '{print $3}' | grep -v 'IMAGE' >$IMAGE

grep -v -f $ID $IMAGE > $IMAGES_HISTORY
crictl rmi `cat $IMAGES_HISTORY`

0 0 * * 6 sh /home/crictl/crictl.sh >/dev/null 2>&1
四.镜像管理常用命令

批量停止容器
crictl ps | awk '{print $1}' | xargs crictl stop
 
等价于
crictl stop $(crictl ps | awk '{print $1}')
 
批量删除容器
crictl ps -a | awk '{print $1}' | xargs crictl rm
 
批量删除匹配到的容器ID
crictl ps -a | grep CONTAINER ID | awk '{print $1}' | xargs crictl rm
 
批量删除匹配到的容器名
crictl ps -a | grep NAME | awk '{print $1}' | xargs crictl rm
 
批量删除镜像
crictl images | awk '{print $3}' | xargs crictl rmi
 
批量删除匹配到的镜像ID
crictl images | grep IMAGE ID | awk '{print $3}' | xargs crictl rmi
 
批量删除匹配到的镜像名
crictl images | grep IMAGE | awk '{print $3}' | xargs crictl rmi

你可能感兴趣的:(kubernetes,docker,容器)