Ubuntu镜像与K8S冲突,容器持续Terminating

问题

  • 记录一次软件冲突BUG: eclipse-temurin:11-jdk(底层Ubuntu 20.04.3 LTS)镜像创建的容器在K8S-1.25.5上无法正常terminating,造成资源浪费,甚至引发K8S资源CPU insufficient报错。
  • 具体表现 某些容器镜像在K8S上无法正常被kill掉。

环境信息

  • 操作系统:Kylin Linux Advanced Server V10 (Sword)
  • Docker:Docker version 20.10.21, build baeda1f
  • Kubelet:Kubernetes v1.25.5
  • Kubeadm:v1.25.5
  • 造成故障的基础镜像:eclipse-temurin:11-jdk

具体版本如下:

bash 复制代码
[sysma@k8s-0001 ~]$ cat /etc/os-release 
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Sword)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Sword)"
ANSI_COLOR="0;31"

[sysma@k8s-0001 ~]$ kubelet --version
Kubernetes v1.25.5
[sysma@k8s-0001 ~]$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.5", GitCommit:"804d6167111f6858541cef440ccc53887fbbc96a", GitTreeState:"clean", BuildDate:"2022-12-08T10:13:29Z", GoVersion:"go1.19.4", Compiler:"gc", Platform:"linux/amd64"}
[sysma@k8s-0001 ~]$ 
[sysma@k8s-0001 ~]$ docker --version
Docker version 20.10.21, build baeda1f
[sysma@k8s-0001 ~]$ 

eclipse-temurin:11-jdk基础镜像的底层Linux镜像版本如下:

bash 复制代码
root@contribution-c59ff89fc-vp5p9:/# cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

问题描述

使用该基础镜像运行java程序的微服务容器在K8S上更新版本、自动删除、手动删除时,

  1. 新创建的容器成功进入running 状态,但上一版本的容器持续terminating
  2. 手动删除terminating状态的容器,无法成功。
  3. terminating状态的容器仍然正常运行,正常消耗资源,可正常登录其shell
  4. 通过kubectl delete pods ${POD} --grace-period=0 --force -n ${NAMESPACE} 强制删除命令可以成功删除。

进一步影响:

  1. 造成【K8S Pod持续Pending(Message: 0/5 nodes are available/Insufficient cpu)】问题。

  2. 造成kube-system命名空间下系统容器重启故障,包括:网络插件calico、数据库etcd、控制器管理器kube-controller-manager等

解决办法

更换底层镜像,再次换成alpine-Linux镜像,测试多次更新、发布。此时不会出现terminating的容器。

更换的镜像底层Linux如下:

bash 复制代码
bash-4.4# cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.8.2
PRETTY_NAME="Alpine Linux v3.8"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"
bash-4.4# 

注意

软件冲突导致kube-system容器故障的关联性只是推测。目前该问题没有复现,也可能是业务压力或底层资源异常造成了K8S系统容器重启。

相关截图


相关推荐
坚持就完事了1 小时前
Linux中如何添加环境变量
linux·运维·服务器
l1t2 小时前
mingw和Linux中的gcc和llvm编译器编译的pocketpy执行同一个python脚本的不同效果
linux·运维·python
白緢3 小时前
一、Linux 基础入门
linux·运维·服务器
菜菜艾3 小时前
自动化环境补丁更新系统
linux·运维·bash·运维开发
明月_清风4 小时前
K8s 从入门到上手:核心概念+常用工具全解析
后端·kubernetes
HalvmånEver4 小时前
MySQL的索引
android·linux·数据库·学习·mysql
wljy16 小时前
二、静态库的制作和使用
linux·c语言·开发语言·c++
mzhan0176 小时前
Linux: coredump产生对程序退出的影响
linux·运维·服务器
hjhcos6 小时前
【pgsql】Ubuntu备份和清理数据库postgresql
数据库·ubuntu·postgresql
光电笑映7 小时前
从环境变量到进程虚拟地址空间——Linux 内存管理的底层脉络
linux·服务器·c++·c