k8s在运行节点出现ErrImagePull的解决方法

本人在修改mysql的配置文件后执行了kubectl delete pod mysql-test-0 -n orche,正常情况下这个操作让pod重新更新配置,然后再用kubectl get po -n orche

查看pod运行状态时总显示ErrImagePull

解决方法一:

如果网络不通外网,修改mysql的yaml文件添加

spec:
      containers:
      - name: mysql-test
        image: mysql:8.0
        imagePullPolicy: Never #主要是这个选项,也可以是IfNotPresent
        ports:
        - containerPort: 3306

介绍一下imagePullPolicy,它是 Kubernetes 中用来控制容器镜像的拉取策略的设置。它定义了 Kubernetes 在启动或重启容器时如何处理镜像的拉取。imagePullPolicy 可以设置为以下几种值:

  • Always: 每次启动或重启容器时都拉取镜像。这是最常用的设置,特别是在使用最新版本的镜像时。例如,在持续集成和持续部署(CI/CD)环境中,经常使用 Always 以确保总是使用最新的镜像版本。

  • IfNotPresent: 仅当本地不存在镜像时才拉取镜像。如果镜像已经存在于节点上,它将使用本地镜像,而不是重新拉取。这可以节省带宽和时间,尤其是在镜像不经常更新的情况下。

  • Never: 从不拉取镜像,仅使用本地镜像。如果镜像在节点上不存在,则容器将无法启动。这种设置通常用于在开发和测试过程中使用本地构建的镜像。

然后再执行

kubectl delete pod mysql-test-0 -n orche

kubectl get po -n orche

注意:这里查看节点用到的镜像之前删除时,自己飘到的节点

查看节点目前飘到哪个节点上了

kubectl get nodes -o wide

如果所在的节点上没有mysql对应版本的镜像,是起不来的

解决方法二

针对只有特点节点上有mysql:8.0的镜像的情况,要确保 Pod 在特定的节点上运行,你可以使用 Kubernetes 的调度机制来指定节点
在这里插入图片描述

执行

kubectl get nodes --show-labels

查看集群中所有节点的标签,针对控制节点举例会显示这么多:

eta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=tgq207
kubernetes.io/os=linux
node-role.kubernetes.io/control-plane=
node-role.kubernetes.io/master=
node.kubernetes.io/exclude-from-external-load-balancers=
processor=cpu

使用标签:

vim mysql_test.yaml

spec:
  nodeSelector:
    kubernetes.io/hostname: tgq207 #添加再template下面,不能直接添加再statefulset的spec下面

kubectl apply -f mysql_test.yaml

kubectl get po -n orche -o wide

在这里插入图片描述

可以看到节点已经到指定的节点上,不在cu07了

注:

  • 排除节点: 如果你想排除某些节点,可以使用标签选择器(如 node.kubernetes.io/exclude-from-external-load-balancers)来避免在这些节点上调度 Pod

  • 在 StatefulSet 的配置中,nodeSelector 不能直接用于 StatefulSet 的规范(spec)部分。要在 StatefulSet 中指定节点选择器,你应该在 Pod 模板中使用 nodeSelector,因为 StatefulSet 会在其 Pod 模板中定义调度策略。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值