操作系统为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

kubeadm配置高可用etcd集群的更多相关文章

  1. centos7使用kubeadm配置高可用k8s集群

    CountingStars_ 关注 2018.08.12 09:06* 字数 464 阅读 88评论 0喜欢 0 简介 使用kubeadm配置多master节点,实现高可用. 安装 实验环境说明 实验 ...

  2. 03-创建高可用 etcd 集群

    本文档记录自己的学习历程! 创建高可用 etcd 集群 kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点使用以下机器: 192.1 ...

  3. 如何设置一个生产级别的高可用etcd集群

    在之前的文章中,我们详细介绍了K3s的架构以及部署场景,给尚未了解K3s的朋友提供了一个很好的入门方向.那么,在本文中我们将探索如何配置一个3节点的etcd集群,它将会被用于高可用.多节点的K3s集群 ...

  4. 使用Kubeadm搭建高可用Kubernetes集群

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  5. Kubernetes1.91(K8s)安装部署过程(三)--创建高可用etcd集群

    这里的etcd集群复用我们测试的3个节点,3个node都要安装并启动,注意修改配置文件 1.TLS认证文件分发:etcd集群认证用,除了本机有,分发到其他node节点 scp ca.pem kuber ...

  6. 用kubeadm创建高可用kubernetes集群后,如何重新添加控制平面

    集群信息 集群版本:1.13.1 3个控制平面,2个worker节点 k8s-001:10.0.3.4 k8s-002:10.0.3.5 k8s-003:10.0.3.6 k8s-004:10.0.3 ...

  7. Nginx 配置高可用的集群

    1.什么是 nginx 高可用 (1)需要两台 nginx 服务器 (2)需要 keepalived (3)需要虚拟 ip 2.配置高可用的准备工作 (1)需要两台服务器 192.168.17.129 ...

  8. kubeadm部署高可用K8S集群(v1.14.2)

    1. 简介 测试环境Kubernetes 1.14.2版本高可用搭建文档,搭建方式为kubeadm 2. 服务器版本和架构信息 系统版本:CentOS Linux release 7.6.1810 ( ...

  9. Kubeadm部署高可用K8S集群

    一 基础环境 1.1 资源 节点名称 ip地址 VIP 192.168.12.150 master01 192.168.12.48 master02 192.168.12.242 master03 1 ...

随机推荐

  1. (Java) RedisUtils

    package com.vcgeek.hephaestus.utils; import org.springframework.beans.factory.annotation.Autowired; ...

  2. (Java) AES-128 数据加密

    package com.vcgeek.hephaestus.utils; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeyS ...

  3. Net Core中 使用Middleware 实现反向代理

    有这样的一个需求,我们要拦截某些特定的请求,并将它们重新定向到另一台服务器中,然而客户端并不知情. 在NetCore中我们可以用中间件来实现, 首先创建项目: 我这里只有2.1 Version 的 添 ...

  4. 使用Typescript重构axios(二十三)——添加withCredentials属性

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  5. 通俗易懂了解Vue组件的通信方式

    1.前言 Vue框架倡导组件化开发,力求将一个大的项目拆分成若干个小的组件,就如同我们小时玩堆积木一样,一个大房子是由若干个小积木组成.组件化开发最大问题就是组件之间数据能够流通,即组件之间能够通信. ...

  6. 正睿OI集训游记

    什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...

  7. day2 上午 游戏 对应关系--->判断素数---->多重背包 神题

    #include<iostream> using namespace std; int n; ; ]; long long p[maxn]; long long dp[maxn][maxn ...

  8. window.getComputedStyle()方法的使用及其扩展

    1.window.getComputedStyle()方法返回值 是一个可以获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象([object CSSStyleDeclaratio ...

  9. 2. 彤哥说netty系列之IO的五种模型

    你好,我是彤哥,本篇是netty系列的第二篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别. ...

  10. Web微信开发工具无法输入中文?官方bug

    Ctrl+shift+w 重启工具就OK啦