zoukankan      html  css  js  c++  java
  • linux运维、架构之路-K8s二进制版本升级

    一、升级说明

           Kubernetes集群小版本升级基本上是只需要更新二进制文件即可。如果大版本升级需要注意kubelet参数的变化,以及其他组件升级之后的变化。 由于Kubernetes版本更新过快许多依赖并没有解决完善,并不建议生产环境使用较新版本。

    二、软件准备

    1、下载地址

    https://github.com/kubernetes/kubernetes/releases

    2、目前集群版本信息

    [root@k8s-node1 ~]# kubectl get nodes
    NAME        STATUS   ROLES    AGE    VERSION
    k8s-node1   Ready    <none>   336d   v1.16.0
    k8s-node2   Ready    <none>   336d   v1.16.0
    k8s-node3   Ready    <none>   336d   v1.16.0
    [root@k8s-node1 ~]# 
    [root@k8s-node1 ~]# 
    [root@k8s-node1 ~]# 
    [root@k8s-node1 ~]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:36:53Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

    3、升级目标版本v1.18.15

    wget https://dl.k8s.io/v1.18.15/kubernetes-server-linux-amd64.tar.gz

    三、开始升级

    1、Master节点升级

    ①kubectl工具升级(在所有master节点操作)

    备份:

    cd /usr/bin && mv kubectl{,.bak_2021-03-02}

    升级:

    tar xf kubernetes-server-linux-amd64.tar.gz
    cp kubernetes/server/bin/kubectl /usr/bin/

    升级前:

    [root@k8s-node1 ~]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:36:53Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

    升级后:

    [root@k8s-node1 ~]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.15", GitCommit:"73dd5c840662bb066a146d0871216333181f4b64", GitTreeState:"clean", BuildDate:"2021-01-13T13:22:41Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}

    因为apiserver还没有升级,所以在Server Version中显示为1.16.0版本

    ②组件升级(生产环境可以一台一台的升级替换)

    #在所有master节点执行 (升级生产环境可以不停止keeplived)
    systemctl stop keepalived   #先停掉本机keepalived,切走高可用VIP地址
    systemctl stop kube-apiserver
    systemctl stop kube-scheduler
    systemctl stop kube-controller-manager

    备份:

    cd /app/kubernetes/bin
    mv kube-apiserver{,.bak_2021-03-02}
    mv kube-controller-manager{,.bak_2021-03-02}
    mv kube-scheduler{,.bak_2021-03-02}

    升级:

    cp kubernetes/server/bin/{kube-apiserver,kube-controller-manager,kube-scheduler} /app/kubernetes/bin/

    启动keepalived和apiserver:

    systemctl start keepalived
    systemctl start kube-apiserver

    查看启动日志是否有异常:

    journalctl -fu kube-apiserver

    查看:

    [root@k8s-node1 ~]# kubectl get cs
    NAME                 STATUS      MESSAGE                                                                                     ERROR
    scheduler            Unhealthy   Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused   
    controller-manager   Unhealthy   Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused   
    etcd-0               Healthy     {"health":"true"}                                                                           
    etcd-1               Healthy     {"health":"true"}                                                                           
    etcd-2               Healthy     {"health":"true"} 

    可以查看到etcd中的数据说明kube-apiserver没有问题

    [root@k8s-node1 ~]# kubectl version
    Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.15", GitCommit:"73dd5c840662bb066a146d0871216333181f4b64", GitTreeState:"clean", BuildDate:"2021-01-13T13:22:41Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
    Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.15", GitCommit:"73dd5c840662bb066a146d0871216333181f4b64", GitTreeState:"clean", BuildDate:"2021-01-13T13:14:05Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}

    查看客户端和服务端的版本都是v1.18.15,说明版本相同没有问题

    启动其他组件:

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

    查看启动状态,此时kubernetes集群已经恢复:

    [root@k8s-node1 ~]# kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    scheduler            Healthy   ok                  
    controller-manager   Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}   
    etcd-2               Healthy   {"health":"true"}   
    etcd-1               Healthy   {"health":"true"}

    2、node组件升级

    ①停止服务,并且备份二进制文件(所有node节点)

    systemctl stop kubelet
    systemctl stop kube-proxy

    备份:

    cd /app/kubernetes/bin
    mv kubelet{,.bak_2021-03-02}
    mv kube-proxy{,.bak_2021-03-02}

    升级:

    scp kubernetes/server/bin/{kubelet,kube-proxy} /app/kubernetes/bin/        #分发所有节点

    启动kubelet服务:

    systemctl daemon-reload && systemctl start kubelet

    查看kubelet日志,检查是否有报错

    journalctl -fu kubelet

    过几分钟查看节点是否正常:

    [root@k8s-node1 ~]# kubectl get nodes
    NAME        STATUS   ROLES    AGE    VERSION
    k8s-node1   Ready    <none>   336d   v1.18.15
    k8s-node2   Ready    <none>   336d   v1.18.15
    k8s-node3   Ready    <none>   336d   v1.18.15

    启动kube-proxy服务:

    systemctl start kube-proxy

     验证集群的状态:

    [root@k8s-node1 ~]# systemctl status kube-proxy|grep Active
       Active: active (running) since Tue 2021-03-02 17:31:32 CST; 33s ago
    [root@k8s-node1 ~]# kubectl cluster-info 
    Kubernetes master is running at http://localhost:8080
    CoreDNS is running at http://localhost:8080/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    
    [root@k8s-node1 ~]# kubectl get nodes
    NAME        STATUS   ROLES    AGE    VERSION
    k8s-node1   Ready    <none>   337d   v1.18.15
    k8s-node2   Ready    <none>   337d   v1.18.15
    k8s-node3   Ready    <none>   337d   v1.18.15

    四、创建应用测试

    1、测试yaml文件

    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox
      namespace: default
    spec:
      containers:
      - name: busybox
        image: busybox:1.28.3
        command:
          - sleep
          - "3600"
        imagePullPolicy: IfNotPresent
      restartPolicy: Always

    2、查看创新的Pod

    [root@k8s-node1 ~]# kubectl get pod
    NAME                                READY   STATUS      RESTARTS   AGE
    busybox                             1/1     Running     0          14s
    cronjob-demo-1614661200-mth6n       0/1     Completed   0          4h37m
    cronjob-demo-1614664800-2s9w5       0/1     Completed   0          3h37m
    cronjob-demo-1614668400-jt7ld       0/1     Completed   0          157m
    cronjob-demo-1614672000-8zx6j       0/1     Completed   0          82m
    cronjob-demo-1614675600-whjvf       0/1     Completed   0          37m
    job-demo-ss6mf                      0/1     Completed   0          12d
    kubia-deployment-7b5fb95f85-fzn4d   1/1     Running     0          33d
    static-web-k8s-node2                1/1     Running     0          64m
    tomcat1-79c47dc8f-75mr4             1/1     Running     3          41d
    tomcat2-8fd94cc4-z9mmq              1/1     Running     4          41d
    tomcat3-6488575ff7-csmsh            1/1     Running     4          41d

    3、测试coredns功能是否正常

    [root@k8s-node1 ~]# kubectl exec -it busybox -- nslookup kubernetes
    Server:    10.0.0.2
    Address 1: 10.0.0.2 kube-dns.kube-system.svc.cluster.local
    
    Name:      kubernetes
    Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local

    至此k8s二进制版本升级完毕

    成功最有效的方法就是向有经验的人学习!
  • 相关阅读:
    驼峰命名法
    Java中有关Null的9件事
    java开发中JDBC连接数据库代码和步骤
    TestNG 与 Junit的比较
    洛谷 P1880 [NOI1995]石子合并(区间dp,断环为链)
    洛谷 P1901 发射站(单调栈)
    洛谷 P2947 [USACO09MAR]向右看齐Look Up(单调栈)
    洛谷 P2629 好消息,坏消息(前缀和,单调队列,断环为链)
    洛谷 P3810 【模板】三维偏序(陌上花开)(CDQ分治)
    洛谷 CF429D Tricky Function(平面最近点对,分治)
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/14469563.html
Copyright © 2011-2022 走看看