K8s 集群搭建
Kubernetes 是什么
Kubernetes,又称为 K8s (首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 K8s) 或者简称为 kube ,是一种可自动实施 Linux 容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,Kubernetes 可以将运行 Linux 容器的多组主机聚集在一起,帮助我们轻松高效地管理这些集群。
关于 K8s 的架构组成,可以查看这篇文章。
前期准备
主机
想要体验 K8s,您至少需要两台 Linux 主机 (不然怎么能称作集群呢),一台主机做为 master,其余主机做为 worker。当然如果你只有一台主机,也想体验一下 Kubernetes, 确实也是可以的。可以查阅一下 k3s 或 k0s 相关资料。
以我的集群为例,我有 5 台主机,1 台 master,4 台 worker。
环境准备 (所有主机都需要配置)
下面的命令请使用root用户执行 (Debian/Ubuntu)
主机配置
- 关闭防火墙
1
2
3
4$ systemctl stop firewalld
$ systemctl disable firewalld
# 检查防火墙状态
$ systemctl status firewalld - 关闭 selinux (Ubuntu用户可略过)
1
$ sed -i 's/enforcing/disabled/' /etc/selinux/config - 关闭 swap
1
sed -ri 's/.*swap.*/#&/' /etc/fstab - 设置主机名 (可选,便于后续管理)
1
$ hostnamectl set-hostname <你想要的主机名> - 将桥接流量传递到 iptables
1
2
3
4
5$ cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system
安装并配置 Docker
首先安装 docker,如果已经安装了可以略过。
1 | |
配置镜像仓库,加速拉取镜像
1 | |
测试一下
1 | |
没有报错即安装成功。
开始安装
下面的命令请使用root用户执行 (Debian/Ubuntu)
在所有主机上安装 kubelet、kubeadm、kubectl
1 | |
下面的命令不是在所有主机上执行的,执行前需要看清楚。
初始化 Master 节点 (仅在 master 节点执行)
1 | |
参数解读:
第2行: –image-repository=’mirror.szlee.cn’,从 mirror.szlee.cn 中拉取 K8s 基础镜像,由于 kubeadm 默认从 k8s.gcr.io 拉取镜像,国内无法访问,所以需要制定镜像仓库。
第3行: –control-plane-endpoint=10.0.0.6 (可以参考一下上面的拓扑图)
第4行: –pod-network-cidr=172.6.0.0/16,指定 Pod 的 IP 段,只要跟你的网段不重复即可。
第5行: –service-cidr=172.8.0.0/16,指定 Service 的 IP 段,只要跟你的网段不重复即可。
如需了解全部参数信息,请查阅 kubeadm官方文档。
kubeadm init 首先运行一系列预检查以确保机器准备运行 Kubernetes,如果有错误,则会报告并退出。然后 kubeadm init 下载并安装 Master 所需组件 (kube-scheduler、kube-api-server、etcd等)。这可能会需要几分钟。 完成之后你应该看到
1 | |
记录 kubeadm init 输出的 kubeadm join 命令 (最后一行的那个),然后去 worker 节点上执行。
初始化工作节点 (worker 主机上执行)
执行刚刚 master 节点输出的 kubeadm join 命令即可。
检查工作节点状态并部署网络插件 (master 主机上执行)
1 | |
可以看到,我们的所有节点还处在 NotReady 状态,因为各节点间还未能正常通信,现在我们部署网络插件
- 下载 kube-flannel.yml
- 修改 128 行的网络为我们的 Pod IP 地址段 172.6.0.0/16
- 执行
kubectl apply -f kube-flannel.yml
稍等 1 分钟后再次查看节点状态
1 | |