精华内容
下载资源
问答
  • 用来搭建k8s高可用集群,haproxy,keepalived,k8s高可用集群搭建过程
  • 说明:二进制部署k8s高可用集群,内容真实有效!
  • Kubernetes作为近几年最具颠覆性的容器编排技术,广泛应用与企业的生产环境中,相较于前几年的docker-swarm的编排方式...在基于前面搭建的k8s集群,如下k8s-master1192.168.175.128k8s-master2192.168.175.148(新增)k
  • 从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进 制包部署Kubernetes集群,虽然手动部署麻烦点...
  • 从0安装kubernetes高可用集群,二进制安装,生产环境可用部署,V1.20.2版本。
  • 本脚本的作用主要是用于简化k8s高可用集群部署与安装,具体可查看我的博客:https://blog.csdn.net/weixin_42804324/article/details/109284646
  • 安装二进制的文档资料,包括基础组件和kuboard
  • k8s
  • k8s 高可用集群

    2018-05-03 11:40:38
    k8s-1.8.6高可用集群安装手册 基于1.8.6版本,涉及镜像请自行下载
  • 本页面介绍了配置高可用(HA) Kubernetes 集群拓扑的两个选项。 您可以设置 HA 集群: 使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存 使用外部 etcd 节点,其中 etcd 在与控制平面不同的...

    本页面介绍了配置高可用(HA) Kubernetes 集群拓扑的两个选项。

    您可以设置 HA 集群:

    • 使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存
    • 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

    在设置 HA 集群之前,您应该仔细考虑每种拓扑的优缺点。

    说明: kubeadm 静态引导 etcd 集群。 阅读 etcd 集群指南以获得更多详细信息。

    堆叠(Stacked) etcd 拓扑

    堆叠(Stacked) HA 集群是一种这样的拓扑,其中 etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。

    每个控制平面节点运行 kube-apiserverkube-scheduler 和 kube-controller-manager 实例。

    kube-apiserver 使用负载均衡器暴露给工作节点。

    每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 kube-apiserver 通信。这同样适用于本地 kube-controller-manager 和 kube-scheduler 实例。

    这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群,设置起来更简单,而且更易于副本管理。

    然而,堆叠集群存在耦合失败的风险。如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失,并且冗余会受到影响。您可以通过添加更多控制平面节点来降低此风险。

    因此,您应该为 HA 集群运行至少三个堆叠的控制平面节点。

    这是 kubeadm 中的默认拓扑。当使用 kubeadm init 和 kubeadm join --control-plane 时,在控制平面节点上会自动创建本地 etcd 成员。

     

    外部 etcd 拓扑

    具有外部 etcd 的 HA 集群是一种这样的拓扑,其中 etcd 分布式数据存储集群在独立于控制平面节点的其他节点上运行。

    就像堆叠的 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点都运行 kube-apiserverkube-scheduler 和 kube-controller-manager 实例。同样, kube-apiserver 使用负载均衡器暴露给工作节点。但是,etcd 成员在不同的主机上运行,​​每个 etcd 主机与每个控制平面节点的 kube-apiserver 通信。

    这种拓扑结构解耦了控制平面和 etcd 成员。因此,它提供了一种 HA 设置,其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。

    但是,此拓扑需要两倍于堆叠 HA 拓扑的主机数量。

    具有此拓扑的 HA 集群至少需要三个用于控制平面节点的主机和三个用于 etcd 节点的主机。

     

     

    官方地址:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/high-availability/

    展开全文
  • k8s高可用集群部署教程

    千次阅读 2021-08-13 09:18:16
    Kubernetes高可用原理: Kubernetes的高可用主要指的是控制平面的高可用,简单说,就是有多套Master节点组件和Etcd组件,kube-apiserver使用负载平衡器暴露给工作节点,工作节点通过负载均衡连接到各Master。 HA有两...

    Kubernetes高可用原理:

    Kubernetes的高可用主要指的是控制平面的高可用,简单说,就是有多套Master节点组件和Etcd组件,kube-apiserver使用负载平衡器暴露给工作节点,工作节点通过负载均衡连接到各Master。

    HA有两种做法:

    方法一:使用堆叠(stacked)控制平面节点,集群master节点与etcd节点共存,etcd也运行在控制节点,混布在一起;
    混部

    方法二:使用外部独立的etcd集群节点,etcd不与Master节点混布;
    单独部署

    两种方式的相同之处在于都提供了控制平面的冗余,实现了集群高可以用,区别在于:

    1. Etcd混布方式:所需机器资源少部署简单,利于管理容易进行横向扩展风险大,一台宿主机挂了,master和etcd就都少了一套,集群冗余度受到的影响比较大。
    2. Etcd独立部署方式:所需机器资源多(按照Etcd集群的奇数原则,这种拓扑的集群关控制平面最少就要6台宿主机了)。部署相对复杂,要独立管理etcd集群和和master集群。解耦了控制平面和Etcd,集群风险小,健壮性强,单独挂了一台master或etcd对集群的影响很小。

    环境规划(本次采用etcd和master混部)

    本次配置主机硬件配置: CPU: 4C;内存:32G;Linux内核:5.4.140-1.el7.elrepo ;docker版本:docker-ce-18.06.3.ce-3.el7

    主机名角色划分IP地址安装组件
    node-01k8s-master1192.168.1.11kubelet kube-apiserver kube-controller-manager kube-scheduler etcd docker
    node-02k8s-master2192.168.1.12kubelet kube-apiserver kube-controller-manager kube-scheduler etcd docker
    node-03k8s-master3192.168.1.13kubelet kube-apiserver kube-controller-manager kube-scheduler etcd docker
    node-04k8s-node1192.168.1.14kubelet kube-proxy docker
    node-05k8s-node2192.168.1.15kubelet kube-proxy docker
    node-06k8s-node3192.168.1.16kubelet kube-proxy docker
    node-7LB(主)192.168.1.17(VIP:192.168.1.10)haproxy keepalived
    node-08LB(备)192.168.1.18(VIP:192.168.1.10)haproxy keepalived

    准备工作

    1.升级内核(所有主机)

    # 查看本机内核
    [root@node-01 ~]#  uname -r 
    3.10.0-1127.el7.x86_64
    # 安装elrepo
    [root@node-01 ~]#  yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
    [root@node-01 ~]# yum clean all && yum makecache
    # 查看可用kernel版本
    [root@node-01 ~]#  yum list available --disablerepo=* --enablerepo=elrepo-kernel
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * elrepo-kernel: mirrors.neusoft.edu.cn
    可安装的软件包
    kernel-lt.x86_64                                                      5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-devel.x86_64                                                5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-doc.noarch                                                  5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-headers.x86_64                                              5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-tools.x86_64                                                5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-tools-libs.x86_64                                           5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-lt-tools-libs-devel.x86_64                                     5.4.140-1.el7.elrepo                                     elrepo-kernel
    kernel-ml.x86_64                                                      5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-devel.x86_64                                                5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-doc.noarch                                                  5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-headers.x86_64                                              5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-tools.x86_64                                                5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-tools-libs.x86_64                                           5.13.10-1.el7.elrepo                                     elrepo-kernel
    kernel-ml-tools-libs-devel.x86_64                                     5.13.10-1.el7.elrepo                                     elrepo-kernel
    perf.x86_64                                                           5.13.10-1.el7.elrepo                                     elrepo-kernel
    python-perf.x86_64                                                    5.13.10-1.el7.elrepo
    [root@node-01 ~]#  yum install -y kernel-lt-5.4.140-1.el7.elrepo --enablerepo=elrepo-kernel 
    # 查看当前系统可用内核版本
    [root@node-01 ~]#   cat /boot/grub2/grub.cfg |grep CentOS
    menuentry 'CentOS Linux (5.4.140-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-3f303684-1cc1-4740-8282-31234550639f' {
    menuentry 'CentOS Linux (3.10.0-1127.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1127.el7.x86_64-advanced-3f303684-1cc1-4740-8282-31234550639f' {
    menuentry 'CentOS Linux (0-rescue-5ac013fff1d445d488fffabc1942b358) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-5ac013fff1d445d488fffabc1942b358-advanced-3f303684-1cc1-4740-8282-31234550639f' {
    
    #  设置从新内核开机启动
    [root@node-01 ~]#  grub2-set-default "CentOS Linux (5.4.140-1.el7.elrepo.x86_64) 7 (Core)" 
    #  验证设置是否生效
    [root@node-01 ~]#  grub2-editenv list 
    saved_entry=CentOS Linux (5.4.140-1.el7.elrepo.x86_64) 7 (Core)
    [root@node-01 ~]#  reboot
    [root@node-01 ~]#  uname -r
    5.4.140-1.el7.elrepo.x86_64
    
    #  卸载掉旧版本内核(此步可省)
    [root@node-01 ~]#  rpm -qa |grep kernel
    [root@node-01 ~]#  yum remove kernel-3.10.0-1127.el7.x86_64
    

    2.设置主机名(所有主机)

    [root@node-01 ~]# hostnamectl set-hostname node-01
    ......
    

    3.配置hosts(所有主机)

    [root@node-01 ~]#   cat  /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.168.1.11  node-01
    192.168.1.12  node-02
    192.168.1.13  node-03
    192.168.1.14  node-04
    192.168.1.15  node-05
    192.168.1.16  node-06
    192.168.1.17  node-07
    192.168.1.18  node-08
    

    4.配置master节点互信,master到node节点免密登录(此步只在三个master节点操作)

    [root@node-01 ~]#   ssh-keygen -t rsa
    [root@node-01 ~]#   ssh-copy-id root@node-xx
    

    5.安装依赖包(所有节点)

    [root@node-01 ~]#  yum install -y chrony conntrack ipvsadm ipset jq htop net-tools nc iptables \
       curl sysstat libseccomp wget socat git yum-utils device-mapper-persistent-data lvm2
    

    6.关闭防火墙(所有节点)

    [root@node-01 ~]#  systemctl stop firewalld && systemctl disable firewalld
    

    7.关闭SELinux(所有节点)

    [root@node-01 ~]#  setenforce 0
    [root@node-01 ~]#  sed -i 's/^SELINUX=.*/SELINUX=disabled/'  /etc/selinux/config
    

    8.关闭swap分区(所有节点)

    [root@node-01 ~]#  swapoff -a
    [root@node-01 ~]#  sed -i '/ swap/ s/^\(.*\)$/#\1/g' /etc/fstab
    

    9.优化内核参数

    [root@node-01 ~]#  cat > kubernetes.conf <<EOF
       net.bridge.bridge-nf-call-iptables=1
       net.bridge.bridge-nf-call-ip6tables=1
       net.ipv4.ip_forward=1     #ipvs转发功能
       net.ipv4.tcp_tw_recycle=0
       net.ipv4.neigh.default.gc_thresh1=1024
       net.ipv4.neigh.default.gc_thresh2=2048
       net.ipv4.neigh.default.gc_thresh3=4096
       vm.swappiness=0
       vm.overcommit_memory=1
       vm.panic_on_oom=0
       fs.inotify.max_user_instances=8192
       fs.inotify.max_user_watches=1048576
       fs.file-max=52706963
       fs.nr_open=52706963
       net.ipv6.conf.all.disable_ipv6=1
       net.netfilter.nf_conntrack_max=2310720
    EOF
    [root@node-01 ~]#  cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
    [root@node-01 ~]#  sysctl -p /etc/sysctl.d/kubernetes.conf
    

    10.开启ipvs支持

    [root@node-01 ~]#  cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    [root@node-01 ~]#  chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
    

    11.设置时区,设置系统时间同步

    参考我的博文:Linux集群时间同步

    12.两台LB节点安装haproxy和keepalived服务

    [root@node-07 ~]#  yum -y install haproxy keepalived #LB两台都需要
    

    修改LB(主节点) keepalived配置文件

    [root@node-07 ~]#   cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_DEVEL
    
    # 添加如下内容
       script_user root
       enable_script_security
    }
    
    vrrp_script check_haproxy {
        script "/etc/keepalived/check_haproxy.sh"         # 检测脚本路径
        interval 3
        weight -2 
        fall 10
        rise 2
    }
    
    vrrp_instance VI_1 {
        state MASTER            # MASTER,指定为主节点
        interface eth0         # 本机网卡名
        virtual_router_id 51
        priority 100             # 权重100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.10      # 虚拟IP
        }
        track_script {
            check_haproxy       # 模块
        }
    }
    

    修改LB(备节点) keepalived配置文件

    [root@node-08 ~]#   cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_DEVEL
    
    # 添加如下内容
       script_user root
       enable_script_security
    }
    
    vrrp_script check_haproxy {
        script "/etc/keepalived/check_haproxy.sh"         # 检测脚本路径
        interval 3
        weight -2 
        fall 10
        rise 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP            # BACKUP
        interface eth0         # 本机网卡名
        virtual_router_id 51
        priority 90             # 权重90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.10      # 虚拟IP
        }
        track_script {
            check_haproxy       # 模块
        }
    }
    

    修改haproxy的配置,两台LB节点haproxy配置都一样

    [root@node-07 ~]#   cat /etc/haproxy/haproxy.cfg # LB两台均需要
    #---------------------------------------------------------------------
    # Example configuration for a possible web application.  See the
    # full configuration options online.
    #
    #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
    #
    #---------------------------------------------------------------------
    
    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        # to have these messages end up in /var/log/haproxy.log you will
        # need to:
        #
        # 1) configure syslog to accept network log events.  This is done
        #    by adding the '-r' option to the SYSLOGD_OPTIONS in
        #    /etc/sysconfig/syslog
        #
        # 2) configure local2 events to go to the /var/log/haproxy.log
        #   file. A line like the following can be added to
        #   /etc/sysconfig/syslog
        #
        #    local2.*                       /var/log/haproxy.log
        #
        log         127.0.0.1 local2
    
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        haproxy
        group       haproxy
        daemon
    
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    frontend  kubernetes-apiserver
        mode                        tcp
        bind                        *:6443
        option                      tcplog
        default_backend             kubernetes-apiserver
    
    #---------------------------------------------------------------------
    # static backend for serving up images, stylesheets and such
    #---------------------------------------------------------------------
    listen stats
        bind            *:1080
        stats auth      admin:awesomePassword
        stats refresh   5s
        stats realm     HAProxy\ Statistics
        stats uri       /admin?stats
    #---------------------------------------------------------------------
    # round robin balancing between the various backends
    #---------------------------------------------------------------------
    backend kubernetes-apiserver
        mode        tcp
        balance     roundrobin
        server  node-01 192.168.1.11:6443 check
        server  node-02 192.168.1.12:6443 check
        server  node-03 192.168.1.13:6443 check
    	
    

    两台LB节点编写健康监测脚本

    [root@node-07 ~]#  cat /etc/keepalived/check_haproxy.sh   # LB两台均需要
    #!/bin/sh
    # HAPROXY down
    A=`ps -C haproxy --no-header | wc -l`
    if [ $A -eq 0 ]
    then
      systmectl start haproxy
      if [ ps -C haproxy --no-header | wc -l -eq 0 ]
      then
        killall -9 haproxy
        echo "HAPROXY down" | mail -s "haproxy"
        sleep 3600
      fi 
    fi
    [root@node-07 ~]#   chmod +x /etc/keepalived/check_haproxy.sh
    
    

    启动keepalived和haproxy ( LB两台均需要)

    [root@node-07 ~]#  systemctl start keepalived && systemctl enable keepalived
    [root@node-07 ~]#  systemctl start haproxy && systemctl enable haproxy
    
    

    14. 安装指定版本docker(所有节点)

    参考我的博文centos7安装docker

    15.配置docker(所有节点)

    修改docker默认驱动,将默认cgroups修改为systemd,和kubeadm统一

    [root@node-01 ~]#  vim /etc/docker/daemon.json   
    "exec-opts": ["native.cgroupdriver=systemd"]
    [root@node-01 ~]#  systemctl daemon-reload && systemctl restart docker
    

    16.安装kubernetes

    配置kubernetes的yum源,所有节点

    [root@node-01 ~]#   cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    [root@node-01 ~]#  yum clean all && yum makecache
    [root@node-01 ~]#  yum install -y  kubelet-1.18.8-0 kubeadm-1.18.8-0 kubectl-1.18.8-0
    

    获取集群初始化文件 (node-01节点执行)

    [root@node-01 ~]#   kubeadm config print init-defaults > kubeadm-config.yaml
    

    修改集群初始化配置文件

    [root@node-01 ~]#   vim kubeadm-config.yaml
    apiVersion: kubeadm.k8s.io/v1beta2
    bootstrapTokens:
    - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
    kind: InitConfiguration
    localAPIEndpoint:
      advertiseAddress: 192.168.1.11   #本机IP
      bindPort: 6443
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      name: node-01           #本机主机名
      taints:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
    ---
    apiServer:
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta2
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controlPlaneEndpoint: "192.168.1.10:6443"   #虚拟IP和haproxy端口
    controllerManager: {}
    dns:
      type: CoreDNS
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: registry.aliyuncs.com/google_containers       #镜像仓库源要根据自己实际情况修改成阿里
    kind: ClusterConfiguration
    kubernetesVersion: v1.18.8                 #k8s版本
    networking:
      dnsDomain: cluster.local
      podSubnet: "10.244.0.0/16"   #指定pod网段
      serviceSubnet: 10.96.0.0/12  #指定service的网段
    scheduler: {}
    
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    featureGates:
      SupportIPVSProxyMode: true
    mode: ipvs
    

    提前下载相关镜像 node-01利用初始化配置文件可以这样下载

    [root@node-01 ~]#  kubeadm config images pull --config kubeadm-config.yaml
    

    node-02,node-03节点没有初始化配置文件,按如下办法下载

    [root@node-02 ~]#  kubeadm config images list --kubernetes-version=v1.18.8
    [root@node-02 ~]#  for  image in kube-proxy:v1.18.8 kube-apiserver:v1.18.8 kube-controller-manager:v1.18.8 kube-scheduler:v1.18.8  pause:3.2  coredns:1.6.7  etcd:3.4.3-0 ;do docker pull registry.aliyuncs.com/google_containers/$image ;done
    

    node-01初始化集群

    [root@node-01 ~]#  kubeadm init --config kubeadm-config.yaml  --upload-certs
    

    kubectl 命令的自动补全功能

    [root@node-01 ~]#   yum install -y bash-completion
    [root@node-01 ~]#   source /usr/share/bash-completion/bash_completion
    [root@node-01 ~]#   source <(kubectl completion bash)
    [root@node-01 ~]#   echo "source <(kubectl completion bash)" >> ~/.bashrc
    [root@node-01 ~]#   exit  #退出重新登录
    

    利用提示信息,添加剩下的两个master节点和三个node节点

    [root@node-02 ~]#  kubeadm join 192.168.1.10:6443 --token....
    [root@node-04 ~]# kubeadm join 192.168.1.10:6443 --token ....
    

    17.部署CNI

    查看节点状态

    [root@node-01 ~]#  kubectl get nodes
    NAME      STATUS   ROLES    AGE   VERSION
    AME      STATUS     ROLES    AGE     VERSION
    node-01   NotReady   master   5m22s   v1.18.8
    node-02   NotReady   master   4m20s   v1.18.8
    node-03   NotReady   master   3m39s   v1.18.8
    node-04   NotReady   <none>   2m57s   v1.18.8
    node-05   NotReady   <none>   2m24s   v1.18.8
    node-06   NotReady   <none>   2m3s    v1.18.8
    

    部署网络插件flannel

    [root@node-01 ~]#  kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    

    再次查看节点状态

    [root@node-01 ~]#  kubectl get nodes
    NAME      STATUS   ROLES    AGE   VERSION
    node-01   Ready    master   18m   v1.18.8
    node-02   Ready    master   17m   v1.18.8
    node-03   Ready    master   16m   v1.18.8
    node-04   Ready    <none>   16m   v1.18.8
    node-05   Ready    <none>   15m   v1.18.8
    node-06   Ready    <none>   15m   v1.18.8
    

    查看pod

    [root@node-01 ~]#  kubectl get pods -n kube-system
    NAME                              READY   STATUS    RESTARTS   AGE   IP             NODE      NOMINATED NODE   READINESS GATES
    coredns-7ff77c879f-fv89l          1/1     Running   0          36m   10.244.0.2     node-01   <none>           <none>
    coredns-7ff77c879f-tj9cm          1/1     Running   0          36m   10.244.3.2     node-04   <none>           <none>
    etcd-node-01                      1/1     Running   0          36m   192.168.1.11   node-01   <none>           <none>
    etcd-node-02                      1/1     Running   0          34m   192.168.1.12   node-02   <none>           <none>
    etcd-node-03                      1/1     Running   0          33m   192.168.1.13   node-03   <none>           <none>
    kube-apiserver-node-01            1/1     Running   0          36m   192.168.1.11   node-01   <none>           <none>
    kube-apiserver-node-02            1/1     Running   0          34m   192.168.1.12   node-02   <none>           <none>
    kube-apiserver-node-03            1/1     Running   0          33m   192.168.1.13   node-03   <none>           <none>
    kube-controller-manager-node-01   1/1     Running   0          36m   192.168.1.11   node-01   <none>           <none>
    kube-controller-manager-node-02   1/1     Running   0          34m   192.168.1.12   node-02   <none>           <none>
    kube-controller-manager-node-03   1/1     Running   0          34m   192.168.1.13   node-03   <none>           <none>
    kube-flannel-ds-2qrqg             1/1     Running   0          20m   192.168.1.13   node-03   <none>           <none>
    kube-flannel-ds-jcn4x             1/1     Running   0          20m   192.168.1.16   node-06   <none>           <none>
    kube-flannel-ds-lkhlx             1/1     Running   0          20m   192.168.1.14   node-04   <none>           <none>
    kube-flannel-ds-mfttn             1/1     Running   0          20m   192.168.1.15   node-05   <none>           <none>
    kube-flannel-ds-nv9qc             1/1     Running   0          20m   192.168.1.12   node-02   <none>           <none>
    kube-flannel-ds-tkbxh             1/1     Running   0          20m   192.168.1.11   node-01   <none>           <none>
    kube-proxy-6zxxj                  1/1     Running   1          33m   192.168.1.16   node-06   <none>           <none>
    kube-proxy-fdbm5                  1/1     Running   0          36m   192.168.1.11   node-01   <none>           <none>
    kube-proxy-m2vcn                  1/1     Running   1          35m   192.168.1.13   node-03   <none>           <none>
    kube-proxy-mppwh                  1/1     Running   1          33m   192.168.1.15   node-05   <none>           <none>
    kube-proxy-qzrrv                  1/1     Running   1          34m   192.168.1.14   node-04   <none>           <none>
    kube-proxy-r4v6j                  1/1     Running   1          35m   192.168.1.12   node-02   <none>           <none>
    kube-scheduler-node-01            1/1     Running   0          36m   192.168.1.11   node-01   <none>           <none>
    kube-scheduler-node-02            1/1     Running   0          34m   192.168.1.12   node-02   <none>           <none>
    kube-scheduler-node-03            1/1     Running   0          34m   192.168.1.13   node-03   <none>           <none>
    

    18.部署dashboard

    下载官方推荐配置文件,本文安装2.2.0版本

     [root@node-01 ~]#  wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml 
    

    修改配置文件service为 NodePort ,指定主机端口30080

    [root@node-01 ~]#  cat recommended.yaml 
    .......
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      type: NodePort          #修改类型
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 30080     #添加端口 
      selector:
        k8s-app: kubernetes-dashboard
     ......   
    [root@node-01 ~]#  kubectl apply -f recommended.yaml
    

    创建admin-token用户

    [root@node-01 ~]#  cat dashboard-adminuser.yaml 
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    
    [root@node-01 ~]#  kubectl apply -f dashboard-adminuser.yaml
    

    获取token

    [root@node-01 ~]#  kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
    

    登录:https://NodeIP:30080

    展开全文
  • k8s可用集群haproxy+k8s1、高可用集群简述2、...本项目将通过haproxy配置三台 master主机实现负载均衡,通过k8s三台master主机实现k8s集群高可用。 流程图如下 准备五台虚拟机,分工如下 server1(172.25.11.1)

    1、高可用集群简述

    在前面k8s学习中,我们只使用一个master节点进行调度,当此节点dowm掉后k8s将无法进行后续的部署管理工作。本项目将通过haproxy配置三台 master主机实现负载均衡,通过k8s三台master主机实现k8s集群高可用。
    流程图如下
    在这里插入图片描述
    准备五台虚拟机,分工如下

    • server1(172.25.11.1)是harbor仓库,分1G内存
    • server5(172.25.11.5)server6(172.25.11.6)server7(172.25.11.7)是集群的master端,各分2G内存
    • server5(172.25.11.5)还是haproxy负载均衡
    • server8(172.25.11.8)是集群的worker端,分1G内存
    • 宿主机(172.25.11.250)网页测试

    因为电脑只有8G内存,按照上面的分发已满8G ,宿主机一点没有了,会卡死。所以我们先起仓库和三个master,成功启动后,把server6和server7的内存降为1G,再创建server8进行测试

    2、haproxy负载均衡部署

    首先给server5添加虚拟ip172.25.11.100,用来haproxy使用,因为server5即有haproxy也有集群master,这样可以隔离。查看,ping测试可以成功连通
    在这里插入图片描述
    server5配置了yum源,
    在这里插入图片描述

    server5安装haproxy
    在这里插入图片描述
    进入haproxy的配置文件
    在这里插入图片描述

    首先添加一个监测haproxy状态的模块,使用80端口。因为server5有haproxy也是k8s集群的master,所以端口要区分,这里haproxy用8443端口,模式为tcp。
    真正的后端是server5、server6、server7,rr论叫负载均衡,三个集群的master使用6443端口,模式为tcp。
    在这里插入图片描述
    重启haproxy,查看端口,80端口监测haproxy状态,8443端口为haproxy传输端口
    在这里插入图片描述
    现在网页访问虚拟ip172.25.11.100/status或者server5的ip172.25.11.5/status都可以查看haproxy的状态
    在这里插入图片描述

    3、docker部署

    因为有三个集群的master,所以下面的所有操作,三个master都需要做。
    提前在真机准备好docker-ce的安装包,放到了apche发布目录。只需在server5上编写yum文件,安装docker-ce
    在这里插入图片描述
    server6同样安装docker-ce
    在这里插入图片描述
    server7同样安装docker-ce
    在这里插入图片描述
    server5设置开机自启dcoker,进入docker目录,编写json文件,指定仓库地址,并修改cgroup的方式为systemed
    在这里插入图片描述
    server5发送json文件给server6,server6设置开机自启dcoker
    在这里插入图片描述
    server5发送json文件给server7,server7设置开机自启dcoker
    在这里插入图片描述
    server5设定桥接模式而不用NAT,重新加载内核参数
    在这里插入图片描述
    server6设定桥接模式而不用NAT,重新加载内核参数
    在这里插入图片描述
    server7设定桥接模式而不用NAT,重新加载内核参数
    在这里插入图片描述
    server5重启docker,查看信息,cgroup改为了systemd,并且没有警告出现
    在这里插入图片描述
    server6重启docker,查看信息,cgroup改为了systemd,并且没有警告出现
    在这里插入图片描述
    server7重启docker,查看信息,cgroup改为了systemd,并且没有警告出现
    在这里插入图片描述
    给三个master发以前产生的证书文件
    在这里插入图片描述
    并且三个master都要设置地址解析/etc/hosts,尤其要添加仓库的地址解析
    在这里插入图片描述
    测试docker是否安装成功,拉取镜像,成功
    在这里插入图片描述

    4、k8s集群部署

    在部署了docker的基础上,还需要部署管理集群的工具,kubernetes
    部署k8s时,三个master需要有2个CPU,2G内存
    server5关闭swap分区
    在这里插入图片描述
    server6关闭swap分区
    在这里插入图片描述
    server7关闭swap分区
    在这里插入图片描述
    提前准备了k8s的安装包,发给server5、server6、server7
    在这里插入图片描述
    server5安装k8s(kubeadm,kubelet,kubectl)
    在这里插入图片描述
    server6安装k8s(kubeadm,kubelet,kubectl)
    在这里插入图片描述
    server7安装k8s(kubeadm,kubelet,kubectl)
    在这里插入图片描述
    server5开启kubelet并设置开机自启
    在这里插入图片描述
    server6开启kubelet并设置开机自启
    在这里插入图片描述
    server7开启kubelet并设置开机自启
    在这里插入图片描述
    server5打开IPVS模块
    在这里插入图片描述
    server6打开IPVS模块
    在这里插入图片描述
    server7打开IPVS模块
    在这里插入图片描述
    server5输出kubeadm初始化文件,修改kubeadm-init.yaml文件
    在这里插入图片描述
    设定本机ip和名称,设定集群调用的api端口为6443。设定访问集群的虚拟ip为172.25.11.100:8443,和前面的haproxy处一致
    在这里插入图片描述
    添加仓库地址,指定k8s版本为1.21.3,pod的网段为10.244,svc的网段为10.96,kube_proxy使用IPVS模式。
    在这里插入图片描述
    server5提前拉取所需镜像
    在这里插入图片描述
    server5初始化k8s集群
    在这里插入图片描述
    初始化成功会显示申明命令、加入master的命令和加入worker的命令,保存下来
    在这里插入图片描述
    根据提示信息,申明查看节点现在只有server5,查看pod,发现有两个没有ready,这是因为没有安装网络插件
    在这里插入图片描述
    由于没有补齐,操作不舒服,先输入补齐命令,重新加载~/.bashrc,现在有补齐了
    在这里插入图片描述
    给server5发送安装flannel网络组件的文件
    在这里插入图片描述
    编辑kube-flannel.yaml文件,修改网络类型为host-gw直连网关
    在这里插入图片描述
    应用kube-flannel.yaml文件,再次查看pod全部正常启动了
    在这里插入图片描述
    查看节点,server5准备就绪了
    在这里插入图片描述

    server6使用之前初始化提示的命令,以master身份加入集群
    在这里插入图片描述
    server7也使用之前初始化提示的命令,以master身份加入集群
    在这里插入图片描述
    server5查看节点,成功加入,且就绪了
    在这里插入图片描述

    现在网页查看haproxy的三个节点,成功开启
    在这里插入图片描述

    5、k8s集群添加worker节点

    由于内存限制,把server6和server7的内存调整为1G,开启新的虚拟机server8,给server8执行前面的操作。
    把docker的yum文件发给server8,把k8s的安装包给server8
    在这里插入图片描述
    server8安装docker-ce
    在这里插入图片描述
    开启docker,发给server8证书文件和json文件
    在这里插入图片描述
    同样server8需要地址解析
    在这里插入图片描述
    发送内核参数文件给server8
    在这里插入图片描述
    server8重新读取内核参数
    在这里插入图片描述
    重启docker,查看信息,cgroup改为systemd,且没有警告
    在这里插入图片描述
    安装k8s包
    在这里插入图片描述
    开机自启docker,关闭swap分区,开机自启kubelet,使用初始化产生的命令,以worker节点的身份加入集群
    在这里插入图片描述
    在server5处,查看节点,已成功加入集群
    在这里插入图片描述

    在master端创建一个pod,成功
    在这里插入图片描述

    查看到该pod实际在server8上,访问测试成功
    在这里插入图片描述

    6、高可用测试

    运行一个pod节点于当前master主机,当此master主机down掉后,节点仍然可在其他master主机上查看状况并进行操作管理。现在我们应该关闭其中一个master端,测试其他master能否正常接管,由于我这里server5有haproxy也是master,关掉他,看不到效果了,所以测试关掉server6。

    注意三个master k8s主机只容忍最多一个down掉,其余两个保持高可用。

    现在关闭server6这个master,测试pod是否能够正常运行,测试其他master端能否正常管理
    在这里插入图片描述

    pod正常运行
    在这里插入图片描述

    网页haproxy可以看到server6关闭了
    在这里插入图片描述
    也可以使用命令行查看server6关闭了
    在这里插入图片描述

    展开全文
  • 说明:使用kubeadm工具部署一套高可用k8s集群,内容真实有效!
  • kubernetes原理,高可用集群的安装,配置及管理,资源的管理
  • k8s高可用集群自动初始化脚本欢迎使用k8s高可用集群自动初始化脚本简介下载链接重要提醒节点说明文件说明使用说明 欢迎使用k8s高可用集群自动初始化脚本 本脚本只支持CentOS系统,具体版本未做测试,建议7.x,CentOS...

    欢迎使用k8s高可用集群自动初始化脚本

    本脚本只支持CentOS系统,具体版本未做测试,建议7.x,CentOS系统下本人初始化集群测试次数达30次以上!ubuntu系统可替换yum命令为apt-get,尝试运行,ubuntu系统未做测试!

    简介

    本脚本的作用主要是用于简化k8s的高可用集群部署与安装,使用前需配置好所有服务器的ip地址,保证在同一网段,虽然使用kubeadm已经很大程度简化安装流程,但需要执行的初始化和安装命令仍然很多,所以本人制作这个脚本来为大家提供方便,进一步简化k8s集群安装部署,根据服务器配置不同和网络情况不同,整个脚本安装时间不定,参考安装时间:master-VIP节点5分钟,master节点4分钟,worker节点3分钟。使用前请先根据实际情况修改配置文件!!!使用前请先根据实际情况修改配置文件!!!使用前请先根据实际情况修改配置文件!!!

    下载链接

    CSDN:https://download.csdn.net/download/weixin_42804324/13053108

    重要提醒

    重要提示:中途除报错情况意外退出程序后,因为有些命令不可逆,所以重新运行程序不保证脚本可以正确进行,如遇意外退出建议恢复服务器后重新运行本脚本!

    节点说明

    根据本人习惯将k8s高可用服务器所有节点分为3类:
    master-VIP节点:具有虚拟IP的管理节点,也是第一个执行本程序的节点
    master节点:除master-VIP以外的所有管理节点
    worker节点:工作节点

    文件说明

    本脚本就一个压缩包initk8s.tar.gz,解压后生成initk8s文件夹,文件树如下
    initk8s.tar.gz解压并完成整个集群部署后master-VIP节点目录文件说明:

    initk8s
    ├── haproxy.cfg:haproxy配置文件,需要修改
    ├── hosts:集群节点信息,需要全部删除根据自身集群编写,内容为所有节点的IP地址与名称,样例如压缩包中自带的hosts
    ├── initk8s-master-VIP.sh:初始化master-VIP节点的脚本
    ├── keepalived.conf:keepalived配置文件,需要修改
    ├── kubeadm-config.yaml:kubeadm配置文件,需要修改
    ├── kube-flannel.yml:flannel网络配置文件,不需要修改,且可以删除后运行,以重新获取配置文件
    ├── master.tar.gz:第一次解压后不存在,执行initk8s-master-VIP.sh后自动生成,用于初始化master节点
    ├── pro:存放其他节点初始化程序
    │ ├── initk8s-master.sh:初始化master节点的脚本
    │ └── initk8s-worker.sh:初始化worker节点的脚本
    ├── token:第一次解压后不存在,执行initk8s-master-VIP.sh后自动生成,存放加入集群的命令,不可自行修改,有效期24小时
    └── worker.tar.gz:第一次解压后不存在,执行initk8s-master-VIP.sh后自动生成,用于初始化worker节点
    共1个文件夹, 11个文件

    master.tar.gz解压并完成整个集群部署后master节点目录文件树,3个临时文件夹运行完成后自动删除(作用内容参照initk8s文件树)

    initk8s-master/
    ├── haproxy.cfg
    ├── hosts
    ├── initk8s-master.sh
    ├── keepalived.conf
    └── token
    共0个文件夹, 5个文件

    worker.tar.gz解压并完成整个集群部署后worker节点目录文件树(作用内容参照initk8s文件树)

    initk8s-worker/
    ├── hosts
    ├── initk8s-worker.sh
    └── token
    共0个文件夹, 3个文件

    使用说明

    使用说明:(所有操作请在root用户下执行)
    1、解压initk8s.tar.gz,修改上述文件树中描述需要修改的配置文件,需要修改的地方均有中文注释,修改完成后请删除中文注释,防止影响脚本正常运行。注意:未标注需要修改的地方请尽量不要修改,避免安装过程带来不必要的麻烦。
    2、直接运行initk8s-master-VIP.sh,输入节点名称,IP地址,耐心等待即可。
    3、根据基本完成提示开始部署其他节点,复制并解压master.tar.gz文件到其他管理节点,执行initk8s-master.sh,输入节点名称,耐心等待即可。
    4、复制并解压worker.tar.gz文件到工作节点,执行initk8s-worker.sh,输入节点名称,耐心等待即可。
    5、等所有master节点,worker节点全部执行成功后,回到master-VIP节点,输入y,完成剩余程序。
    剩余程序就是删除现有flannel网络配置,重新安装flannel网络。(因为有新的节点加入)
    6、master-VIP程序执行完成后,查看所有节点和pod状态,全部正常后就可以开始部署程序了!

    展开全文
  • 本章节使用kubeadm搭建一套三主三从的高可用kubernetes集群。相比单master而言,多master更加有利于我们生产环境的稳定性。就算master节点宕机一台,我们依然有其他master节点保证我们的集群环境。多master节点需要...
  • k8s高可用集群.docx

    2021-07-08 13:54:35
    k8s高可用集群.docx
  • 然后我们来说搭建高可用集群,为什么要搭建高可用集群. 因为,首先我们说master节点是用来管理其他的node节点的, 如果master节点崩了怎么办? 那么好,整个集群就不能用了,所以对于master节点我们至少用部署2个 ...
  • alpine-keepalived.tar haproxy.tar kubernetes-dashboard-amd64.tar k8s-dns-dnsmasq-nanny-amd64.tar k8s-dns-kube-dns-amd64.tar k8s-dns-sidecar-amd64.tar registry.tar 搭建k8s高可用集群所需容器
  • 部署一套完整的K8s高可用集群v1.18.docx
  • https://github.com/opsnull/follow-me-install-kubernetes-cluster
  • Rancher 2.4.4-K8S高可用集群HA部署

    千次阅读 2020-06-14 14:34:09
    文章目录事先准备:一、安装kubernetes1、初始化环境1.1、关闭相关服务1.2、主机名设置1.3、内核调优1.4、创建用户并分发秘钥1.5、安装docker2、使用rke安装K8S集群(在第一台机器(rancher0)执行)2.1、安装rke/...
  • ansible-playbook部署K8S高可用集群

    千次阅读 2019-12-08 17:29:14
    通过ansible-playbook,以Kubeadm方式部署K8S高可用集群。 kubernetes安装目录: /etc/kubernetes/ KubeConfig: ~/.kube/config 主机说明: 系统 ip 角色 cpu 内存 hostname CentOS 7.7 192.168.30.128 ...
  • k8s高可用集群(二进制, v1.18版本)

    千次阅读 2020-10-16 16:23:21
    为了避免出错,先部署其中一台master,运行正常之后,再copy到其余master节点,待单节点master的集群全部运行正常之后,在进行master节点高可用配置 组件下载安装 https://github.com/kubernetes/kubernetes 下载...
  • k8s 高可用集群 -加入第二个master

    千次阅读 2020-12-04 11:50:07
    k8s 高可用集群 -加入第二个master 问题: [preflight] Running pre-flight checks [preflight] Reading configuration from the cluster... [preflight] FYI: You can look at this config file with 'kubectl -n ...
  • 目录一、k8s可用集群介绍1. 实验环境二、K8s高可用+负载均衡集群部署1. haproxy负载均衡部署2. Docker部署3. k8s集群部署4. k8s添加worker节点5. 集群高可用性能测试 一、k8s可用集群介绍 在前面k8s学习中,围绕...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,800
精华内容 10,320
关键字:

k8s高可用集群