Failed to pull image “192.168.35.14/test/flannel-cni-plugin:v1.2.0“: Error response from daemon: una

kubectl describe pod -n kube-flannel kube-flannel-ds-fr5sb

Failed to pull image “192.168.35.14/test/flannel-cni-plugin:v1.2.0”: Error response from daemon: unauthorized: unauthorized to access repository: test/flannel-cni-plugin, action: pull: unauthorized to access repository: test/flannel-cni-plugin, action: pull

最直接的解决方法,在每一个节点,手动把所有镜像都拉取到本地
K8s 集群一般会管理多个节点,每个节点都有自己的 docker 环境。如果让用户分别到集群节点上登录镜像仓库,这显然是很不方便的。

K8s 实现私有镜像自动拉取

~/.docker/config.json是用于存储docker registry的认证信息

cat /root/.docker/config.json | base64 -w 0

在这里插入图片描述
在主节点创建harbor登录Secret对象。它主要用于存储敏感信息,例如密码、秘钥、证书等等。

vim harbor-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: harbor-pull-secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjM1LjE0IjogewoJCQkiYXV0aCI6ICJaM2xvT2tkNWFERXlNelExIgoJCX0sCgkJIm1hc3RlciI6IHsKCQkJImF1dGgiOiAiWjNsb09rZDVhREV5TXpRMSIKCQl9Cgl9Cn0=
type: kubernetes.io/dockerconfigjson
kubectl create -f harbor-pull-secret.yaml

修改yml

vim kube-flanne
[root@master-node ~]# cat kube-flannel-ds.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: kube-flannel-ds namespace: kube-system labels: app: flannel tier: node spec: revisionHistoryLimit: 10 selector: matchLabels: app: flannel template: metadata: labels: app: flannel tier: node spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux containers: - name: kube-flannel image: quay.io/coreos/flannel:v0.15.1 imagePullPolicy: IfNotPresent command: - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr env: - name: POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace resources: limits: cpu: 100m memory: 50Mi requests: cpu: 100m memory: 50Mi securityContext: capabilities: add: - NET_ADMIN - NET_RAW privileged: false volumeMounts: - mountPath: /run/flannel name: run - mountPath: /etc/kube-flannel/ name: flannel-cfg terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst hostNetwork: true initContainers: - name: install-cni-plugin image: rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 command: - cp args: - -f - /flannel - /opt/cni/bin/flannel volumeMounts: - mountPath: /opt/cni/bin name: cni-plugin imagePullPolicy: IfNotPresent - name: install-cni image: quay.io/coreos/flannel:v0.15.1 command: - cp args: - -f - /etc/kube-flannel/cni-conf.json - /etc/cni/net.d/10-flannel.conflist volumeMounts: - mountPath: /etc/cni/net.d name: cni - mountPath: /etc/kube-flannel/ name: flannel-cfg imagePullPolicy: IfNotPresent priorityClassName: system-node-critical restartPolicy: Always schedulerName: default-scheduler serviceAccountName: flannel tolerations: - operator: Exists effect: NoSchedule volumes: - name: run hostPath: path: /run/flannel type: DirectoryOrCreate - name: cni-plugin hostPath: path: /opt/cni/bin type: DirectoryOrCreate - name: cni hostPath: path: /etc/cni/net.d type: DirectoryOrCreate - name: flannel-cfg configMap: name: kube-flannel-cfg defaultMode: 420 updateStrategy: rollingUpdate: maxUnavailable: 1 type: RollingUpdate [root@master-node ~]#
最新发布
08-03
### 3.1 检查 Flannel 镜像可用性与配置 Flannel 使用的容器镜像为 `quay.io/coreos/flannel:v0.15.1-amd64`(根据架构不同可能使用其他变体)[^1]。若该镜像无法正常拉取,可能导致 `kube-flannel-ds` Pod 一直处于 `CrashLoopBackOff` 状态。可通过以下命令检查 Pod 事件以判断是否为镜像拉取失败: ```bash kubectl describe pod -n kube-system kube-flannel-ds-xxxxx ``` 若事件中出现 `ImagePullBackOff` 或 `ErrImagePull`,则说明镜像拉取失败。需检查节点是否能够访问 `quay.io`,或配置私有镜像仓库以缓存 Flannel 镜像。 ### 3.2 验证 kube-flannel.yml 配置的兼容性 Flannel 的部署文件 `kube-flannel.yml` 必须适配当前 Kubernetes 集群版本。例如,在 Kubernetes 1.16 及以上版本中,`DaemonSet` 的 API 版本应为 `apps/v1`,而非 `extensions/v1beta1`。可使用以下命令查看当前 Flannel 配置: ```bash cat kube-flannel.yml | grep apiVersion ``` 若发现 API 版本不兼容,需修改 `kube-flannel.yml` 文件中的 `apiVersion` 字段为 `apps/v1`,并确保 `selector` 与 `template` 的 `labels` 一致,然后重新部署: ```yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: kube-flannel-ds-amd64 namespace: kube-system labels: tier: node app: flannel ``` 修改后重新应用配置: ```bash kubectl apply -f kube-flannel.yml ``` ### 3.3 检查 Flannel Pod 日志以定位问题 Flannel Pod 的日志通常包含其启动失败的具体原因。可使用以下命令查看日志: ```bash kubectl logs -n kube-system kube-flannel-ds-xxxxx ``` 常见错误包括网络配置冲突、权限不足、镜像拉取失败等。例如,若日志中提示 `failed to create default route`,说明 Flannel 无法正确配置网络路由,可能与其他网络服务冲突。 ### 3.4 检查 Flannel 网络配置与节点路由 Flannel 默认使用 `10.244.0.0/16` 作为 Pod 网络 CIDR。可通过以下命令检查 Flannel 的 `ConfigMap` 配置: ```bash kubectl get cm -n kube-system kube-flannel -o yaml ``` 查看 `net-conf.json` 中的 `Network` 字段是否为 `10.244.0.0/16`。若集群中已有其他服务使用了该网段,可能导致 Flannel 启动失败。此时应修改 Flannel 的 `ConfigMap` 并重新部署: ```yaml net-conf.json: | { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } } ``` 同时检查节点的网络接口和路由配置: ```bash ip link show ip route show ``` 确保 Flannel 使用的网卡存在,并且路由表中包含正确的子网路由。 ### 3.5 检查节点防火墙与 SELinux 配置 某些节点可能启用了防火墙(如 `iptables`)或 SELinux,限制了 Flannel 的网络通信。可尝试临时禁用以排查问题: ```bash systemctl stop firewalld setenforce 0 ``` 若问题消失,说明是防火墙或 SELinux 导致的问题,需调整策略以允许 Flannel 的流量。 ### 3.6 使用官方 Flannel 配置部署 若本地 `kube-flannel.yml` 文件配置存在问题,可直接使用官方提供的 Flannel 配置文件进行部署: ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 该命令将从官方源获取最新版本的 Flannel 配置并应用到集群中[^2]。 ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慈目

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值