(接上篇)
Kubernetes的生产环境部署
本节对部署Kubernetes生产环境的相关工具进行梳理,并对不同工具从安装方法、使用方法、相应原理的维度进行横向和纵向对比,具体如表2-3所示。
表2-3 搭建Kubernetes生产环境的工具
| 部署工具 | 依赖 | 原理 | 备注 |
|---|---|---|---|
| kubeadm | docker容器运行时、Kubelet | 将安装Kubernetes过程的环境检查、下载镜像、生成证书、配置Kubelet、准备yaml文件等步骤自动化 | Kubeadm所需的镜像默认以k8s.gcr.io开头,而且是硬编码的,国内无法直接下载,需要提前准备好 |
| kops | Kubectl | 在kubeadm的基础上,使搭建Kubernetes集群更方便 | 主要在AWS上进行自动化部署Kubernetes集群 |
| KRIB | Golang | Digital Rebar Provision专有的在裸机上搭建Kubernetes集群的工具 | Digital Rebar Provision还可以调用Kubespray |
| Kubespray | ansible | 用ansible playbooks、inventory自动化部署Kubernetes集群 |
从表2-3可知,kops、KRIB有明显局限性,因为kops主要在AWS上进行自动化部署Kubernetes集群;KRIB主要在裸机上进行自动化部署Kubernetes集群。kubeadm和Kubespray可以在多种平台上搭建Kubernetes的生产环境,kubespray从v2.3开始支持kubeadm,也就意味着kubespray最终还是通过kubeadm进行自动化部署Kubernetes集群。
基于上述原因,本节将只对kubeadm进行自动化部署Kubernetes集群的步骤进行说明。
本节将对使用kubeadm的注意事项以及安装、使用kubeadm进行梳理和分析。kubeadm支持的平台和资源要求如表2-4所示。
表2-4 kubeadm支持的平台和资源要求
| kubeadm | 支持的平台 | Ubuntu 16.04+、Debian 9+CentOS 7、Red Hat Enterprise Linux (RHEL) 7、Fedora 25+、HyprIoTOS v1.0.1+、Container Linux (tested with 1800.6.0) |
|---|---|---|
| 资源要求 | 至少2CPUs、2GB内存 | |
| 注意事项 | 集群中主机之间的网络必须是相互可达的,在集群中每台主机的hostname、MAC address和product_uuid必须是唯一的,iptables后端不用nftable,在集群中每台主机上Kubernetes需要的一些端口必须是打开的,而且swap要关闭 |
接下来介绍对kubeadm的注意事项注意说明。
1)确保集群中所有主机之间网络可达。
在集群中不同主机间通过ping命令进行检测,命令如下:
# ping {被检测主机ip}
2)确保集群中所有主机的hostname、MAC address和product_uuid唯一。
查看主机hostname命令:#hostname
查看MAC address命令:#ip link 或者 #ifconfig -a
查看product_uuid命令:#/sys/class/dmi/id/product_uuid
3)iptables后端不用nftable,命令如下:
# update-alternatives --set iptables /usr/sbin/iptables-legacy
4)Kubernetes集群中主机需要打开的端口,如表2-5所示。
表2-5 Kubernetes集群中主机需要打开的端口
| 节点 | 协议 | 流量方向 | 端口 | 用途 | 使用组件 |
|---|---|---|---|---|---|
| 控制节点 | TCP | 进入集群 | 6443 | Kubernetes-api-server | 集群中所有组件都会使用这个端口 |
| 2379、2380 | etcd server client API | kube-api、etcd | |||
| 10250 | Kubelet API | Kubelet、控制平面 | |||
| 10251 | kube-scheduler | kube-scheduler | |||
| 10252 | kube-controller-manager | kube-controller-manager | |||
| 计算节点 | TCP | 进入集群 | 10250 | Kubelet API | Kubelet、控制平面 |
| 30000-32767 | NodePort Services | 集群中所有组件都会使用这个端口 |
由表2-5可知,上述需要打开的端口都是Kubernetes默认需要打开的端口。我们也可以根据需要对一些端口进行单独指定,比如Kubernetes-api-server默认打开的端口是6443,也可以指定打开其他与现有端口不冲突的端口。
5)在Kubernetes集群中所有节点上关闭swap,命令如下:
#swapoff -a 「未完待续……」 点击下方标题可阅读技术文章