k8s节点images自动清理

功能介绍

同一个服务,发版本时通过命令行删除旧镜像,但保留最新3个镜像,用以回滚

一行docker命令删除多余镜像

docker images |grep 'command-demo'|awk '{print $3}'|awk 'BEGIN {FS=\" \"} NR > 3 {print $NF}'|xargs docker rmi||true

删除command-demo服务的多余镜像,具体可自定义

***yaml文件增加内容

容器创建执行shell命令:

lifecycle:
  postStart:
      exec:
        command: [ "/bin/sh","-c","docker images |grep 'command-demo'|awk '{print $3}'|awk 'BEGIN {FS=\" \"} NR > 3 {print $NF}'|xargs docker rmi||true" ]

挂载docker到容器,使得容器内可以执行docker命令:

volumes:
  - name: docker
    hostPath:
      path: /usr/bin/docker
  - name: dockersock
    hostPath:
      path: /var/run/docker.sock
volumeMounts:
  - mountPath: /usr/bin/docker
    name: docker
  - mountPath: /var/run/docker.sock
    name: dockersock

容器的生命周期事件: 官网链接
postStart:容器创建后执行
preStop:容器销毁前执行

yaml文件

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: command-demo
    lifecycle:
      postStart:
         exec:
           command: [ "/bin/sh","-c","docker images |grep 'command-demo'|awk '{print $3}'|awk 'BEGIN {FS=\" \"} NR > 3 {print $NF}'|xargs docker rmi||true" ]
    volumeMounts:
      - mountPath: /usr/bin/docker
        name: docker
      - mountPath: /var/run/docker.sock
        name: dockersock
  volumes:
    - name: docker
      hostPath:
        path: /usr/bin/docker
    - name: dockersock
      hostPath:
        path: /var/run/docker.sock
  nodeSelector:
    disktype: ssd
  restartPolicy: OnFailure

注意,踩坑

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: command-demo
    command: ["/bin/sh"]
    args: ["-c","docker images |grep 'command-demo'|awk '{print $3}'|awk 'BEGIN {FS=\" \"} NR > 3 {print $NF}'|xargs docker rmi||true"]
    volumeMounts:
      - mountPath: /usr/bin/docker
        name: docker
      - mountPath: /var/run/docker.sock
        name: dockersock
  volumes:
    - name: docker
      hostPath:
        path: /usr/bin/docker
    - name: dockersock
      hostPath:
        path: /var/run/docker.sock
  nodeSelector:
    disktype: ssd
  restartPolicy: OnFailure

若使用如上形式执行shell命令(容器创建前执行命令),则容器创建总是失败

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于所有 Kubernetes 节点都显示为 "NotReady" 的情况,可能有几个可能的原因。以下是一些常见的排查步骤: 1. 检查网络连接:确保所有节点之间的网络连接正常。您可以尝试通过 Ping 命令检查节点之间的连通性,并确保集群的网络配置正确。 2. 检查 kubelet 服务:kubelet 是 Kubernetes 集群中负责管理节点的组件之一。请确保 kubelet 服务正在运行,并且没有出现任何错误。您可以通过运行 `systemctl status kubelet` 命令来检查 kubelet 服务的状态。 3. 检查容器运行时:Kubernetes 使用容器运行时来管理容器。确保所使用的容器运行时(如 Docker 或 Containerd)正在运行,并没有出现任何错误。 4. 检查节点状态:您可以使用 `kubectl get nodes` 命令来查看节点的状态。如果节点显示为 "NotReady",请尝试使用 `kubectl describe node <node-name>` 命令来获取更详细的信息。这将显示有关节点的事件和问题的详细信息。 5. 检查资源使用情况:如果节点上的资源(如 CPU、内存或磁盘)耗尽,可能会导致节点状态为 "NotReady"。您可以使用 `kubectl top node` 命令来查看节点资源的使用情况。 6. 检查日志:如果以上步骤没有找到问题,您可以尝试查看节点上的日志,以获取更多的错误信息。您可以使用 `journalctl -u kubelet` 命令来查看 kubelet 的日志。 请注意,以上步骤只是一些常见的排查方法之一。具体的解决方法可能因集群配置和环境而异。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值