KubeSphere实战:利用kubekey快速部署高可用Kubernetes集群与KubeSphere平台

1. 为什么你需要KubeSphere和kubekey?

如果你正在或者打算接触云原生,那你肯定绕不开Kubernetes。Kubernetes很强大,但实话实说,它也挺“劝退”的。光是那一堆YAML文件、各种抽象概念(Pod、Service、Ingress、PV/PVC),还有复杂的网络和存储配置,就足以让新手望而却步。我自己刚上手那会儿,光是搭建一个能用的集群就折腾了好几天,各种证书问题、网络不通、镜像拉取失败,踩坑踩到怀疑人生。

这时候,KubeSphere就出现了。你可以把它理解为一个给Kubernetes穿上的“漂亮外衣”和“智能管家”。它提供了一个非常直观的图形化控制台,把Kubernetes那些复杂的操作都封装成了点点鼠标、填填表单就能完成的事情。比如你想部署一个应用,在KubeSphere里,你不需要手写复杂的Deployment和Service YAML,通过它的“应用模板”或者“应用商店”,几步就能搞定。它还集成了很多企业级功能,比如多租户管理、监控告警(基于Prometheus)、日志查询(基于Elasticsearch)、DevOps流水线、服务网格(Istio)等等。简单说,有了KubeSphere,你和你的团队就能更专注于业务开发,而不是整天和kubectl命令较劲。

那kubekey又是干嘛的呢?它就是帮你把“搭建Kubernetes集群”和“安装KubeSphere平台”这两件麻烦事,变成“一键搞定”的神器。以前,我们要用kubeadm一步步初始化集群、安装网络插件、配置存储,然后再用Helm去部署KubeSphere,过程繁琐且容易出错。kubekey是KubeSphere官方用Go语言开发的集群生命周期管理工具,它把所有这些步骤都自动化了。你只需要准备好几台干净的Linux机器,写一个简单的配置文件,然后运行一条命令,它就能自动帮你完成从操作系统依赖检查、容器运行时安装、Kubernetes集群部署到KubeSphere平台安装的全过程。它支持高可用部署,也支持在已有的Kubernetes集群上单独安装KubeSphere,非常灵活。

所以,这套组合拳特别适合以下人群:想快速搭建云原生环境进行学习测试的开发者和学生;中小团队希望快速拥有一个功能完善、开箱即用的容器平台,而无需投入大量运维精力;以及需要频繁搭建和销毁集群的CI/CD测试场景。接下来,我就手把手带你走一遍实战流程。

2. 部署前的环境准备与规划

在按下那个“一键安装”按钮之前,充分的准备工作是成功的关键。这一步没做好,后面很可能就会卡在奇怪的错误上。根据我的经验,把环境理清楚,能省去至少80%的麻烦。

首先,我们需要准备机器。我强烈建议至少使用三台CentOS 7.9或Ubuntu 20.04 LTS的服务器(虚拟机或物理机均可)。为什么是三台?因为我们要搭建一个最小化的高可用集群。一台作为Master(控制平面),如果它挂了,整个集群就失联了,这显然不符合生产要求。使用三台,我们可以部署多Master节点,实现控制平面的高可用。这里我以三台机器为例,配置建议至少2核CPU、4GB内存、40GB磁盘。我的实验环境规划如下:

主机IP 主机名 角色
192.168.1.101 ks-master-01 主控制节点、etcd、工作节点
192.168.1.102 ks-master-02 控制节点、etcd、工作节点
192.168.1.103 ks-master-03 控制节点、etcd、工作节点

你可能注意到了,我把所有节点都同时当作控制节点和工作节点。这在资源有限的学习或测试环境中是完全可行的,kubekey也支持这种模式。在生产环境,通常会分离控制平面和工作节点。

接下来,我们需要在所有三台机器上执行一系列初始化命令。这些操作主要是为了满足Kubernetes运行的基础要求。

第一步,关闭防火墙和SELinux。 Kubernetes需要自己管理网络规则,系统防火墙可能会干扰其网络组件(如Calico、Flannel)的正常工作。执行以下命令:

# 关闭防火墙(临时生效)
systemctl stop firewalld
# 关闭防火墙(永久生效,重启后依然关闭)
systemctl disable firewalld
# 对于Ubuntu系统,通常是ufw: ufw disable

# 关闭SELinux(临时生效)
setenforce 0
# 关闭SELinux(永久生效,需要编辑配置文件后重启)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

第二步,关闭swap交换分区。 Kubernetes的设计理念是,当Pod内存不足时,应该被杀死并重新调度,而不是使用缓慢的磁盘交换空间,这会影响性能和稳定性。

# 临时关闭当前已启用的swap
swapoff -a
# 永久关闭,注释掉/etc/fstab中所有包含swap的行
sed -ri 's/.*swap.*/#&/' /etc/fstab

第三步,配置内核参数,将桥接的IPv4流量传递到iptables链。 这是为了让Kubernetes Service的流量转发正常工作。

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 使配置生效
sysctl --system

第四步,确保所有节点时间同步。 集群节点间时间不一致会导致证书错误、日志时间错乱等一系列诡异问题。

# 安装时间同步工具(CentOS)
yum install -y ntpdate
# 同步时间(可以换成国内的NTP服务器,如ntp.aliyun.com)
ntpdate time.windows.com
# 更推荐配置chronyd服务进行持续同步

第五步,安装容器运行时。 Kubernetes 1.20之后,Docker不再是唯一选择,但仍然是兼容性最好的。我们安装Docker并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值