系统要求
安装Kubernetes需要满足以下系统要求:
- 操作系统:支持主流的Linux发行版,如Ubuntu、CentOS等。
- CPU:至少需要2个CPU核心,建议4核或以上以获得更好的性能。
- 内存:最少需要2GB RAM来运行Master和Worker节点。然而,生产环境中为了确保良好性能和稳定性,建议至少为每个节点分配4GB RAM。
- 存储:每个节点需要至少20 GB可用磁盘空间。实际需求根据应用程序和数据量的大小有所不同。
- 网络:所有节点之间必须可以相互通信,要求各节点在同一局域网内,并且可以访问共享的存储资源。
此外,还需要满足以下特殊要求:
- Docker CE版本:Kubernetes建议使用Docker CE 18.06或更高版本作为容器运行时。
- Swap设置:为了达到最佳性能和稳定性,需要禁用swap分区。因此,在安装Kubernetes之前,需要确保swap分区已被关闭。
- 防火墙规则:Kubernetes需要特定的端口打开才能正常工作,这些端口包括TCP 6443、2379-2380和10250-10252,需要在防火墙中允许这些端口的访问。
总之,了解这些系统要求和特殊要求,可以帮助您在部署Kubernetes时避免一些潜在的问题。
使用kubeadm快速安装kubernetes集群
使用kubeadm可以快速地安装Kubernetes集群,以下是基本步骤:
- 环境准备
- 放在Linux节点上
- 关闭swapd:
sudo swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
- 安装Docker:
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce=18.06.2~ce~3-0~ubuntu
- 初始化Master节点
- 安装kubeadm:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - && echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list && sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
- 初始化Master:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
(根据需要修改网段) - 将kubectl配置为非root用户:
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm init命令在执行具体的安装操作之前,会执行一系列被称为pre-flight checks的系统预检查,以确保主机环境符合安装要求,如果检查失败就直接终止,不再进行init操作。用户可以通过kubeadm init phase preflight命令执行预检查操作,确保系统就绪后再执行int操作。如果不希望执行预检查,则也可以为kubeadm init命令添加–ignore-preflight-errors参数进行关闭。如表2.3所示是kubeadm检查的系统配置,对不符合要求的检查项以warning或error级别的信息给出提示。
不符合要求的条件 | 错误级别 |
---|---|
如果待安装的 Kubernetes 版本 (–kubernetes-version)比 kubeadm CLI 工具版本至少高一个次要版本 (minor version) | warning |
在 Linux上运行时,Linux的内核版本未达到最低要求 | error |
在 Linux上运行时,Linux未设置cgroups子系统 | error |
在使用 Docker时,如果 Docker 服务不存在,或被禁用,或未处于活动状态 | warning/error error |
在使用 Docker时,如果 Docker端点不存在或不起作用 | erro |
在使用Docker时,如果Docker 版本不在经过验证的 Docker版本列表中 | warning |
在使用其他CRI引擎时,如果 crictl socket无响应 | error |
如果用户不是root用户 | error |
如果计算机主机名不是有效的DNS 子域格式 | error |
如果无法通过网络查找访问主机名 | warning |
如果kubelet 版本低于 kubeadm 支持的最低 kubelet 版本(当前次要版本号-1 | error |
如果kubelet 版本比所需的控制平面版本至少高一个次要版本号 | erroI |
如果kubelet服务不存在或被禁用 | warning |
如果firewalld 服务处于活动状态 | warning |
如果API Server 使用10250/10251/10252端口号或已被其他进程占用 | error |
如果/etc/kubernetes/manifest目录已经存在并且不为空 | error |
如果/proc/sys/netbridge/bridge-nf-call-iptables 文件不存在或值不为1 | error |
如果使用ipv6地址,并且/proc/sys/net/bridge/bridge-nf-call-ip6tables 文件不存在或值不为1如果启用了系统交换区,即 swap=on | error |
如果系统中不存在或找不到conntrack、ip、iptables、mount、nsenter命令 | error |
如果系统中不存在或找不到ebtables、ethtool、socat、tc、touch、crictl命令 | warning |
如果 API Server、Controller Manager 和 Scheduler 的额外参数中包含一些无效的内容 | warning |
如果到API Server URL (https://API.AdvertiseAddress:API.BindPort)的连接通过代理服务器如果到服务(Service)网络的连接通过代理进行(仅检查第一个地址) | warning |
如果到 Pod子网的连接通过代理进行(仅检查第1个地址) | warning |
在使用外部 etcd时,如果etcd版本低于最低要求版本 | error |
在使用外部 etcd时,如果指定了etcd证书或密钥,但未提供 | error |
在没有外部 etcd (因此将安装本地 etcd)时,如果端口号2379 已被其他进程占用 | error |
在没有外部 etcd (因此将安装本地eted)时,如果etcd.DataDir文件夹已经存在并且.不为空授权方式为ABAC时,如果abac_policy.json文件不存在 | error |
授权方式为WebHook 时,如果 webhook_authz.conf 文件不存在 | error |
- 安装Pod网络插件
- 如使用flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 将Worker节点加入集群
- 在Master节点上生成加入集群的token:
sudo kubeadm token create --print-join-command
- 在要加入集群的Worker节点上运行输出结果,例如:
sudo kubeadm join 192.168.90.95:6443 --token abc123.xxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxx
- 验证kubernetes集群能否正常工作
kubectl get pods --all-namespaces
如果发现有状态错误的Pod,则可以运行kubectl–namespace=kube-system describe pod 命令查看错误原因,常见的错误原因是镜像没有下载完成。
至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。
如果安装失败,则可以运行kubeadm reset命令将主机恢复原状,重新运行kubeadm init命令再次进行安装。