k8s的常见问题处理一
一:pod时间同步容器内部的时间点和node节点时间不一致解决方案:将物理机的时区文件以hostpath的方式只读挂载到容器当中,只要保证物理机的时间是准确的即可。问题二:Pod内部hosts文件问题默认情况下,k8s会将pod的hostname和ip地址添加到hosts文件里面,实际应用场景下会有手工追加hosts文件记录的需求,而pod的生命周期是不固定的,因此官方提供了hostalias的解
一:pod时间同步
容器内部的时间点和node节点时间不一致
解决方案:将物理机的时区文件以hostpath的方式只读挂载到容器当中,只要保证物理机的时间是准确的即可。
问题二:Pod内部hosts文件问题
默认情况下,k8s会将pod的hostname和ip地址添加到hosts文件里面,实际应用场景下会有手工追加hosts文件记录的需求,而pod的生命周期是不固定的,因此官方提供了hostalias的解决方案。
通过配置pod内部hosts文件的初衷有两个:
1 有些微服务之间的调用走的是公网解析,效率低且DNS有可能响应超时。
2 目前开发,测试和现网环境,本质上代码是同一套。
我们通过配置hosts记录,可以将程序连接mysql,mongdb,mq这些公共服务的名称固定。不同的环境对应的公共服务的IP地址通过hostalias方式注入(需要保证三套环境的公共服务用户名,密码,端口这些信息是一致的)可以有效避免由于配置的原因导致的问题。
问题三:节点上的pod无法创建和删除
原因:systemd的版本较低导致,systemd在大量创建和删除容器持续一段时间后会出现溢出问题,从而使systemd不再响应所有信息,runc一直处于创建的过程,容器无法启动。
现象:1该节点上的pod无法创建,删除。
2 该节点上的docker run 启动的容器一直处于create状态
3 查看该节点上的runc状态一直处于创建的过程,无法创建namespace
排查操作
- ps -ef | grep systemd | grep 7d9c7c4
2 )查看当前节点上的systemd日志
cat /var/log/message | grep systemd | tail -n 1000
3)查看dbus服务有很多runc进程没有推出
busctl --list
原因:
systemd版本较低,systemd在大量创建删除容器持续一段时间后会有溢出问题,从而systemd不再响应所有信息,runc一直处于创建的过程,容器无法启动。
解决方法:
1 重启机器或者重启systemd
systemctl daemon-reexec
2 升级所需的安装包
yum -y install intltool gperf glib2-devel libcap-devel xz-devel
下载所需的包后解压
tar -zxvf cmake-3.18.4-Linux-x86_64.tar.gz
cp cmake-3.18.4-Linux-x86_64/bin/cmake /usr/local/bin/
tar -zxvf gperf-3.1 && ./configure && make && make install
这个包执行后需要检查/usr/lib64/pkgconfig目录里的包是否完整
pkg-config --list-all
cp /usr/lib/pkgconfig/uuid.pc /usr/lib64/pkgconfig/
…(等4个包)
tar -zxvf systemd-243.tar.gz
cd systemd-243 && ./configure && make && make install
安装完成后检查
systemctl --version
显示已经更新
备注:
runc的主要作用是使用Linux Kernel提供的诸如namespaces, cgroup等进程隔离机制以及SELinux等security功能,构建供容器运行的隔离环境。
更多推荐
所有评论(0)