【问题标题】:Application DNS Resolution Problem while nodes are scaling down节点缩小时的应用程序 DNS 解析问题
【发布时间】:2020-10-14 11:47:33
【问题描述】:

我有一个在 AWS EKS(1.16 版)上运行的 kubernetes 集群,我的应用程序 pod 和 coredns pod 在集群上作为守护程序集运行。除了按比例缩小之外,一切似乎在所有条件下都运行良好。 当节点缩小时,应用程序给出“mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution”错误。 DNS 解析错误来自所有 pod,我之所以这么说是因为如果错误来自一个 pod,那么我可以说当应用缩减时,coredns pod 比同一节点上的应用程序 pod 更早关闭,因此应用程序无法解析数据库主机名。此外,dns 请求首先到达 kube-dns 服务,然后通过 dns pod。所以这是不可能的。

但另一方面,对于这种情况,我找不到任何合乎逻辑的表达方式。 是否有可能是我的集群自动扩缩器配置错误?

我的集群自动扩缩器配置如下:

labels:
    app: cluster-autoscaler
    spec:
        containers:
            - command:
            - ./cluster-autoscaler
            - --v=4
            - --stderrthreshold=info
            - --cloud-provider=aws
            - --scan-interval=120s
            - --max-empty-bulk-delete=1
            - --scale-down-delay-after-delete=10m
            - --scale-down-unneeded-time=14m
            - --skip-nodes-with-local-storage=false
            - --scale-down-utilization-threshold=0.85
            - --skip-nodes-with-system-pods=false
            - --nodes=8:16:nodegroup-1
            - --nodes=3:10:nodegroup-2
    env:
        - name: AWS_REGION
          value: eu-west-1
    image: gcr.io/google-containers/cluster-autoscaler:v1.16.4
    imagePullPolicy: Always
    name: cluster-autoscaler
    resources:
        limits:
            cpu: 100m
            memory: 300Mi
            requests:
            cpu: 100m
            memory: 300Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/ssl/certs/ca-certificates.crt name: ssl-certs
            readOnly: true
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            serviceAccount: cluster-autoscaler
            serviceAccountName: cluster-autoscaler
            terminationGracePeriodSeconds: 30
    volumes:
        - hostPath:
            path: /etc/ssl/certs/ca-bundle.crt
            type: ""
            name: ssl-certs

【问题讨论】:

    标签: kubernetes autoscaling amazon-eks coredns


    【解决方案1】:

    尝试将dnsPolicy: Default 用于 cluster-autoscaler,这样名称解析就不会通过 kube-dns。

    请记住,在主节点上运行的 pod 上使用 dnsPolicy: ClusterFirst 可能不起作用,除非 kube-proxy pod 也在主节点上运行(用于服务 VIP -> 后端 Pod 路由),这并不总是正确的(例如在 GCE kube 中) - 没有)。

    看看:eks-autoscaler.

    【讨论】:

    • 您好,感谢您的回答。我将 coredns 转换为部署,并将 --skip-nodes-with-system-pods=false 此选项更改为 true。因此,我的 coredns pod 不会按比例缩小。我不知道它是否合适,但它现在工作正常。我将检查您的解决方案以进行比较。真的很感激。
    猜你喜欢
    • 2011-03-07
    • 2015-01-12
    • 1970-01-01
    • 2017-08-22
    • 2017-02-13
    • 1970-01-01
    • 2020-07-19
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多