【问题标题】:EKS, Windows node. networkPlugin cni failedEKS,Windows 节点。网络插件 cni 失败
【发布时间】:2021-01-25 01:30:26
【问题描述】:

根据https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html,我运行了命令 eksctl utils install-vpc-controllers --cluster --approve

我的 EKS 版本是 v1.16.3。我尝试将 Windows docker 映像部署到 Windows 节点。我在下面遇到错误。

警告 FailedCreatePodSandBox 31s kubelet, ip-west-2.compute.internal 创建 pod 沙箱失败:rpc 错误:代码 = 未知 desc = 无法为 pod“mrestapi-67fb477548-v4njs”设置沙箱容器“ab8001f7b01f5c154867b7e”网络: networkPlugin cni 无法设置 pod“mrestapi-67fb477548-v4njs_ui”网络:无法解析 Kubernetes args:pod 没有标签 vpc.amazonaws.com/PrivateIPv4Address

$ kubectl logs vpc-resource-controller-645d6696bc-s5rhk -n kube-system
I1010 03:40:29.041761       1 leaderelection.go:185] attempting to acquire leader lease  kube-system/vpc-resource-controller...
I1010 03:40:46.453557       1 leaderelection.go:194] successfully acquired lease kube-system/vpc-resource-controller
W1010 23:57:53.972158       1 reflector.go:341] pkg/mod/k8s.io/client-go@v0.0.0-20180910083459-2cefa64ff137/tools/cache/reflector.go:99: watch of *v1.Pod ended with: too old resource version: 1480444 (1515040)

它抱怨资源版本太旧。如何升级版本?

【问题讨论】:

  • 您使用什么版本的 vpc-resource-controller?
  • $ kubectl logs vpc-resource-controller-645d6696bc-s5rhk -n kube-system I1010 03:40:29.041761 1 leaderelection.go:185] 试图获取领导租约 kube-system/vpc-resource -controller... I1010 03:40:46.453557 1 leaderelection.go:194] 成功获取租约 kube-system/vpc-resource-controller W1010 23:57:53.972158 1 reflector.go:341] pkg/mod/k8s.io /client-go@v0.0.0-20180910083459-2cefa64ff137/tools/cache/reflector.go:99: 观看 *v1.Pod 以: 太旧的资源版本: 1480444 (1515040)
  • 那部分没有描述相关问题,我已经发布了答案

标签: kubernetes


【解决方案1】:
  1. 我删除了 windows 节点,重新创建了具有不同实例类型的 windows 节点。但是,它不起作用。
  2. 删除了 windows 节点组,重新创建了 windows 节点组。它不起作用。
  3. 最后,我删除了整个 EKS 集群,重新创建了 eks 集群。命令 kubectl describe node 给了我下面的输出。
  vpc.amazonaws.com/CIDRBlock           0         0
  vpc.amazonaws.com/ENI                 0         0
  vpc.amazonaws.com/PrivateIPv4Address  1         1

已部署 windows-server-iis.yaml。它按预期工作。问题的根本原因是谜。

【讨论】:

    【解决方案2】:

    为了解决这个问题,我会...

    1. 首先列出组件以确保它们正在运行:
    $kubectl get pod -n kube-system | grep vpc
    vpc-admission-webhook-deployment-7f67d7b49-wgzbg   1/1     Running   0          38h
    vpc-resource-controller-595bfc9d98-4mb2g           1/1     Running   0          29
    
    1. 如果他们正在运行,请检查他们的日志
    kubectl logs <vpc-yadayada> -n kube-system
    
    1. 确保您使用的实例类型每个 ENI 都有 enough available IPs,因为在 Windows 世界中只使用一个 ENI,并且限制为每个 ENI 的最大可用 IP 减去主 IP 地址的一个。在我超出 ENI 可用的 IP 数量之前,我遇到过这个错误。

    2. 确认你的 pod 的选择器是正确的

    nodeSelector:
      kubernetes.io/os: windows
      kubernetes.io/arch: amd64
    

    作为轶事,迄今为止,我已经完成了您在几个集群上链接的文档的 To enable Windows support for your cluster with a macOS or Linux client 部分中提到的步骤,并且它们运行良好。

    【讨论】:

    • 感谢您的回答。我相信我遇到了你描述的问题。我删除并重新创建了几次节点组。但是,它没有帮助。如何确定我使用的实例类型是否有足够的可用 IP?还有,如何增加 IP 限制?
    • 您使用的是什么实例类型?我不认为你可以增加 ENI 允许的最大 IP 数
    • 我的实例类型是 m5.large。我尝试了 m5.xlarge 和 m1.xlarge。它们都不起作用。我删除了节点组,使用新实例类型重新创建了节点组。但是,没有运气。
    • 我将检查我在步骤 1 中提到的两个组件的日志,并确认您的测试 pod 已正确分配给 Windows 节点(即通过 kubectl get pods - o wide)跨度>
    • vpc-admission-webhook-8f77c5d74-nqmmt 和 vpc-resource-controller-645d6696bc-s5rhk 分配给 Linux 节点。如何解决?
    【解决方案3】:

    你的输出是什么

    kubectl describe node <windows_node>
    

    ?

    如果是这样的话:

      vpc.amazonaws.com/CIDRBlock:           0
      vpc.amazonaws.com/ENI:                 0
      vpc.amazonaws.com/PrivateIPv4Address:  0
    

    那么你需要用不同的实例类型重新创建节点组...

    然后尝试部署这个:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: windows-server-iis-test
      namespace: default
    spec:
      selector:
        matchLabels:
          app: windows-server-iis-test
          tier: backend
          track: stable
      replicas: 1
      template:
        metadata:
          labels:
            app: windows-server-iis-test
            tier: backend
            track: stable
        spec:
          containers:
          - name: windows-server-iis-test
            image: mcr.microsoft.com/windows/servercore:1809
            ports:
            - name: http
              containerPort: 80
            imagePullPolicy: IfNotPresent
            command:
            - powershell.exe
            - -command
            - "Add-WindowsFeature Web-Server; Invoke-WebRequest -UseBasicParsing -Uri 'https://dotnetbinaries.blob.core.windows.net/servicemonitor/2.0.1.6/ServiceMonitor.exe' -OutFile 'C:\\ServiceMonitor.exe'; echo '<html><body><br/><br/><marquee><H1>Hello EKS!!!<H1><marquee></body><html>' > C:\\inetpub\\wwwroot\\default.html; C:\\ServiceMonitor.exe 'w3svc'; "
            resources:
              limits:
                cpu: 256m
                memory: 256Mi
              requests:
                cpu: 128m
                memory: 100Mi
          nodeSelector:
            kubernetes.io/os: windows
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: windows-server-iis-test
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: windows-server-iis-test
        tier: backend
        track: stable
      sessionAffinity: None
      type: ClusterIP
    
    kubectl proxy
    

    打开浏览器 http://localhost:8001/api/v1/namespaces/default/services/http:windows-server-iis-test:80/proxy/default.html 将显示带有Hello EKS 文本的网页

    【讨论】:

    • 实例类型为 m5.large。我删除并重新创建了具有两种不同实例类型 m1.xlarge 和 m5.xlarge 的 windows 组。但是,没有运气。我仍然得到 vpc.amazonaws.com/CIDRBlock 0 0 vpc.amazonaws.com/ENI 0 0 vpc.amazonaws.com/PrivateIPv4Address 0 0
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2021-01-13
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多