Kubernetes - 未就绪节点,带有 ContainerGCFailed 警告

问题描述 投票:0回答:1

Kubernetes 版本:1.23
容器运行时:Docker

kubectl describe node node1

  Type     Reason             Age                   From     Message
  ----     ------             ----                  ----     -------
  Warning  ContainerGCFailed  2m35s (x507 over 9h)  kubelet  rpc error: code = ResourceExhausted desc = grpc: trying to send message larger than max (16777539 vs. 16777216)

工作节点详细信息

df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         32G     0   32G   0% /dev
tmpfs            32G     0   32G   0% /dev/shm
tmpfs            32G  1.1M   32G   1% /run
tmpfs            32G     0   32G   0% /sys/fs/cgroup
/dev/nvme0n1p1  200G   36G  165G  18% /
tmpfs           6.3G     0  6.3G   0% /run/user/1000

docker system df

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          27        26        18.23GB   1.433GB (7%)
Containers      24577     11        1.333GB   1.333GB (100%)
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

使用

argo-workflows
作为 Amazon EKS 上的容器编排引擎,我在工作节点上有足够的空间,并且内存/CPU 没有问题,问题可能是因为工作节点上有很多死容器(由 argo 工作流生成的 24577 个)。在早期版本的
kubelet
配置中,有一个选项可以删除死容器
--maximum-dead-containers
但现在已弃用,并替换为
--eviction-hard
--eviction-soft
设置,可用的驱逐设置我只能配置
memory
nodefs
pid
驱逐信号

如何使用更新的

--maximum-dead-containers
--eviction-hard
设置指定
--eviction-soft
或等效信号?

kubeletConfiguration
https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/

如果我连接到工作节点并在工作节点上运行

docker system prune
,它变得可用,但它会删除所有工作流程日志,我们希望保留日志至少 7 天

kubernetes containers amazon-eks argo-workflows argo
1个回答
0
投票

如果您使用 AL2 AMI,则可以通过以下用户数据脚本配置“--maximum-dead-containers”标志。

userData: |-
#!/bin/bash
cat << 'EOF' > /etc/eks/containerd/kubelet-containerd.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=containerd.service sandbox-image.service
Requires=containerd.service sandbox-image.service

[Service]
Slice=runtime.slice
ExecStartPre=/sbin/iptables -P FORWARD ACCEPT -w 5
ExecStart=/usr/bin/kubelet \
    --config /etc/kubernetes/kubelet/kubelet-config.json \
    --kubeconfig /var/lib/kubelet/kubeconfig \
    --container-runtime-endpoint unix:///run/containerd/containerd.sock \
    --image-credential-provider-config /etc/eks/image-credential-provider/config.json \
    --image-credential-provider-bin-dir /etc/eks/image-credential-provider \
    --maximum-dead-containers=100 \
    $KUBELET_ARGS \
    $KUBELET_EXTRA_ARGS

Restart=on-failure
RestartForceExitStatus=SIGPIPE
RestartSec=5
KillMode=process
CPUAccounting=true
MemoryAccounting=true

[Install]
WantedBy=multi-user.target
EOF
© www.soinside.com 2019 - 2024. All rights reserved.