Kubernetes 安装常见问题FAQ

Kubernetes 安装常见问题FAQ

前言

整理了Kubernetes集群安装过程中的常见问题FAQ。

常见问题可以分为以下几类:

  • Linux 问题
  • Docker 问题
  • 科学上网问题
  • 网络问题
  • 文档问题

Linux 问题

以CentOS7为例。

Swap 问题

Q: 如果不禁用Swap,将会导致kubelet不能正常工作。

A:

运行journalctl -xefu kubelet 查看kubelet日志,检查kubelet启动失败的原因是不是因为Swap没有被禁用。

如果是Swap没有被禁用导致kubelet出错,请参考下面步骤:

检查Swap:

# 查看Swap
free -m
cat /proc/swaps

临时禁用Swap,机器重启后不生效:

# 关闭Swap,机器重启后不生效
swapoff -a

永久禁用Swap:

# 修改/etc/fstab永久关闭Swap
# Redhat
sed -i "s/\/dev\/mapper\/rhel-swap/\#\/dev\/mapper\/rhel-swap/g" /etc/fstab
# CentOS
sed -i "s/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g" /etc/fstab
# 修改后重新挂载全部挂载点
mount -a

SELinux 问题

Q: 如果不禁用SELinux,可能会导致Kubernetes集群无法正常安装。

A:

需要禁用SELinux的原因:

Disabling SELinux by running setenforce 0 is required to allow containers to access the host filesystem, which is required by pod networks for example. You have to do this until SELinux support is improved in the kubelet.

在安全的环境中,可以将SELinux永久关闭。

查看SELinux状态:

# Permissive 表示SELinux已经被关闭;Enfocing 表示SELinux为打开状态
getenforce

运行setenforce 0 临时关闭SELinux。

永久关闭SELinux:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

Firewalld 问题

Q: 如果不禁用Firewalld防火墙,可能会导致Kubernetes集群不能正常工作。

A: Kubernetes的Master和Node之间有大量的网络通信,安全的做法是在防火墙上配置各组件需要相互通信的端口,在安全的网络环境中较为简单的做法是禁用Firewalld防火墙。

运行systemctl status firewalld 查看Firewalld防火墙状态。

禁用Firewalld防火墙:

systemctl stop firewalld
systemctl disable firewalld

重启后问题

Q: 重启Linux后,Kubernetes 集群不能正常工作。

A: 运行journalctl -xefu kubelet 查看kubelet日志, 和运行kubectl describe 命令查看出错的Pod等资源的错误信息来定位问题。

常见的原因是在上面的Linux问题中只是临时禁用了配置项,并没有做到永久禁用。

端口问题

Q: 端口被禁止或被占用都可能导致Kubernetes集群不能正常工作。

A: 请参考 https://kubernetes.io/docs/tasks/tools/install-kubeadm/ , 搜索”Check required ports” 查看Kubernetes必须的端口。

可以在Linux上运行netstat -tnlp 目前的端口使用情况。

磁盘空间问题

Q: 如果磁盘空间不足,也会导致Kubernetes集群不能正常工作。

A: 可以通过df -h 命令查看磁盘分区使用情况,也可以通过du -sh 命令查看目录和文件大小。

内存问题

Q: 如果内存不足,也会导致Kubernetes集群不能正常工作。

A: 可以使用top 命令、free -mh 命令或vmstat 3 命令查看内存情况。

CPU问题

Q: 如果CPU负载过高,也会导致Kubernetes集群不能正常工作。

A: 可以使用top 命令、或vmstat 3 命令查看CPU负载情况。

Docker问题

Docker版本问题

Q: 使用Kubernetes不支持的Docker版本可能会导致未知问题。

A: Kubernetes 目前(v1.11.0) 推荐的最新的Docker版本是17.03。

On each of your machines, install Docker. Version 17.03 is recommended, but 1.11, 1.12 and 1.13 are known to work as well. Versions 17.06+ might work, but have not yet been tested and verified by the Kubernetes node team. Keep track of the latest verified Docker version in the Kubernetes release notes.

可以通过kubectl version 查看Kubernetes版本,通过docker version 查看Docker版本。

cgroup问题

Q: 如果kubelet的cgroup和Docker的cgroup不一致,会导致Kubernetes集群无法正常工作。

A: 需要保持kubelet的cgroup和Docker的cgroup一致。

运行docker info | grep -i cgroup 查看Docker的cgroup。

运行ps -ef | grep kubelet | grep -i cgroup 查看kubelet的cgroup。

如果kubelet的cgroup和Docker的cgroup不一致,运行下面的命令修改kubelet的cgroup:

sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

修改cgroup后需要通过以下命令重启kubelet。

systemctl daemon-reload
systemctl restart kubelet

科学上网问题

gcr.io 镜像拉取问题

Q: 由于墙的原因,在安装Kubernetes时会因为无法拉取gcr.io镜像,导致安装过程一直等待或报出无关错误。

A: 在已知镜像名称和标签的情况,可以通过阿里云镜像仓库 + GitHub 用Dockerfile重新打包gcr.io 镜像,然后安装时从阿里云镜像仓库直接下载再重命名为gcr.io镜像。

在未知镜像名称和标签的情况,需要先找一台可以科学上网的机器来装一遍,再通过docker images 查看准确的镜像名称和标签。

参考文档:

网络问题

访问官方CentOS Yum源慢

Q: 访问官方CentOS Yum源太慢了。

A: 使用阿里云CentOS Yum源。

参考文档:

访问官方Docker Yum慢或Docker镜像仓库慢

Q: 访问官方Docker Yum源或Docker镜像仓库太慢了。

A: 使用阿里云Docker Yum源和阿里云镜像仓库、镜像加速器。

参考文档:

Docker国内Yum源和国内镜像仓库

访问官方Kubernetes Yum源慢

Q: 访问官方Kubernetes Yum源太慢了。

A: 使用阿里云Kubernetes Yum源。

参考文档:

Kubernetes国内镜像、下载安装包和拉取gcr.io镜像

网络重名问题

Q: Hostname、 IP,、Mac地址和product_uuid重名会导致Kubernetes无法正常工作。

A: 运行uname -n 查看Hostname,可以运行hostnamectl set-hostname 来修改Hostname。

运行ip addr show 查看IP地址,并通过修改/etc/sysconfig/network-scripts 目录下的网卡配置文件(比如ifcfg-ens33)来修改IP地址,修改后需要通过systemctl restart network 重启网卡。

参考文档:

运行ip link 查看Mac地址。

运行sudo cat /sys/class/dmi/id/product_uuid 查看product_uuid。

文档问题

Kubernetes 官方文档不详细或不同步

Q: Kubernetes官方文档已经非常详细,但是仍然有不够清楚或不同步的问题。

A:

  1. 确保先阅读最新的官方文档,而不是一些过时的中文文档。
  2. 通过 微软必应搜索国际版 来搜,而不要要Baidu来搜。
  3. 访问Kubernetes GitHub repository上面的Issue list查看最新的问题反馈:
  4. 最常见又最怪异的错通常是因为墙的原因,找一台可以科学上网的机器,在VMware虚拟机中先装一遍,看是不是有依赖特别的镜像、包或配置文件。

参考文档

后记

一键部署Kubernetes集群

为了避免安装Kubernetes过程中重复踩坑,我整理了一键部署Kubernetes集群的脚本,请参见:

使用kubeadm一键部署kubernetes集群 v1.10.3 v1.11.0

猜你喜欢

转载自blog.csdn.net/nklinsirui/article/details/80895954