kubernetes集群常见错误及解决方法

 记录一次kubernetes集群worker节点/var/log/messages系统日志错误信息如下:

Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9036_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9036_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9036_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9036_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9042_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9042_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9042_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9042_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9107_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9107_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9107_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9107_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9114_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9114_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9114_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9114_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9128_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9128_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9128_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9128_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9142_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9142_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Created slice libcontainer_9142_systemd_test_default.slice.
Jan  7 09:54:20 worker02 systemd: Removed slice libcontainer_9142_systemd_test_default.slice.
Jan  7 09:54:21 worker02 systemd: Created slice libcontainer_9148_systemd_test_default.slice.

 问题原因:

问题大致原因是由于将 cgroup-driver 设置为 systemd 后引起的,但是这些错误信息不会影响容器指标

https://github.com/opencontainers/runc/blob/master/libcontainer/cgroups/systemd/apply_systemd.go#L123

https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.2.0/troubleshoot/cgroup_driver.html
https://www.ibm.com/support/pages/recurring-messages-complain-scope-libcontainer-nnnnn-has-no-pids-refusing

解决方法:

## 方法1:
cat <<\EOF >/etc/rsyslog.d/ignore-systemd-session-slice.conf
if ($programname == "systemd") and ($msg contains "_systemd_test_default.slice" or$msg contains "systemd-test-default-dependencies.scope") then { stop }
EOF
systemctl restart rsyslog.service

## 方法2:
cat <<\EOF >/etc/rsyslog.d/ignore-systemd-session-slice.conf
:rawmsg, contains, "libcontainer" ~
EOF
systemctl restart rsyslog.service

 

 建议采用如下方式: 

从根源上解决:修改kubelet启动参数

KUBELET_EXTRA_ARGS=--kubelet-cgroups=/system.slice/kubelet.service --runtime-cgroups=/system.slice/docker.service

 修改kubelet服务启动的配置文件

cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=

#KUBELET_EXTRA_ARGS=--kubelet-cgroups=/system.slice/kubelet.service --runtime-cgroups=/system.slice/docker.service --feature-gates=LocalStorageCapacityIsolation=true \
#                   --kube-reserved-cgroup=/kubepods.slice --kube-reserved=cpu=500m,memory=500Mi,ephemeral-storage=1Gi \
#                   --system-reserved-cgroup=/system.slice --system-reserved=cpu=500m,memory=500Mi,ephemeral-storage=1Gi \
#                   --eviction-hard=memory.available<500Mi,nodefs.available<10%
#                   --max-pods=200

重启kubelet服务

systemctl restart kubelet.service

  

2020.04.28记录

kubernetes集群worker节点/var/log/messages系统日志错误信息如下:

Apr 28 11:25:45 worker02 kernel: nfs4_reclaim_open_state: 6 callbacks suppressed
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!
Apr 28 11:25:45 worker02 kernel: NFS: nfs4_reclaim_open_state: Lock reclaim failed!

  

原因:文件句柄不释放,发生死锁

解决方法:优化worker节点的内核参数并重启nfs-server服务

有条件建议使用  GlusterFS 或者Ceph 等其他文件系统作为底层存储,性能、稳定,高可用都胜过 nfs

以下配置仅供参考,具体请根据服务器配置来自行优化:

1、调整sysctl.conf配置文件

cat /etc/sysctl.conf

net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
fs.aio-max-nr = 1048576
fs.file-max = 76724600
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 262144 
# The default setting of the socket receive buffer in bytes.
net.core.rmem_max = 4194304 
# The maximum receive socket buffer size in bytes
net.core.wmem_default = 262144 
# The default setting (in bytes) of the socket send buffer.
net.core.wmem_max = 4194304 
# The maximum send socket buffer size in bytes.
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_mem = 8388608 12582912 16777216
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1 
# 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击
net.ipv4.tcp_timestamps = 1 
# 减少time_wait
net.ipv4.tcp_tw_recycle = 0 
# 如果=1则开启TCP连接中TIME-WAIT套接字的快速回收,但是NAT环境可能导致连接失败,建议服务端关闭它
net.ipv4.tcp_tw_reuse = 1 
# 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.tcp_wmem = 8192 65536 16777216
net.nf_conntrack_max = 1200000
net.netfilter.nf_conntrack_max = 1200000
vm.dirty_background_bytes = 409600000 
# 系统脏页到达这个值,系统后台刷脏页调度进程 pdflush(或其他) 自动将(dirty_expire_centisecs/100)秒前的脏页刷到磁盘
vm.dirty_expire_centisecs = 3000 
# 比这个值老的脏页,将被刷到磁盘。3000表示30秒。
vm.dirty_ratio = 95 
# 如果系统进程刷脏页太慢,使得系统脏页超过内存 95 % 时,则用户进程如果有写磁盘的操作(如fsync, fdatasync等调用),则需要主动把系统脏页刷出。
# 有效防止用户进程刷脏页,在单机多实例,并且使用CGROUP限制单实例IOPS的情况下非常有效。 
vm.dirty_writeback_centisecs = 100 
# pdflush(或其他)后台刷脏页进程的唤醒间隔, 100表示1秒。
vm.mmap_min_addr = 65536
vm.overcommit_memory = 0 
# 在分配内存时,允许少量over malloc, 如果设置为 1, 则认为总是有足够的内存,内存较少的测试环境可以使用 1 . 
vm.overcommit_ratio = 90 
# 当overcommit_memory = 2 时,用于参与计算允许指派的内存大小。
vm.swappiness = 0 
# 关闭交换分区
vm.zone_reclaim_mode = 0 
# 禁用 numa, 或者在vmlinux中禁止. 
net.ipv4.ip_local_port_range = 40000 65535 
# 本地自动分配的TCP, UDP端口号范围
fs.nr_open=20480000
# 单个进程允许打开的文件句柄上限
net.ipv4.tcp_max_syn_backlog = 16384
net.core.somaxconn = 16384

2、执行sysctl -p命令使参数立即生效

sysctl -p

3、修改文件最大打开数vi /etc/security/limits.conf

* soft nofile 1024000
* hard nofile 1024000
* soft nproc unlimited
* hard nproc unlimited
* soft core unlimited
* hard core unlimited
* soft memlock unlimited
* hard memlock unlimited

4、重启nfs-server服务端服务

systemctl restart nfs-server.service

  

posted @ 2020-01-07 10:29  也曾少年  阅读(4782)  评论(0编辑  收藏  举报