升级控制节点
- $ kubeadm upgrade plan
- $ kubeadm upgrade apply v1.15.0
重启 kubelet:
- $ systemctl restart kubelet
其实 kubelet 升级很简单粗暴,我们只需要把新版本的 kubelet 拷贝到 /usr/bin 下面,重启 kubelet service 即可,如果程序正在使用不让覆盖那么就停一下 kubelet 再进行拷贝,kubelet bin 文件在 conf/bin 目录下。
升级其它控制节点:
- $ kubeadm upgrade apply
升级 Node
驱逐节点(要不要驱逐看情况, 喜欢粗暴的直接来也没啥):
- $ kubectl drain $NODE --ignore-daemonsets
更新 kubelet 配置:
- $ kubeadm upgrade node config --kubelet-version v1.15.0
然后升级 kubelet。同样是替换二进制再重启 kubelet service。
- $ systemctl restart kubelet
召回失去的爱情:
- $ kubectl uncordon $NODE
验证
- $ kubectl get nodes
如果版本信息都对的话基本就升级成功了。
kubeadm upgrade apply 干了啥?
- 检查集群是否可升级
- 执行版本升级策略 哪些版本之间可以升级
- 确认镜像是否存在
- 执行控制组件升级,如果失败就回滚,其实就是 apiserver、controller manager、scheduler 等这些容器
- 升级 kube-dns 和 kube-proxy
- 创建新的证书文件,备份老的如果其超过 180 天
源码编译
因为使用了 netlink 库,所以推荐在容器内进行编译,只需一条命令:
- $ 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 编译:
- $ go build -mod vendor
卸载
- $ sealos clean
- --master 192.168.0.2
- --master 192.168.0.3
- --master 192.168.0.4
- --node 192.168.0.5
- --user root
- --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:
- +----------+ +---------------+ 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 |<---------------------+
- +----------+
在 Node 上起了一个 LVScare 的 static pod 去守护这个 IPVS,一旦 apiserver 不可访问了,会自动清理掉所有 Node 上对应的 IPVS 规则, Master 恢复正常时添加回来。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|