k8s使用内网拉取镜像显示Container Creating

作者:Administrator 发布时间: 2024-12-04 阅读量:9 评论数:0

k8s使用内网拉取镜像显示Container Creating

问题

内网使用harbor进行传输,新创建项目执行kubectl apply -f xx.yaml之后出现此问题

原因查找

  1. 镜像名称或标签错误
    检查:确保您的 Pod 或 Deployment 配置文件中指定的镜像名称和标签是正确的。
    解决:修正配置文件中的镜像名称和标签。
  2. 私有仓库认证问题
    检查:
    如果您使用的是私有 Docker 仓库,请确认是否已经配置了 Secret 来提供认证信息。
    使用 kubectl describe pod 查看 Pod 的详细信息,检查是否有认证相关的错误信息。
    解决:
    创建一个 Docker Secret 来存储认证信息:
kubectl create secret docker-registry myregistrykey \
  --docker-server=<your-registry-server> \
  --docker-username=<your-name> \
  --docker-password=<your-pword> \
  --docker-email=<your-email>

在 Pod 或 Deployment 的 YAML 文件中引用此 Secret:

spec:
  imagePullSecrets:
  - name: myregistrykey
  1. 网络连接问题
    检查:
    确认集群节点能够访问互联网(对于公共仓库)或私有仓库所在的网络。
    检查节点上的防火墙规则、安全组设置等,确保没有阻止对镜像仓库的访问。
    解决:
    解决网络连通性问题,确保所有必要的端口开放。

  2. 镜像仓库不可达或临时故障
    检查:
    尝试从本地机器或其他环境拉取相同的镜像,以验证仓库是否可用。
    解决:
    如果仓库暂时不可用,请等待一段时间再试;如果持续不可用,请联系仓库管理员或选择其他可靠的镜像源。

  3. 镜像不存在
    检查:
    确认镜像确实存在于仓库中,并且可以通过命令行工具如 docker pull 成功拉取。
    解决:
    确保推送镜像到仓库,并使用正确的标签。

  4. 节点资源不足
    检查:
    使用 kubectl describe node 检查节点状态,确认是否有足够的磁盘空间、内存和 CPU 资源。
    解决:
    清理不必要的资源或扩展集群容量。

  5. Kubernetes 版本兼容性问题
    检查:
    确认使用的 Kubernetes 版本与镜像版本兼容,特别是如果您使用的是较新的功能或特定于某些版本的特性。
    解决:
    更新 Kubernetes 版本或调整镜像版本以确保兼容性。
    诊断步骤
    为了更准确地诊断问题,您可以执行以下操作:

查看 Pod 事件:

kubectl describe pod <pod-name> -n <namespace>

这将显示有关 Pod 的更多信息,包括任何错误消息或警告。
检查节点日志:

kubectl get nodes
ssh <node-ip>  # 登录到有问题的节点
sudo journalctl -u kubelet  # 查看 kubelet 日志

测试镜像拉取: 在有问题的节点上手动尝试拉取镜像:

docker pull <image-name>:<tag>

这可以帮助确定问题是否与特定节点相关。
示例:创建私有仓库 Secret
假设您有一个私有仓库 myregistry.example.com,并且您需要为它创建一个 Secret:

kubectl create secret docker-registry regcred \
  --docker-server=myregistry.example.com \
  --docker-username=yourname \
  --docker-password='yourpassword' \
  --docker-email=you@example.com

然后,在您的 Pod 或 Deployment YAML 文件中添加如下配置:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg-pod
spec:
  containers:
  - name: uses-private-reg
    image: myregistry.example.com/private-image:tag
  imagePullSecrets:
  - name: regcred

通过以上步骤,您应该能够找到并解决导致 Kubernetes 容器一直处于 ContainerCreating 状态的问题。

解决

最后通过第七条,找到了问题的原因。

k describe pod -n qat-watch hrt-data-platform-bff-76f7b5d89b-2v2bv 
Name:             hrt-data-platform-bff-76f7b5d89b-2v2bv
Namespace:        qat-watch
Priority:         0
Service Account:  default
Node:             node6/192.168.0.146
Start Time:       Thu, 05 Dec 2024 21:00:58 +0800
Labels:           app=hrt-data-platform-bff
                  pod-template-hash=76f7b5d89b
Annotations:      <none>
Status:           Pending
IP:               
IPs:              <none>
Controlled By:    ReplicaSet/hrt-data-platform-bff-76f7b5d89b
Containers:
  hrt-data-platform-bff:
    Container ID:   
    Image:          register.hrttest.cn/hrt_register/hrt-data-platform-bff:qat-41
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Limits:
      cpu:     500m
      memory:  1Gi
    Requests:
      cpu:        100m
      memory:     512Mi
    Environment:  <none>
    Mounts:
      /data from nfs-data-platform-bff (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bhtqn (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  nfs-data-platform-bff:
    Type:      NFS (an NFS mount that lasts the lifetime of a pod)
    Server:    192.168.0.147
    Path:      /data/ais/watch
    ReadOnly:  false
  kube-api-access-bhtqn:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                    From     Message
  ----     ------       ----                   ----     -------
  Warning  FailedMount  9m53s (x362 over 12h)  kubelet  MountVolume.SetUp failed for volume "nfs-data-platform-bff" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -t nfs 192.168.0.147:/data/ais/watch /var/lib/kubelet/pods/26f3b775-af33-40ae-949d-b1cc0c9e66b3/volumes/kubernetes.io~nfs/nfs-data-platform-bff
Output: mount: /var/lib/kubelet/pods/26f3b775-af33-40ae-949d-b1cc0c9e66b3/volumes/kubernetes.io~nfs/nfs-data-platform-bff: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
  Warning  FailedMount  4m27s (x248 over 12h)  kubelet  Unable to attach or mount volumes: unmounted volumes=[nfs-data-platform-bff], unattached volumes=[nfs-data-platform-bff kube-api-access-bhtqn]: timed out waiting for the condition

这里nfs-kol-mp-bff因为复制的之前api-bff的nfs地址导致无法绑定到nfs卷,初始化失败。(只有qat有这个问题)修改重命名之后,问题解决。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hrt-kol-mp-bff
  labels:
    app: hrt-kol-mp-bff
  namespace: qat-watch
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hrt-kol-mp-bff
  template:
    metadata:
      labels:
        app: hrt-kol-mp-bff
    spec:
      imagePullSecrets:
      - name: harbor-secret
      hostAliases:
        - hostnames:
            - kafka
          ip: 192.168.0.124
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: env
                operator: In
                values:
                - qudat
      containers:
      - name: hrt-kol-mp-bff
        image: register.hrttest.cn/hrt_register/hrt-kol-mp-bff:qat-18
        volumeMounts:
        - name: nfs-kol-mp-bff
          mountPath: /data
        resources:
          limits:
            cpu: 0.5
            memory: "1024Mi"
          requests:
            cpu: 0.1
            memory: "512Mi"
      volumes:
      - name: nfs-kol-mp-bff
        nfs:
          server: 192.168.0.147
          path: /data/ais/watch

评论