资讯专栏INFORMATION COLUMN

最简单的kubernetes HA安装方式-sealos详解

spacewander / 2832人阅读

摘要:集群三步安装概述本文教你如何用一条命令构建高可用集群且不依赖和,也无需。通过内核对进行负载均衡,并且带健康检测。当然你也可以把用于一些其它场景,比如代理自己的服务等

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.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 



Welcome to nginx!

删除一个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 



Welcome to nginx!

全部删除, 规则就自动被清除光了, 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服务等

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27772.html

相关文章

  • 构建生产环境可用高可用kubernetes集群

    摘要:集群三步安装构建生产环境可用的高可用集群项目地址特性支持任意节点的集群自动构建,且集群使用安全证书,通过方式启动,这样可以通过监控来监控集群健康状态支持多节点,允许任意一台宕机集群功能不受影响使用集群,配置安全证书,网络管控数据无单点故障包 kubernetes集群三步安装 构建生产环境可用的高可用kubernetes集群 | sealos项目地址 特性 [x] 支持任意节点的et...

    ShevaKuilin 评论0 收藏0
  • 闲谈 Kubernetes 主要特性和经验分享

    摘要:主要介绍的主要特性和一些经验。先从整体上看一下的一些理念和基本架构,然后从网络资源管理存储服务发现负载均衡高可用安全监控等方面向大家简单介绍的这些主要特性。集群范围内的监控主要由和如构建。 主要介绍 Kubernetes 的主要特性和一些经验。先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgra...

    Guakin_Huang 评论0 收藏0
  • 闲谈 Kubernetes 主要特性和经验分享

    摘要:主要介绍的主要特性和一些经验。先从整体上看一下的一些理念和基本架构,然后从网络资源管理存储服务发现负载均衡高可用安全监控等方面向大家简单介绍的这些主要特性。集群范围内的监控主要由和如构建。 主要介绍 Kubernetes 的主要特性和一些经验。先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgra...

    shevy 评论0 收藏0
  • Kubernetes v1.0特性解析

    摘要:问题是不是定义的一个的容器集群是只部署在同一个主机上杨乐到目前是,同一个里的是部署在同一台主机的。问题这个图里的是安装在哪里的所有的客户端以及会连接这个嘛杨乐可以任意地方,只要能访问到集群,会作为的出口。 kubernetes1.0刚刚发布,开源社区400多位贡献者一年的努力,多达14000多次的代码提交,最终达到了之前预计的milestone, 并意味着这个开源容器编排系统可以正式在...

    HackerShell 评论0 收藏0
  • Kubernetes集群上部署和管理JFrog Artifactory

    摘要:在本文中我们将介绍如何使用在集群上部署和管理。非常强大,它能够在任何地方管理集群,因此我们将在实例上以独立模式启动,使用它在中部署集群。现在,当你点击,就会把部署到你的集群上。当安装完成后,红色的进度条会变更为绿色。 JFrog Artifactory是一个artifacts仓库管理平台,它支持所有的主流打包格式、构建工具和持续集成(CI)服务器。它将所有二进制内容保存在一个单一位置并...

    dunizb 评论0 收藏0

发表评论

0条评论

spacewander

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<