debian10 安装 k8s,预检查警告如何解决? missing optional cgroups: hugetlb

2021-07-05 18:47:47 +08:00
 dunhanson

百度和谷歌都搜过了,确实有人遇到过,但是没有解决办法

可怕,都是没有强迫症的人吗?

PS:我用 vagrant 启动 centos-7 安装 k8s 没有这个警告

[preflight] Running pre-flight checks
    [WARNING SystemVerification]: missing optional cgroups: hugetlb    
4376 次点击
所在节点    Kubernetes
25 条回复
defunct9
2021-07-05 19:12:15 +08:00
ignore
liuxu
2021-07-05 20:12:21 +08:00
新 debian 启动 docker 一直有一些 warning,都是 swap 、memory 相关,一般只需要在 grub 启动配置里面加一些参数就好了,修改 /etc/default/grub,GRUB_CMDLINE_LINUX 的后面加上 cgroup_enable=memory 后重启看看
12101111
2021-07-05 20:17:22 +08:00
Debian10 内核版本低, 没有 backport 此功能, 需要 Linux 5.6+
红帽的内核会 backport 大量的功能, 版本号仅代表原始 fork 的版本

https://github.com/torvalds/linux/commit/faced7e0806cf44095a2833ad53ff59c39e6748d#diff-e529163925764917220948502e9b83c1faebff54c7cd739b93b96b4641f930f1
dunhanson
2021-07-05 20:22:29 +08:00
@liuxu 这个方法我搜到过,没效果,你可以吗
liuxu
2021-07-05 20:27:31 +08:00
@dunhanson 把你的安装命令列表发出来,我重现下
dunhanson
2021-07-05 20:28:00 +08:00
@12101111 我对比了,debian10 的内核是 Linux 4.19.0-16-amd64,centos7 是 Linux 3.10.0-1127.el7.x86_64
liuxu
2021-07-05 20:35:58 +08:00
@dunhanson 他的意思是说,centos7 的内核版本号虽然低,但其实代码一只有从新内核里拉代码进来,debian 没有

test :/boot$ cat /etc/debian_version
10.2
test :/boot$ cat config-4.19.0-11-amd64 |grep -i hugetlb
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y

我看了下 debian10 的内核选项,cgroup hugetlb 选项已经有了,只不过没打开,你如何很想去掉这个 warning 的话就拿 /boot/config-4.19.0-11-amd64 这个配置重新编译内核,把 hugetlb 打开
dunhanson
2021-07-05 20:36:05 +08:00
# 设置
sudo apt-get remove docker docker-engine docker.io

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
$(lsb_release -cs) \
stable"

# 安装
sudo apt-get update
sudo apt-get install docker-ce

# 服务开启并设置开机启动
systemctl start docker
systemctl enable docker

# 关闭 firewalld
systemctl stop firewalld
systemctl disable firewalld

# 关闭 swap
swapoff -a
sed -i 's/^.*swap.*$/#&/' /etc/fstab

# cgroupdriver 修改(不设置 kubeadm init 会有警告)
vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://tp9vl69u.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
dunhanson
2021-07-05 20:36:22 +08:00
允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
dunhanson
2021-07-05 20:36:43 +08:00
安装 kubeadm 、kubelet 和 kubectl
# 这一步需要手动下载保存到对应路径
# https://mirrors.tuna.tsinghua.edu.cn/help/kubernetes/
# mv /home/vagrant/apt-key.gpg /usr/share/keyrings/kubernetes-archive-keyring.gpg
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
dunhanson
2021-07-05 20:37:06 +08:00
kubeadm init --apiserver-advertise-address=192.168.33.10
dunhanson
2021-07-05 20:37:39 +08:00
@liuxu 上面三个回复我把步骤发出来了,谢了
dunhanson
2021-07-05 20:40:44 +08:00
@liuxu 必须要升级内核吗
liuxu
2021-07-05 21:11:20 +08:00
@dunhanson 对的,或者你可以试试新内核有没有默认选中这个选项

我重新用 debian10 重现了下你的环境,可以看到 cgroup 的 hugetlb 没有选中,而且 swap 也不是开机启动的,需要 linux kernel 启动命令行里面添加上

General setup -> Control Group support -> HugeTLB controller

liuxu
2021-07-05 21:26:58 +08:00
反正你也是用 vagrant 搭建环境,我建议你直接 debian11,我刚刚试了下,vagrant 的 debian/bullseye64 默认是打开的

vagrant@bullseye:/boot$ cat config-5.10.0-5-amd64 | grep -i hugetlb
CONFIG_CGROUP_HUGETLB=y
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
dunhanson
2021-07-05 21:29:55 +08:00
@liuxu 谢了,太用心了。两种我都是试试
liuxu
2021-07-05 21:29:57 +08:00
或者我建议你用 ubuntu20.04 ,容器环境选 ubuntu 准没错,很久以前 docker 官方都是直接建议 ubuntu,我看了我的 ubuntu20.04.2,默认也是开启的,而且 ubuntu server lts 也是 5 年维护期
dunhanson
2021-07-05 21:32:35 +08:00
@liuxu 不过,我之前自己用 virtualbox 自己安装的 debian 10.7 好像就没有这个问题
dunhanson
2021-07-05 21:33:09 +08:00
@liuxu 了解,ubuntu 我也试试
liuxu
2021-07-05 21:34:34 +08:00
@dunhanson 那可能当时的 k8s 版本不需要这个内核特性

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX