加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

最简单的 Kubernetes 高可用安装方式!

发布时间:2019-09-04 08:39:20 所属栏目:评测 来源:佚名
导读:本文教你如何用一条命令构建 Kubernetes 高可用集群且不依赖 HAProxy 和 Keepalived,也无需 Ansible。通过内核 IPVS 对 apiserver 进行负载均衡,并且带 apiserver 健康检测。架构如下图所示: 本项目名叫 sealos,旨在做一个简单干净轻量级稳定的 Kubern

升级控制节点

  1. $ kubeadm upgrade plan  
  2. $ kubeadm upgrade apply v1.15.0 

重启 kubelet:

  1. $ systemctl restart kubelet 

其实 kubelet 升级很简单粗暴,我们只需要把新版本的 kubelet 拷贝到 /usr/bin 下面,重启 kubelet service 即可,如果程序正在使用不让覆盖那么就停一下 kubelet 再进行拷贝,kubelet bin 文件在 conf/bin 目录下。

升级其它控制节点:

  1. $ kubeadm upgrade apply 

升级 Node

驱逐节点(要不要驱逐看情况, 喜欢粗暴的直接来也没啥):

  1. $ kubectl drain $NODE --ignore-daemonsets 

更新 kubelet 配置:

  1. $ kubeadm upgrade node config --kubelet-version v1.15.0 

然后升级 kubelet。同样是替换二进制再重启 kubelet service。

  1. $ systemctl restart kubelet 

召回失去的爱情:

  1. $ kubectl uncordon $NODE 

验证

  1. $ kubectl get nodes 

如果版本信息都对的话基本就升级成功了。

kubeadm upgrade apply 干了啥?

  1. 检查集群是否可升级
  2. 执行版本升级策略 哪些版本之间可以升级
  3. 确认镜像是否存在
  4. 执行控制组件升级,如果失败就回滚,其实就是 apiserver、controller manager、scheduler 等这些容器
  5. 升级 kube-dns 和 kube-proxy
  6. 创建新的证书文件,备份老的如果其超过 180 天

源码编译

因为使用了 netlink 库,所以推荐在容器内进行编译,只需一条命令:

  1. $ docker run --rm -v $GOPATH/src/github.com/fanux/sealos:/go/src/github.com/fanux/sealos -w /go/src/github.com/fanux/sealos -it golang:1.12.7 go build 

如果你使用的是 go mod,则需要指定通过 vendor 编译:

  1. $ go build -mod vendor 

卸载

  1. $ sealos clean  
  2. --master 192.168.0.2  
  3. --master 192.168.0.3  
  4. --master 192.168.0.4  
  5. --node 192.168.0.5  
  6. --user root  
  7. --passwd your-server-password 

sealos 实现原理

执行流程

  • 通过 sftp 或者 wget 把离线安装包拷贝到目标机器上(masters 和 nodes)。
  • 在 master0 上执行 kubeadm init。
  • 在其它 Master 上执行 kubeadm join 并设置控制面,这个过程会在其它 Master 上起动 etcd 并与 master0 的 etcd 组成集群,并启动控制平面的组件(apiserver、controller 等)。
  • join node 节点,会在 Node 上配置 IPVS 规则,配置 /etc/hosts 等。

所有对 apiserver 的请求都是通过域名进行访问,因为 Node 需要通过虚拟 IP 连接多个 Master,每个节点的 kubelet 与 kube-proxy 访问 apiserver 的虚拟地址是不一样的,而 kubeadm 又只能在配置文件中指定一个地址,所以使用一个域名但是每个节点解析的 IP 不同。当 IP 地址发生变化时仅需要修改解析地址即可。

本地内核负载

通过这样的方式实现每个 Node 上通过本地内核负载均衡访问 masters:

  1. +----------+                       +---------------+  virturl server: 127.0.0.1:6443 
  2. | mater0   |<----------------------| ipvs nodes    |    real servers: 
  3. +----------+                      |+---------------+            10.103.97.200:6443 
  4.                                 |                             10.103.97.201:6443 
  5. +----------+                      |                             10.103.97.202:6443 
  6. | mater1   |<---------------------+ 
  7. +----------+                      | 
  8.                                 | 
  9. +----------+                      | 
  10. | mater2   |<---------------------+ 
  11. +----------+ 

在 Node 上起了一个 LVScare 的 static pod 去守护这个 IPVS,一旦 apiserver 不可访问了,会自动清理掉所有 Node 上对应的 IPVS 规则, Master 恢复正常时添加回来。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读