| 
                         升级控制节点 
- $ 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 恢复正常时添加回来。                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |