FAQ
问题1:使用Mobaxterm客户端操作过程中,经常会卡死无法继续操作,关闭重建连接可继续操作
- 从容器中退出后,出错概率100%
- 执行脚本时偶尔出现
- 连接两个session,若某一session5分钟以上没有操作,该session经常会卡死不可再操作
该问题非常影响操作,具体原因未知。猜测和OpenEuler当前session的环境变量有关,是OpenEuler系统Bug
问题2:Kubernetes和Flannel安装后,没有/opt/cni/bin目录,安装containernetworking-plugins后,在/usr/libexec/cni/有cni插件,但,没有flannel插件
解决方案:
- 将 /usr/libexec/cni 拷贝到 /opt 目录
- flannel的插件使用 v1.0.1 版本,通过如下命令获取flannel的部署文件。新版本的flannel已经不再区分CPU架构
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.1
docker pull rancher/mirrored-flannelcni-flannel:v0.17.0
- flannel安装过程中,会将最新的插件默认放到 /opt/cni/bin 目录下
问题3:docker 必须使用OpenEuler自己的源,使用CentOS的源安装不成功,安装的docker 18.09 是 OE版本,华为二开过的版本
使用如下命令可以查看可安装的docker版本,不需要额外添加源。
[root@zlj ~]# dnf list --showduplicates | grep docker
docker-engine.x86_64 18.09.0-300.oe2203 @@System
docker-client-java.noarch 8.11.7-2.oe2203 everything
docker-client-java.src 8.11.7-2.oe2203 source
docker-compose.noarch 1.22.0-4.oe2203 everything
docker-compose.src 1.22.0-4.oe2203 source
docker-engine.src 18.09.0-300.oe2203 source
docker-engine.x86_64 18.09.0-300.oe2203 OS
docker-engine.x86_64 18.09.0-300.oe2203 everything
docker-engine-debuginfo.x86_64 18.09.0-300.oe2203 debuginfo
docker-engine-debugsource.x86_64 18.09.0-300.oe2203 debuginfo
docker-runc.src 1.0.0.rc3-300.oe2203 source
docker-runc.x86_64 1.0.0.rc3-300.oe2203 OS
docker-runc.x86_64 1.0.0.rc3-300.oe2203 everything
pcp-pmda-docker.x86_64 5.3.5-6.oe2203 OS
pcp-pmda-docker.x86_64 5.3.5-6.oe2203 everything
podman-docker.noarch 1:0.10.1-12.oe2203 everything
python-docker.src 4.4.4-1.oe2203 source
python-docker-help.noarch 4.4.4-1.oe2203 everything
python-docker-pycreds.src 0.4.0-2.oe2203 source
python-dockerpty.src 0.4.1-3.oe2203 source
python-dockerpty-help.noarch 0.4.1-3.oe2203 everything
python3-docker.noarch 4.4.4-1.oe2203 everything
python3-docker-pycreds.noarch 0.4.0-2.oe2203 everything
python3-dockerpty.noarch 0.4.1-3.oe2203 everything
ps:dnf 或 yum命令均可,欧拉系统已做兼容 查找到具体的版本后执行如下命令即可完成安装
dnf install docker-engine.x86_64
或
yum install docker-engine.x86_64
注意事项
- Docker容器的安装需要使用root权限。
- docker-engine rpm包与containerd rpm包、runc rpm包、podman rpm包不能同时安装。因为docker-engine rpm包中已经包含Docker运行所需的所有组件,其中包括containerd、runc、docker二进制,且containerd、runc和podman rpm包也分别提供了对应的二进制,所以重复安装时会出现软件包冲突。
更多Docker容器的配置和命令可参考官方文档:
https://docs.openeuler.org/zh/docs/22.03_LTS/docs/Container/%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE-3.html
问题4:kubelet和docker 的 cgroup driver 使用systemd会失败,必须使用 cgroupfs。
在CentOS、Ubuntu系统上,docker的daemon.json文件配置如下,
[root@isyscore-basic78 ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd","selinux-enabled=false"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://f1z25q5p.mirror.aliyuncs.com"],
"insecure-registries":["10.30.30.22:9080"],
"graph": "/home/data/docker"
}
kubelet的service配置如下,采用默认配置
[root@isyscore-basic78 ~]# cat /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
kubelet的/var/lib/kublet/kubeadm-flags.env配置如下
[root@isyscore-basic78 ~]# cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.2"
在部署的时候,配置了docker的daemon.json文件后,执行kubeadm init命令部署Kubernetes集群,会自动生成配置文件/var/lib/kublet/kubeadm-flags.env,会保证cgroup driver默认和 daemon.json 一致。
在OpenEuler系统上进行部署时,若docker服务的 daemon.json的 cgroup driver 配置为 systemd,在通过 kubeadm init 命令初始化 Kubernetes 集群时,kubelet的cgroup driver 也会配置为 systemd,此时在systemctl status kubelet 或 journalctl -xfu kubelet 会存在如下报错:
applying cgroup configuration for process caused \"No such device or address\"
虽然此时 docker 和 kubelet 的cgroup driver 配置一致,均为 systemd,但,依然会报错,flannel无法启动。
kubelet默认使用的 cgroup driver 为 cgroupfs,但,官方建议使用 systemd。我们已经使用了systemd,为啥还是会报错,flannel无法启动?
针对报错在网上进行了搜索,但,相关Bug已经得到了解决,事实证明,在 centos、ubuntu系统上,确实已经不存在该问题,只要 docker 和 kubelet 使用的 cgroup driver 保持一致就行。
最后,将OpenEuler系统上的 docker 和 kubelet 的 cgroup driver 均修改为 cgroupfs,flannel正常启动,kubelet也不存在相关报错。因而,认为,OpenEuler系统上的 cgroup driver 目前只能采用 cgroupfs。
ps:OpenEuler系统上的 docker 使用的版本为 18.09.0.300-oe,是经过 华为 二开的版本,估计问题和 docker 版本有关。
[root@zlj ~]# docker version
Client:
Version: 18.09.0
EulerVersion: 18.09.0.300
API version: 1.39
Go version: go1.17.3
Git commit: aa1eee8
Built: Wed Mar 30 05:07:38 2022
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.09.0
EulerVersion: 18.09.0.300
API version: 1.39 (minimum version 1.12)
Go version: go1.17.3
Git commit: aa1eee8
Built: Tue Mar 22 00:00:00 2022
OS/Arch: linux/amd64
Experimental: false
问题5:将kubelet的cgroup driver配置为cgroupfs,通过在文件/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf中添加 Environment=“KUBELET_EXTRA_ARGS=–cgroup-driver=cgroupfs"字段,daemon-reload 并重启kubelet不生效,需要修改文件/var/lib/kubelet/kubeadm-flags.env, 添加字段KUBELET_KUBEADM_ARGS=”–cgroup-driver=cgroupfs" 重启kubelet生效
在将 docker 和 kubelet 的cgroup driver 修改为 cgroupfs 时,遇到如题问题。若两者不一致会报错如下:
kubelet cgroup driver: “systemd” is different from docker cgroup driver: “cgroupfs” 的提示,意思是kubelet cgroup driver跟docker cgroup driver的
https://blog.csdn.net/MoFengLian/article/details/122825046
failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
https://www.cnblogs.com/fqszywz/p/15335289.html
经过多次尝试发现,修改kubelet的cgroup driver,通过修改 service 文件是无法生效的,需要修改文件/var/lib/kubelet/kubeadm-flags.env,关于cgroup driver部分,修改为如下内容:
KUBELET_KUBEADM_ARGS=“–cgroup-driver=cgroupfs”
再次重启 kubelet服务 systemctl restart kubelet,即可生效。