• kubeadm配置高可用etcd集群


    操作系统为ubuntu18
    kubernetes版本为v1.15.1

    k8s默认在控制平面节点上的kubelet管理的静态pod中运行单个成员的etcd集群,但这不是高可用的方案。
    etcd高可用集群至少需要三个成员组成。

    etcd默认端口为2379,2380,三个节点的这两个端口都要能通。
    可以在kubeadm配置文件更改默认端口。

    这个实验有五个服务器。
    我开的腾讯云香港服务器做的实验,网速很快,ssh稳定。
    百度云没测。
    阿里云测试不给力。
    推荐腾讯云
    k8s1: master1 
    k8s2: node1
    k8s3: haproxy
    k8s4: master2
    k8s5: master3

    1.首先在k8s master1上安装kubeadm,kubelet,kubectl,然后kubeadm init,最后kubectl get nodes,确认k8s1 master1准备就绪。
    k8s安装: ubuntu18安装kubernetes v1.15

    2.分别在k8s node1,k8s master2,k8s master3上安装kubeadm,kubectl,kubelet
    k8s安装: ubuntu18安装kubernetes v1.15

    3.在k8s master1上的kubeadm-init.out文件找到join worker node和 join control-plane node的命令。

    4.分别在k8s master2和k8s master3上执行join命令,注意,—control-plane
    kubeadm join k8s1:6443 --token 8vqitz.g1qyah1wpd3n723o
        --discovery-token-ca-cert-hash sha256:abd9a745b8561df603ccd58e162d7eb11b416feb4a7bbe1216a3aa114f4fecd9
        --control-plane --certificate-key 0e1e2844d565e657465f41707d8995b2d9d64246d5f2bf90f475b7782343254f

    5.在node1上执行join命令
    kubeadm join k8s1:6443 --token 8vqitz.g1qyah1wpd3n723o
        --discovery-token-ca-cert-hash sha256:abd9a745b8561df603ccd58e162d7eb11b416feb4a7bbe1216a3aa114f4fecd9

    6.现在master1 , master2, master3都可以执行kubectl管理k8s集群。
    kubectl get nodes
    显示有三个master,一个node.

    7.安装haproxy负载均衡
    apt-get update 
    apt-get install haproxy -y
    cd /etc/haproxy
    cp haproxy.conf haproxy.conf.bak
    在defaults下面
    log global
    mode tcp
    option tcplog
    frontend proxynode
        bind *:80
        stats uri /proxystats
        default_backend k8s-qq
    backend k8s-qq
        balance roundrobin
        server master1 172.19.0.12:6443 check
        server master2 172.19.0.8:6443 check
        server master3 172.19.0.4:6443 check
    systemctl restart haproxy
    systemctl enable haproxy

    8.查看haproxy
    https://k8s3.example.com/proxystats
    能看到三个后端服务器

    9.查看运行etcd的pod
    kubectl -n kube-system get pods | grep etcd
    这里我们能看到k8s1,k8s2,k8s3上分别运行etcd

    10.查看etcd的日志
    kubectl -n kube-system logs etcd-k8s1 
    kubectl -n kube-system logs etcd-k8s1 -f

    11.登录到另一个etcd的pod上检查etcd集群状态
    kubectl -n kube-system exec -it k8s2 — /bin/sh
    /# ETCDCTL_API=3 etcdctl -w table
    —endpoints 172.19.0.12:2379, 172.19.0.4:2379, 172.19.0.8:2379
    —cacert /etc/kubernetes/pki/etcd/ca.crt
    —cert /etc/kubernetes/pki/etcd/server.crt
    —key /etc/kubernetes/pki/etcd/server.key
    endpoint status
    这里会显示我们的三个etcd,其中一个为true,二个为false.

    12.测试故障转移

    12.1.假设现在k8s2为ture,ssh登录到k8s2,然后关闭docker
    systemctl stop docker

    12.2.查看节点信息
    kubectl get node
    显示k8s2为NotReady状态。

    12.3.在k8s3上再次查看endpoint status,发现k8s2现在为false,现在k8s3为true

    12.4.不能关闭k8s1的docker测试,关闭k8s1,整个集群不可用。

    12.5.查看haproxy的统计报告。

    12.6测试完后,启动docker

  • 相关阅读:
    SQL Server 创建触发器(trigger)
    jQuery插件-json2.js
    Opengl创建机器人手臂代码示例
    OpenGL超级宝典完整源码(第五版)
    基于Opengl的太阳系动画实现
    Opengl创建几何实体——四棱锥和立方体
    ubuntu16.04安装labelme
    Visual Studio Command Prompt 工具配置方法
    OpenNi安装示例
    Opencv读取图片像素值并保存为txt文件
  • 原文地址:https://www.cnblogs.com/51redhat/p/11951537.html
Copyright © 2020-2023  润新知