• k8s 单master升级为多master集群 李刚


     由于之前单master集群在主节点发生故障时会导致集群整个不可用,生产环境中有很大风险所以要把集群升级为多master模式,其中任何一个节点宕机都不影响集群正常运行。

    集群环境:

          k8s版本:1.18.6

          主节点1个从节点2个

          主节点IP:192.168.192.133

          从节点IP:192.192.192.189、192.168.192.139

          新增主节点2个:192.168.192.181、192.168.192.198

    下面开始配置多master集群,这里采用nginx作为apiserver的高可用。

    第一步配置 /etc/hosts 每个节点都配置

    192.168.192.181  k8s-master2 
    192.168.192.198  k8s-master3
    192.168.192.133  k8smaster
    192.168.192.189  k8snod1
    192.168.192.139  k8snod2

    第二步更新k8s证书

    1,准备集群配置文件,如果忘记了可以用如下命令导出。

    kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
    

    2,现在我们需要把新增加的节点IP和nginx高可用域名加入到配置文件中加入后如下

    apiServer:
      certSANs:
      - yourapihostname
      - k8smaster
      - k8s-master2
      - k8s-master3
      - 192.168.192.133
      - 192.168.192.181
      - 192.168.192.198
      extraArgs:
        authorization-mode: Node,RBAC
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta2
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controlPlaneEndpoint: yourapihostname:8443
    controllerManager: {}
    dns:
      type: CoreDNS
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.aliyuncs.com/k8sxio
    kind: ClusterConfiguration
    kubernetesVersion: v1.18.6
    networking:
      dnsDomain: cluster.local
      podSubnet: 10.100.0.1/16
      serviceSubnet: 10.96.0.0/16
    scheduler: {}
    

    3,以防万一备份k8s配置

    cp -a /etc/kubernetes  /etc/kubernetes.bak
    

    4,移除现有证书

    mv /etc/kubernetes/pki/apiserver.{crt,key} ~
    

    5,直接用现有配置文件更新所有证书。

    kubeadm init phase certs apiserver --config kubeadm.yaml
    

    6,重启apiserver等相关容器

    docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart
    

    7,将最新的配置信息保存到集群

    kubeadm config upload from-file --config kubeadm.yaml
    

      

    第三步配置高可用负载均衡器,每个主节点都要配置:

    1,编辑配置文件

    vi /etc/kubernetes/nginx.conf

    配置如下

    error_log stderr notice;
     
    worker_processes 4;
    worker_rlimit_nofile 130048;
    worker_shutdown_timeout 10s;
     
    events {
      multi_accept on;
      use epoll;
      worker_connections 16384;
    }
     
    stream {
      upstream kube_apiserver {
        least_conn;
        server k8smaster:6443;
        server k8s-master2:6443;
        server k8s-master3:6443;
      }
     
      server {
        listen        8443;
        proxy_pass    kube_apiserver;
        proxy_timeout 10m;
        proxy_connect_timeout 1s;
      }
    }
     
    http {
      aio threads;
      aio_write on;
      tcp_nopush on;
      tcp_nodelay on;
     
      keepalive_timeout 5m;
      keepalive_requests 100;
      reset_timedout_connection on;
      server_tokens off;
      autoindex off;
     
      server {
        listen 8081;
        location /stub_status {
          stub_status on;
          access_log off;
        }
      }
    }
    

    2,启动docker

    docker run --restart=always     -v /etc/kubernetes/nginx.conf:/etc/nginx/nginx.conf     -v /etc/localtime:/etc/localtime:ro     --name k8snginx     --net host     -d     nginx
    

    3,将旧的apiserver地址换成新的apiserver地址

    sed -i "s/oldapiservername/newapiservername/g" `grep oldapiservername -rl /etc/kubernetes`

    修改默认配置文件中的apiserver地址

    vi ~/.kube/config 

    第四步更新控制面板:

    在配置文件中增加 controlPlaneEndpoint 属性指向api负载均衡域名

    上图已添加

    更新完后再用命令上传回集群保存

    kubeadm config upload from-file --config kubeadm.yaml

    第五步添加主节点(提前安装好docker k8s基本环境)

    1,在现有主节点操作把证书上传到集群

    kubeadm init phase upload-certs --upload-certs

    上面的命令会生成一个key下面会用到

    2,下面的命令会生成一个token和命令后面会用到

    kubeadm token create --print-join-command --config kubeadm.yaml
    

    3,根据上面操作的信息屏凑一个加入主节点的命令,在新加入的2个主节点执行

    kubeadm join api.k8s.local:8443 \
    --token f27w7m.adelvl3waw9kqdhp \
    --discovery-token-ca-cert-hash 第二步生成的token \
    --control-plane --certificate-key 第一步生成的key

    最后重启所有k8s相关组件,所有节点执行

    docker ps |grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F ' ' '{print $1}' |xargs docker restart
    

    过一会查看集群状态不出意外多master集群就升级完成了

    注意:
    1,修改k8s默认端口范围
    2,修改master /etc/kubenetes/admin.conf 下面的 api域名和端口
    3,同步 新的配置文件到 /root/.kube/config
    4,执行其他节点命令前拷贝 /usr/bin/kubeadm 到 其他节点 保证证书时间

    查看etcd集群状态

    docker run --rm -it \
    --net host \
    -v /etc/kubernetes:/etc/kubernetes registry.aliyuncs.com/k8sxio/etcd:3.4.3-0 etcdctl \
    --cert /etc/kubernetes/pki/etcd/peer.crt \
    --key /etc/kubernetes/pki/etcd/peer.key \
    --cacert /etc/kubernetes/pki/etcd/ca.crt \
    --endpoints https://192.168.192.198:2379 endpoint health --cluster
    
    docker run --rm -it \
    --net host \
    -v /etc/kubernetes:/etc/kubernetes registry.aliyuncs.com/k8sxio/etcd:3.4.3-0 etcdctl \
    --cert /etc/kubernetes/pki/etcd/peer.crt \
    --key /etc/kubernetes/pki/etcd/peer.key \
    --cacert /etc/kubernetes/pki/etcd/ca.crt \
    --endpoints https://192.168.192.198:2379 endpoint health --cluster
    

      

  • 相关阅读:
    Request Validation in ASP.NET
    ANSI、Unicode、Unicode big endian、UTF8编码
    在win7下安装SQL sever2005
    配置SQL Server 2005 以允许远程连接
    传统网站与Web标准——DIV+CSS布局实例
    打造自己的reset.css
    传统网站与Web标准——表格布局实例
    每天工作4小时的程序员
    良好的XHTML规则
    列表导航栏实例(02)——精美电子商务网站赏析
  • 原文地址:https://www.cnblogs.com/ligang0357/p/16206939.html
Copyright © 2020-2023  润新知