• K8s部署calico拉取不到镜像


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 xjz_23695688 2024-06-07 12:01 采纳率: 0% 浏览 638 首页/ 云计算 / K8s部署calico拉取不到镜像 kubernetes容器 最近在部署k8s1.28,安装网络组件是calico,按照官网指示的v3.28.0版本进行,但是pod拉取不到镜像 思考了一下,查看了calico相关的deployment和daemonset,果然涉及到pod创建需要的镜像全部是v.3.28.0版本的 [root@k8s-master calico]# kubectl edit daemonsets.apps -n calico-system calico-node 。。。。。。 image: docker.io/calico/node:v3.28.0 imagePullPolicy: IfNotPresent lifecycle: preStop: exec: #还有其他许多镜像都是一样 于是将所有的deployment和daemonset配置导出,修改镜像版本为latest [root@k8s-master calico]# grep image controller.yaml image: docker.io/calico/kube-controllers:latest imagePullPolicy: IfNotPresent [root@k8s-master calico]# grep image node.yaml.yaml grep: node.yaml.yaml: No such file or directory [root@k8s-master calico]# [root@k8s-master calico]# grep image node.yaml image: docker.io/calico/node:latest imagePullPolicy: IfNotPresent - image: docker.io/calico/pod2daemon-flexvol:latest imagePullPolicy: IfNotPresent image: docker.io/calico/cni:latest imagePullPolicy: IfNotPresent #应用新配置 [root@k8s-master calico]# kubectl apply -f controller.yaml Warning: resource deployments/calico-kube-controllers is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically. deployment.apps/calico-kube-controllers configured [root@k8s-master calico]# kubectl apply -f driver.yaml.yaml error: the path "driver.yaml.yaml" does not exist [root@k8s-master calico]# kubectl apply -f driver.yaml Warning: resource daemonsets/csi-node-driver is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically. daemonset.apps/csi-node-driver configured [root@k8s-master calico]# kubectl apply -f node.yaml Warning: resource daemonsets/calico-node is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically. daemonset.apps/calico-node configured [root@k8s-master calico]# kubectl apply -f typha.yaml Warning: resource deployments/calico-typha is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically. deployment.apps/calico-typha configured 然后发现所有容器还是不能正常启动且运行中的calico相关deployment和daemonset不能删除,查看其涉及的image版本依然是不能下载的:v3.28.0 [root@k8s-master calico]# kubectl edit daemonsets.apps -n calico-system calico-node ...... initContainers: - image: docker.io/calico/pod2daemon-flexvol:v3.28.0 imagePullPolicy: IfNotPresent name: flexvol-driver resources: {} securityContext: allowPrivilegeEscalation: true 如何解决? 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-07 12:01
      关注

      引自免费微信小程序:皆我百晓生

      看起来你在升级 Calico 网络插件时遇到了一些问题。根据你的描述,尽管你已经更新了配置文件中的镜像标签为 latest,但旧的镜像版本仍然影响着正在运行的 Calico 容器。这是因为 Kubernetes 使用的是滚动更新策略,它会逐个替换Pod,而不是一次性全部替换。

      要解决这个问题,你需要强制删除旧的 Calico DaemonSet 和 Deployment,这样新的配置就会被应用,并且新版本的镜像会被用来创建新的Pod。这是一个逐步的解决方案:

      1. 首先,确保没有正在进行的更新:

        kubectl get pods -A | grep calico
        
      2. 如果有正在更新的Pod,可以等待它们完成或者手动停止更新。停止更新(如果有):

        kubectl rollout undo deployment/calico-kube-controllers --namespace=calico-system
        kubectl rollout undo deployment/calico-typha --namespace=calico-system
        
      3. 确保所有的更新都已经停止后,你可以安全地删除现有的 DaemonSets 和 Deployments。注意这将会立即终止所有相关的Pod,所以请确保你的集群能承受这个操作:

        kubectl delete daemonset calico-node --namespace=calico-system
        kubectl delete deployment calico-kube-controllers --namespace=calico-system
        kubectl delete deployment calico-typha --namespace=calico-system
        
      4. 最后,重新应用新的配置:

        kubectl apply -f controller.yaml
        kubectl apply -f driver.yaml
        kubectl apply -f node.yaml
        kubectl apply -f typha.yaml
        
      5. 检查资源是否正确创建并运行:

        kubectl get deployments,daemonsets -A
        
      6. 通过 kubectl describe 命令检查 Pod 的状态,确保它们成功启动并连接到正确的镜像版本。

      这个过程可能会导致短暂的网络中断,因为 Calico 负责集群内部的网络通信。如果你的集群对网络依赖性很高,可能需要计划一个维护窗口来进行这些更改。同时,请务必在生产环境中谨慎操作,备份数据并在小规模测试后再进行全面推广。

      展开全部

      评论 编辑记录
    • IT工程师_二师兄 2024-06-07 15:11
      关注

      你把报错还有那个出现问题的截图发给我。

      评论
    • andrewYin1 2024-06-14 18:42
      关注

      我也拉取不到,不知道为什么直接docker pull docker.io/calico/cni:v3.28.0,也拉不到

      评论
      qzq0125 2024-06-17 19:43

      解决了吗

      回复
    • xjz_23695688 2024-06-26 16:00
      关注

      最后我换了github上另一个yaml配置文件,即官方仓库manifests中的calico.yaml,这里可以修改自定义镜像。但是近来的镜像仓库中是下不到controller、node、和cni三个镜像的。我就下载了3.28.0那个包,含配套镜像的那个,docker load到本地,更改镜像标签为calico.yaml中所需求的。可能是因为我的运行时是使用的containerd的缘故,依然不行。我将三个镜像push到我的私人镜像仓库,然后修改calico.yaml中镜像为私人仓库镜像地址,正常运行了calico组件。
      如果不嫌麻烦——生产环境下的话应该是必须的,可以部署一个harbor仓库,将镜像上传到harbor中去,也是可以的。

      评论
    • 阿里嘎多学长 2024-06-07 12:01
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      在 Kubernetes 集群中部署 Calico 网络组件时遇到镜像拉取问题,通常有以下几个方面的原因和解决方法:

      1. 镜像仓库访问问题:确保你的 Kubernetes 集群能够访问到 Docker Hub 或者你使用的私有仓库。如果使用的是私有仓库,需要确保 Kubernetes 集群有正确的访问权限。

      2. 网络问题:检查 Kubernetes 节点的网络配置,确保它们可以访问到外部网络。

      3. 镜像版本问题:使用 latest 标签可能不是最佳选择,因为 latest 标签可能指向一个不稳定的版本。建议使用具体的版本号,比如 v3.28.0,以确保稳定性和可预测性。

      4. 配置文件错误:在修改配置文件时,可能存在语法错误或者遗漏了某些配置项,导致应用配置时出现问题。

      5. 权限问题:确保执行 kubectl 命令的用户有足够的权限来修改和删除资源。

      针对你的问题,以下是一些可能的解决步骤:

      • 检查网络连接:确保 Kubernetes 集群的所有节点都能够访问到 Docker Hub。

      • 检查权限:使用具有足够权限的用户执行 kubectl 命令。

      • 使用具体版本号:不要使用 latest 标签,而是使用具体的版本号,比如 v3.28.0

      • 检查配置文件:确保修改后的配置文件没有语法错误,并且所有相关的镜像版本都已经更新。

      • 强制更新资源:如果 kubectl apply 命令没有按预期工作,可以尝试使用 kubectl delete 命令删除旧的资源,然后重新创建它们。

      • 检查 initContainers:确保所有 initContainers 的镜像版本也已经被更新。

      • 查看错误日志:使用 kubectl describe pod 查看 pod 的详细状态和事件,这可能会提供为什么 pod 无法启动的线索。

      • 使用 Calico 提供的安装脚本:Calico 官方提供了自动化的安装脚本来简化安装过程,可以考虑使用这些脚本来部署 Calico。

      如果需要代码实现,可以使用以下命令来强制更新 Calico 的资源:

      # 删除旧的资源
      kubectl delete -f calico.yaml
      
      # 重新应用新的配置
      kubectl apply -f calico.yaml
      

      其中 calico.yaml 是包含所有 Calico 组件的 YAML 文件。

      至于参考资料,你可以访问 Calico 的官方文档来获取更多信息:

      这些文档提供了关于如何安装和配置 Calico 的详细指南,以及如何解决常见的问题。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    彻底弄明白事件的捕获和冒泡
    R语言数据探索与分析-碳排放分析预测
    保证金服务数据一致性问题-大数据解决方案
    二、页面布局
    数据库脏读、不可重复读、幻读以及对应的隔离级别
    (四)安装gitlab服务器
    AJAX(二):axios 和 fetch函数发送AJAX请求、同源策略、 jsonp、CORS
    YOLOv5和YOLOv7环境(GPU)搭建测试成功
    CSDN21天学习挑战赛之选择排序
    RabbitMQ常见命令总结
  • 原文地址:https://ask.csdn.net/questions/8115371