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 天
如果您使用 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