sealos2.0使用教程,最简单kubernetesHA方案
概述
本文教你如何用一条命令构建k8s高可用集群且不依赖haproxy和keepalived,也无需ansible。通过内核ipvs对apiserver进行负载均衡,并且带apiserver健康检测。
快速入门
准备条件
- 装好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.sh
echo "10.103.97.2 apiserver.cluster.local" >> /etc/hosts # using vip
kubeadm 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/conf
kubectl taint nodes --all node-role.kubernetes.io/master- # 去污点,根据需求看情况,去了后master允许调度
kubectl apply -f heapster/ # 安装heapster, 不安装dashboard上没监控数据
kubectl apply -f heapster/rbac
kubectl apply -f dashboard # 装dashboard
kubectl 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 pod
ipvsadm -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 nginx
docker run -p 8082:80 --name nginx2 -d nginx
docker 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 -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
删除一个nginx,规则就少了一条
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx1
nginx1
[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 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 nginx2
nginx2
[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.103.97.12:6443 rr
-> 127.0.0.1:8083 Masq 1 0 0
此时VIP任然可以访问:
[root@iZj6c9fiza9orwscdhate4Z ~]# curl 10.103.97.12:6443
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
全部删除, 规则就自动被清除光了, curl也curl不通了,因为没realserver可用了
[root@iZj6c9fiza9orwscdhate4Z ~]# docker stop nginx3
nginx3
[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 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 nginx3
nginx1
nginx2
nginx3
[root@iZj6c9fiza9orwscdhate4Z ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 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服务等
扫码关注sealyun

探讨可加QQ群:98488045
sealos2.0使用教程,最简单kubernetesHA方案的更多相关文章
- JXLS 2.4.0系列教程(一)——最简单的模板导出
Java中实现excel根据模板导出数据的方法有很多,一般简单的可以通过操作POI进行.还可以使用一些工具很轻松的实现模板导出.这些工具现在还在维护,而且做得比较好的国内的有easyPOI,国外的就是 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block 代理对象(Proxy Object) ...
- Windows环境下Android Studio v1.0安装教程
Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...
- Swift3.0语言教程替换子字符串
Swift3.0语言教程替换子字符串 Swift3.0语言教程替换子字符串,替换子字符串其实就是将字符串中的子字符串删除,然后再进行添加.为了让这一繁琐的过程变的简单,NSString提供了替换子字符 ...
- Android程序开发0基础教程(一)
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一) 平台简单介绍 令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...
- 版权控制之zend guard 6.0使用教程
zend guard6.0使用教程.doc 一.准备工具 1. ZendGuard-6_0_0 下载地址:http://www.zend.com/en/products/guard/downloads ...
- 【转】Windows环境下Android Studio v1.0安装教程
原文网址:http://ask.android-studio.org/?/article/9 http://android-studio.org/index.php/docs/experience/1 ...
- mongodb 简单部署方案及实例
mongodb 简单部署方案及实例 转载:http://my.oschina.net/zhuzhu0129/blog/53290 第一节 准备工作 一 安装mongodb 我这里选用rehl 5.6 ...
- Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据
Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现 ...
随机推荐
- Servlet 3.0异步特性初探
Servlet 是 Java 为了编写服务端程序而定义的一个接口规范,在 Servlet 3.0 以后支持了异步的操作. 最近项目添加了一个代码热部署的功能,在客户端输入信号,信号到达 Web 服务器 ...
- Python自学day-1
一.Python介绍 1.python擅长领域: WEB开发:Django. pyramid. Tornado. Bottle. Flask. WebPy 网络编程:Twisted(牛 ...
- pc微信浏览器打开页面显示空白,其他浏览器正常
pc微信浏览器不兼容es6的语法糖.
- 【Zookeeper01】ubuntu下安装zookeeper单例以及集群
参考链接:http://zookeeper.apache.org/ https://www.cnblogs.com/lyhc/p/6560993.html 系统: 乌班图16.04 虚拟机(zk一般要 ...
- maven的私服私包镜像地址配置settings.xml
新建一个setting节点——镜像标签 <mirror> 添加你的mirror_id,name,url是该镜像的信息,一般都没有什么问题. mirrorOf是被镜像的服务器的id,可以是 ...
- PATB 1041 考试座位号(15)
#include <cstdio> #include <iostream> using namespace std; struct student{ char str[15]; ...
- c#基础二
对VS2012的理解 1.导入命名空间 命名空间就是类的"文件夹".类就是"文件夹"中的文件.需要导入命名空间 添加引用: 如果我需要在一个项目中,访问另一个项 ...
- Python中的字符编码
一.文本编辑器存取文件的原理: #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #2.要想永久保存,需要点击保存按钮:编辑器把内存的 ...
- 设计模式-桥接模式(Bridge)
桥接模式是构造型模式之一.把抽象(Abstraction)与行为实现(Implementor)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. 角色和职责: 1.抽象类(Abstracti ...
- 【Mysql】索引简介
本文口味:番茄炒蛋,预计阅读:10分钟. 博客又停更了两个月,在这期间,对人生和世界多了许多思考.在人生的不同阶段,会对生活和世界有着不一样的认知,而认知的改变也会直接反应在行为模式之中. 对于生活的 ...