最简单的kubernetes HA安装方式-sealos详解
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,kubernetes集群三步安装概述本文教你如何用一条命令构建k8s高可用集群且不依赖haproxy和keepalived,也无需ansible。通过内核ipvs对apiserver进行负载均衡,并且
千家信息网最后更新 2025年12月03日最简单的kubernetes HA安装方式-sealos详解
kubernetes集群三步安装
概述
本文教你如何用一条命令构建k8s高可用集群且不依赖haproxy和keepalived,也无需ansible。通过内核ipvs对apiserver进行负载均衡,并且带apiserver健康检测。
快速入门
sealos项目地址
准备条件
- 装好docker并启动docker
- 把离线安装包 下载好拷贝到所有节点的/root目录下, 不需要解压,如果有文件服务器更好,sealos支持从一个服务器上wget到所有节点上
安装
sealos已经放在离线包中,解压后在kube/bin目录下(可以解压一个,获取sealos bin文件)
sealos init \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ # master地址列表 --node 192.168.0.5 \ # node地址列表 --user root \ # 服务用户名 --passwd your-server-password \ # 服务器密码,用于远程执行命令 --pkg kube1.14.1.tar.gz \ # 离线安装包名称 --version v1.14.1 # kubernetes 离线安装包版本,这渲染kubeadm配置时需要使用然后,就没有然后了
其它参数:
--kubeadm-config string kubeadm-config.yaml local # 自定义kubeadm配置文件,如有这个sealos就不去渲染kubeadm配置 --pkg-url string http://store.lameleg.com/kube1.14.1.tar.gz download offline pakage url # 支持从远程拉取离线包,省的每个机器拷贝,前提你得有个http服务器放离线包 --vip string virtual ip (default "10.103.97.2") # 代理master的虚拟IP,只要与你地址不冲突请不要改清理
sealos clean \ --master 192.168.0.2 \ --master 192.168.0.3 \ --master 192.168.0.4 \ # master地址列表 --node 192.168.0.5 \ # node地址列表 --user root \ # 服务用户名 --passwd your-server-password增加节点
新增节点可直接使用kubeadm, 到新节点上解压
cd kube/shell && init.shecho "10.103.97.2 apiserver.cluster.local" >> /etc/hosts # using vipkubeadm join 10.103.97.2:6443 --token 9vr73a.a8uxyaju799qwdjv \ --master 10.103.97.100:6443 \ --master 10.103.97.101:6443 \ --master 10.103.97.102:6443 \ --discovery-token-ca-cert-hash sha256:7c2e69131a36ae2a042a339b33381c6d0d43887e2de83720eff5359e26aec866安装dashboard prometheus等
离线包里包含了yaml配置和镜像,用户按需安装。
cd /root/kube/confkubectl taint nodes --all node-role.kubernetes.io/master- # 去污点,根据需求看情况,去了后master允许调度kubectl apply -f heapster/ # 安装heapster, 不安装dashboard上没监控数据kubectl apply -f heapster/rbac kubectl apply -f dashboard # 装dashboardkubectl apply -f prometheus # 装监控是不是很神奇,到底是如何做到这点的?那就需要去看下面两个东西
关于超级kubeadm
我们定制了kubeadm,做了两个事情:
- 在每个node节点上增加了一条ipvs规则,其后端代理了三个master
- 在node上起了一个lvscare的static pod去守护这个 ipvs, 一旦apiserver不可访问了,会自动清理掉所有node上对应的ipvs规则, master恢复正常时添加回来。
通过这样的方式实现每个node上通过本地内核负载均衡访问masters:
+----------+ +---------------+ virturl server: 127.0.0.1:6443 | mater0 |<----------------------| ipvs nodes | real servers: +----------+ |+---------------+ 10.103.97.200:6443 | 10.103.97.201:6443 +----------+ | 10.103.97.202:6443 | mater1 |<---------------------+ +----------+ | | +----------+ | | mater2 |<---------------------+ +----------+这是一个非常优雅的方案
其实sealos就是帮你执行了如下命令:
super-kubeadm
在你的node上增加了三个东西:
cat /etc/kubernetes/manifests # 这下面增加了lvscare的static podipvsadm -Ln # 可以看到创建的ipvs规则cat /etc/hosts # 增加了虚拟IP的地址解析关于lvscare
这是一个超级简单轻量级的lvs创建与守护进程,支持健康检查,底层与kube-proxy使用的是相同的库,支持HTTP的健康检测。
清理机器上的IPVS规则
ipvsadm -C启动几个nginx作为ipvs代理后端的realserver
docker run -p 8081:80 --name nginx1 -d nginxdocker run -p 8082:80 --name nginx2 -d nginxdocker run -p 8083:80 --name nginx3 -d nginx启动lvscare守护它们
lvscare care --vs 10.103.97.12:6443 --rs 127.0.0.1:8081 --rs 127.0.0.1:8082 --rs 127.0.0.1:8083 \--health-path / --health-schem http可以看到规则已经被创建
ipvsadm -Ln[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.103.97.12:6443 rr -> 127.0.0.1:8081 Masq 1 0 0 -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 0 curl vip:
[root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443 Welcome to nginx! 删除一个nginx,规则就少了一条
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx1nginx1[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.103.97.12:6443 rr -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 1 再删除一个:
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx2nginx2[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.103.97.12:6443 rr -> 127.0.0.1:8083 Masq 1 0 0 此时VIP任然可以访问:
[root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443 Welcome to nginx! 全部删除, 规则就自动被清除光了, curl也curl不通了,因为没realserver可用了
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx3nginx3[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.103.97.12:6443 rr[root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443 curl: (7) Failed connect to 10.103.97.12:6443; 拒绝连接再把nginx都启动起来,规则就自动被加回来
[root@iZj6c9fiza9orwscdhate4Z ~]# docker start nginx1 nginx2 nginx3nginx1nginx2nginx3[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.103.97.12:6443 rr -> 127.0.0.1:8081 Masq 1 0 0 -> 127.0.0.1:8082 Masq 1 0 0 -> 127.0.0.1:8083 Masq 1 0 0 所以sealos中,上面apiserver就是上面三个nginx,lvscare会对其进行健康检测。
当然你也可以把lvscare用于一些其它场景,比如代理自己的TCP服务等
规则
地址
服务
节点
健康
服务器
代理
支持
配置
三个
命令
文件
用户
检测
均衡
东西
两个
内核
就是
拷贝
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全 通报机制
周鸿祎汽车网络安全
维护网络安全岂能独善其身
如何在家访问公司的服务器
电脑记笔记软件开发
db2数据库 sql
bigint数据库最大长度
介绍软件开发项目签什么协议
硬盘插入服务器的区别
诈骗短信数据库
执行删除数据库名称
软件开发技术文档制作
APP和服务器通信安全风险
南昌互联网科技有限公司法人
中国每年网络安全类毕业生
浦东新区网络技术服务比较
数据库id页脚在哪里
高唐网络安全
西安国内软件开发公司排行
数据库必须提供的控制功能
信息处理与网络技术
国际上的企业管理软件开发
app应用软件开发价格
sql怎么看mdf数据库
广州必鹏互联网科技有限公司
APP和服务器通信安全风险
南昌互联网科技有限公司法人
数据库expdp
我的世界远程服务器管理
做软件开发上什么专业