专栏首页院长运维开发K8s二进制升级从1.14.2至1.16.2

K8s二进制升级从1.14.2至1.16.2

升级前准备 master节点组件: kubectl,kube-apiserver,kube-controller-manager,kube-scheduler

node节点组件:kube-proxy,kubelet

##暂不升级的组件,需要升级后面再单独升级##

数据库组件:etcd

网络组件:flannel

二进制包下载:https://github.com/kubernetes/kubernetes/releases

开始升级 升级kubectl 备份kubectl,在所有的master节点操作

[root@bjxg-sy-test bin]# cd /opt/k8s/bin
[root@bjxg-sy-test bin]# mv kubectl kubectl.bak.v1.12
[root@bjxg-sy-test opt]# mkdir /opt/k8s.1.16.2-client
[root@bjxg-sy-test k8s.1.16.2-client]# cd /opt/k8s.1.16.2-client
[root@bjxg-sy-test k8s.1.16.2-client]# tar -zxvf kubernetes-client-linux-amd64.tar.gz

分发kubectl到所有节点

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp kubernetes/client/bin/kubectl root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done

查看kubectl版本

[root@bjxg-sy-test k8s.1.16.2-client]# kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.2", GitCommit:"66049e3b21efe110454d67df4fa62b08ea79a19b", GitTreeState:"clean", BuildDate:"2019-05-16T16:14:56Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
client版本是kubectl执行文件的版本.
server版本是kube-apiserver执行文件的版本.

升级master节点组件 在master节点操作,另需要注意一台master节点一台操作,如果是用的keepalived做的vip高可用,需要先让vip漂移;如果是nginx的4层代理,需要先将要升级的master节点摘掉。

systemctl stop kube-apiserver
systemctl stop kube-scheduler
systemctl stop kube-controller-manager

mv /opt/k8s/bin/kube-apiserver{,.bak.v1.12}
mv /opt/k8s/bin/kube-controller-manager{,.bak.v1.12}
mv /opt/k8s/bin/kube-scheduler{,.bak.v1.12}
mv /opt/k8s/bin/kubeadm{,.bak.v1.12}

mkdir /opt/k8s.1.16.2-server
cd /opt/k8s.1.16.2-server
tar -zxvf kubernetes-server-linux-amd64.tar.gz

复制新版本客户端

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp kubernetes/server/bin/kube-apiserver root@${node_ip}:/opt/k8s/bin/
    scp kubernetes/server/bin/{kube-controller-manager,kube-scheduler,kubeadm} root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done

启动服务 kube-apiserver

[root@bjxg-sy-test k8s.1.16.2-server]# systemctl status kube-apiserver
● kube-apiserver.service - Kubernetes API Server
   Loaded: loaded (/etc/systemd/system/kube-apiserver.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-04-15 14:52:14 CST; 39s ago
     Docs: https://github.com/GoogleCloudPlatform/kubernetes
 Main PID: 11427 (kube-apiserver)
    Tasks: 13
   Memory: 340.5M
   CGroup: /system.slice/kube-apiserver.service
           └─11427 /opt/k8s/bin/kube-apiserver --advertise-address=10.16.16.11 --default-not-ready-tolerati...

看下kubectl version

[root@bjxg-sy-test k8s.1.16.2-server]# kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:09:08Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"linux/amd64"}

启动kube-controller-manager和kube-scheduler

systemctl start kube-controller-manager && systemctl start kube-scheduler

升级node节点组件 在所有node节点执行

systemctl stop kubelet
systemctl stop kube-proxy

mv /opt/k8s/bin/kubelet{,.bak.v1.12}
mv /opt/k8s/bin/kube-proxy{,.bak.v1.12}

拷贝二进制文件

source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    scp kubernetes/server/bin/{kubelet,kube-proxy} root@${node_ip}:/opt/k8s/bin/
    ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
  done

在kubernetes 1.15版起kubelet需要删除allow-privileged这个参数,因为新版本中这个参数已经过时。我们只需要在kubelet启动脚步中删除即可

sed -i '/allow-privileged/d'  /etc/systemd/system/kubelet.service
systemctl daemon-reload && systemctl start kubelet
systemctl start kube-proxy

查看并验证 查看node节点

[root@bjxg-sy-test k8s.1.16.2-server]# kubectl get node
NAME           STATUS   ROLES    AGE   VERSION
bjxg-sy-test   Ready    <none>   27h   v1.16.2

启动一个pod

[root@bjxg-sy-test k8s.1.16.2-server]# kubectl create deploy nginx --image=nginx
deployment.apps/nginx created
[root@bjxg-sy-test k8s.1.16.2-server]# kubectl get pods
NAME                     READY   STATUS              RESTARTS   AGE
nginx-86c57db685-hzsxk   0/1     ContainerCreating   0          5s

至此,k8s集群升级完毕

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • K8s基于自定义指标实现自动扩容

    基于自定义指标 除了基于 CPU 和内存来进行自动扩缩容之外,我们还可以根据自定义的监控指标来进行。这个我们就需要使用 Prometheus Adapter,P...

    院长技术
  • Kubeadm多master集群升级k8s版本

    版本说明 本次升级版本为从1.15.3升级至1.16.3。另外更高的k8s版本,要注意内核要为4.4以上,尤其是1.18版本。

    院长技术
  • K8s查看当前nodeport的端口

    从老架构迁移到k8s的过程中,域名不能直接迁到ingress里面,涉及的东西比较多,所以需要开nodeport暴露,但是向外暴露都选择nodeport,没有统一...

    院长技术
  • StreamingPro manager 服务部署指南

    StreamingPro中的 streamingpro-manager 提供了部署,管理Spark任务的Web界面。轻量易用。

    用户2936994
  • 听云SDK发布《中国移动应用性能管理白皮书》:高德路径规划API接口响应耗时最短

    移动互联网时代,各种应用都在抢占移动APP市场。据统计,2017年全球手机用户人数将突破50亿人,发展速度远远超过传统互联网,中国亦如是。相应的,中国的移动应用...

    BestSDK
  • 全球首例,Adversarial T-shirt让你在AI目标检测系统中隐身

    由美国东北大学林雪研究组,MIT-IBM Watson AI Lab 和 MIT 联合研发的这款基于对抗样本设计的 T-shirt (adversarial T...

    机器之心
  • 全球首例,Adversarial T-shirt让你在AI目标检测系统中隐身

    由美国东北大学林雪研究组,MIT-IBM Watson AI Lab 和 MIT 联合研发的这款基于对抗样本设计的 T-shirt (adversarial T...

    代码医生工作室
  • 数据结构之线段树

    1、什么是线段树(也称为区间树)Segment Tree。为什么使用线段树,线段树解决了什么问题,对于有一类问题,我们关心的是线段(或者区间)。

    别先生
  • 少年你骨骼精奇?AI现在可以帮你看一看了

    唐木 发自 浙江杭州 量子位 报道 | 公众号 QbitAI ? “少年,我看你骨骼精奇,是个练武奇才,这里有一本《如来神掌》……” 现在,AI就能判断你是...

    量子位
  • ThinkPHP控制器-精华总结

    TP3.23对控制器做了更加细致的分层,除了默认的Controller层,还可以自定义事件控制层Event。

    公众号php_pachong

扫码关注云+社区

领取腾讯云代金券