zoukankan      html  css  js  c++  java
  • k8s集群升级

    前言:
      生产环境的k8s为了追求稳定,不能直接安装最新版本,随着新版本功能的稳定,很多新功能是老版本不具备的,这时进行一次稳妥的升级便是一个不错的选择。

    以升级k8s集群v1.13.3到v1.14.0为例

    升级次序:先升级master,后升级node
    升级之前的准备:确保已经备份了etcd数据库与master节点的状态

    升级master

    安装kubernetes的yum源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
     
    name=Kubernetes repo
     
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
     
    gpgcheck=0
     
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
     
    enabled=1
    
    EOF
    
    yum makecache
    yum list --showduplicates kubeadm --disableexcludes=kubernetes
    # find the latest 1.14 version in the list
    # it should look like 1.14.x-0, where x is the latest patch
    

    安装v1.14.0的kubeadm与kubelet安装包

    yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 
    

    验证下载的包是否为期望的版本

    sudo kubeadm version
    
    期望输出
    kubeadm version: &version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.0", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:51:21Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
    

    验证集群是否可升级

    sudo kubeadm upgrade plan
    
    期望输出
    [preflight] Running pre-flight checks.
    [upgrade] Making sure the cluster is healthy:
    [upgrade/config] Making sure the configuration is correct:
    [upgrade/config] Reading configuration from the cluster...
    [upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
    [upgrade] Fetching available versions to upgrade to
    [upgrade/versions] Cluster version: v1.13.3
    [upgrade/versions] kubeadm version: v1.14.0
    
    Awesome, you're up-to-date! Enjoy!
    
    

    执行升级

    sudo kubeadm upgrade apply v1.14.0
    交互界面输入y,确认升级
    期望输出
    [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.14.0". Enjoy!
    

    升级kubectl

    yum install -y  kubectl-1.14.0-0
    

    重启kubelet

    sudo systemctl daemon-reload && systemctl restart kubelet
    

    查看升级结果

    NAME        STATUS   ROLES    AGE   VERSION
    k8s-agent   Ready    <none>   66m   v1.13.3
    k8s-cp      Ready    master   69m   v1.14.0
    
    

    升级node

    安装kubernetes的yum源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
     
    name=Kubernetes repo
     
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
     
    gpgcheck=0
     
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
     
    enabled=1
    
    EOF
    
    yum makecache
    

    安装v1.14.0的kubeadm与kubelet安装包

    yum install -y kubeadm-1.14.0-0 kubelet-1.14.0-0
    

    修改kubelet配置

    sudo kubeadm upgrade node config --kubelet-version v1.14.0
    

    升级kubectl

    yum install -y  kubectl-1.14.0-0 
    

    重启kubelet

    sudo systemctl daemon-reload && systemctl restart kubelet
    

    查看升级结果

    NAME        STATUS   ROLES    AGE   VERSION
    k8s-agent   Ready    <none>   70m   v1.14.0
    k8s-cp      Ready    master   73m   v1.14.0
    

    参考
    补充第一点:如果k8s使用的是动态调度,那么在升级node节点之前,应该将其标记为不可用,从集群中剔出:
    通过将节点标记为不可调度并删除工作负载,为维护节点做好准备。运行:

    kubectl drain $NODE --ignore-daemonsets
    

    你应该看到类似这样的输出:

    node/ip-172-31-85-18 cordoned
    WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-dj7d7, kube-system/weave-net-z65qx
    
    node/ip-172-31-85-18 drained
    

    补充第二点:本博客最多可升级至1.15版本,1.15-->1.16版本需要加参数如下

    kubeadm upgrade apply v1.16.10 --ignore-preflight-errors=CoreDNSUnsupportedPlugins
    

    补充第三点:离线更新时,不但要下载kubeadm,kubectl,kubelet的安装包,还要在线环境下升级成功所下载的docker镜像,并将其离线上传,才能离线升级成功

    在离线安装kubeadm,kubectl,kubelet时,可以用yumdownloader下载,yum install *来安装
    
  • 相关阅读:
    WordPress“无法将上传的文件移动至wp-content/uploads/”的解决办法
    npm安装less和less-loadernpm或者stylus和stylus-loader
    vue-cli脚手架安装
    JavaScript 中的回调函数
    css同时满足两个类名才有效果的写法
    jQuery对象与JS原生对象之间的转换
    css3在动画完成后执行事件
    5秒让你的View变3D,ThreeDLayout使用和实现
    给大家安利一个学习angular2的视频网站
    JAVA中的常量定义在class中还是interface中比较合理?
  • 原文地址:https://www.cnblogs.com/xiaoyuxixi/p/13152298.html
Copyright © 2011-2022 走看看