高可用集群指 1个lb + 3个master(etcd) + n个node,生产环境都推荐这种安装方式新版的k8s,etcd节点已经可以完美和master节点共存于同一台服务器上;

etcd有3种方式安装(独立安装、docker方式、k8s内部集成);

虽然k8s集成方式是官方推荐的,但是目前全是坑,这里还是采用独立安装方式。

1.准备工作节点IP功能proxy192.168.0.10haproxy

master1192.168.0.11master, etcd

master2192.168.0.12master, etcd

master3192.168.0.13master, etcd

请先参考前文部署单点k8s集群构建基础镜像

给每个master起个独立的主机名(master1, master2, master3)。hostnamectl set-hostname master1

etcd和master是可以复用同一台服务器的(土豪随意)

后面有很多scp操作,为了方便,需要配置master1到master1, master2, master3的免密登陆ssh-keygen  # 一路回车即可scp .ssh/id_rsa.pub master1:

scp .ssh/id_rsa.pub master2:

scp .ssh/id_rsa.pub master3:

[root@master1 ~]# mkdir .ssh && cat id_rsa.pub >> .ssh/authorized_keys[root@master2 ~]# mkdir .ssh && cat id_rsa.pub >> .ssh/authorized_keys[root@master3 ~]# mkdir .ssh && cat id_rsa.pub >> .ssh/authorized_keys

2. 配置haproxy如果是在云端构建集群,可以省去该步骤,直接使用供应商提供的负载均衡服务替代

在proxy节点上运行master1=192.168.0.11

master2=192.168.0.12

master3=192.168.0.13

yum install -y haproxy

systemctl enable haproxy

cat <> /etc/haproxy/haproxy.cfg

listen k8s-lb *:6443

mode tcp

balance roundrobin

server s1 $master1:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3

server s2 $master2:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3

server s3 $master3:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3

EOF

service haproxy start

3. 安装etcd集群在3台master上安装etcdyum install -y etcd

systemctl enable etcd生成配置

在master1上操作etcd1=192.168.0.11

etcd2=192.168.0.12

etcd3=192.168.0.13

TOKEN=abcd1234

ETCDHOSTS=($etcd1 $etcd2 $etcd3)

NAMES=("infra0" "infra1" "infra2")for i in "${!ETCDHOSTS[@]}"; doHOST=${ETCDHOSTS[$i]}NAME=${NAMES[$i]}cat < /tmp/$NAME.conf# [member]ETCD_NAME=$NAMEETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="http://$HOST:2380"ETCD_LISTEN_CLIENT_URLS="http://$HOST:2379,http://127.0.0.1:2379"#[cluster]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$HOST:2380"ETCD_INITIAL_CLUSTER="${NAMES[0]}=http://${ETCDHOSTS[0]}:2380,${NAMES[1]}=http://${ETCDHOSTS[1]}:2380,${NAMES[2]}=http://${ETCDHOSTS[2]}:2380"ETCD_INITIAL_CLUSTER_STATE="new"ETCD_INITIAL_CLUSTER_TOKEN="$TOKEN"ETCD_ADVERTISE_CLIENT_URLS="http://$HOST:2379"EOFdone覆盖etcd配置for i in "${!ETCDHOSTS[@]}"; doHOST=${ETCDHOSTS[$i]}NAME=${NAMES[$i]}scp /tmp/$NAME.conf $HOST:

ssh $HOST "\mv -f $NAME.conf /etc/etcd/etcd.conf"rm -f /tmp/$NAME.confdone在每台节点上启动etcdmaster1上执行service etcd start,会一直pending状态,等master2的etcd启动以后就会完成。[root@master1 ~]# service etcd start[root@master2 ~]# service etcd start[root@master3 ~]# service etcd start任意节点验证集群etcdctl member listetcdctl cluster-health

4. 安装master集群在master1上初始化集群proxy=192.168.0.10

etcd1=192.168.0.11

etcd2=192.168.0.12

etcd3=192.168.0.13

master1=$etcd1master2=$etcd2master3=$etcd3cat < kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1alpha3

kind: ClusterConfiguration

kubernetesVersion: stable

apiServerCertSANs:

- "$proxy"controlPlaneEndpoint: "$proxy:6443"etcd:

external:

endpoints:

- "http://$etcd1:2379"

- "http://$etcd2:2379"

- "http://$etcd3:2379"imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

networking:

podSubnet: "10.244.0.0/16"EOF

kubeadm init --config kubeadm-config.yaml拷贝集群需要的证书到其它master节点# make a list of required kubernetes certificate filescat < certificate_files.txt

/etc/kubernetes/pki/ca.crt

/etc/kubernetes/pki/ca.key

/etc/kubernetes/pki/sa.key

/etc/kubernetes/pki/sa.pub

/etc/kubernetes/pki/front-proxy-ca.crt

/etc/kubernetes/pki/front-proxy-ca.key

EOF# create the archivetar -czf control-plane-certificates.tar.gz -T certificate_files.txt

CONTROL_PLANE_IPS="$master2 $master3"for host in ${CONTROL_PLANE_IPS}; do

scp control-plane-certificates.tar.gz $host:done配置其它master节点

到master2, master3上执行如下脚本mkdir -p /etc/kubernetes/pki

tar -xzf control-plane-certificates.tar.gz -C /etc/kubernetes/pki --strip-components 3

执行master1上生成的kubeadm join指令,在指令最后加入参数"–experimental-control-plane",指令最后类似kubeadm join ha.k8s.example.com:6443 --token 5ynki1.3erp9i3yo7gqg1nv --discovery-token-ca-cert-hash sha256:a00055bd8c710a9906a3d91b87ea02976334e1247936ac061d867a0f014ecd81 --experimental-control-plane安装flannel网络插件

在任意master节点上执行kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

到此集群搭建工作已经完毕,可用如下指令验证集群kubectl get cs      # 查看etcd集群状态kubectl get pods -o wide -n kube-system # 查看系统服务状态kubectl get nodes   # 查看集群节点状态

作者:丁丁_麦田守望者

链接:https://www.jianshu.com/p/e3159a681a0c

k8s高可用集群多个主节点_部署高可用k8s集群相关推荐

  1. 智能集群理论优化控制_深度解析【智能集群控制技术】到底多硬核?

    -集群无人机优势- 俗话说:双拳难敌四手,好汉架不住群狼.一系列理论研究表明:无人机集群作战能够实现对单元作战能力更大胜率.近年流行的两个科幻电影<星际迷航><独立日>等,细心 ...

  2. pve安装黑群晖直通硬盘_完美解决Proxmox VE下黑群晖硬盘休眠问题(不直通SATA控制器)...

    本帖最后由 梅落雨黄昏 于 2018-4-15 23:09 编辑 Proxmox VE(简称PVE)是一个非常方便的kvm与lxc集成环境,基于Debian 9,比起ESXi来说,方便易用,资源消耗低 ...

  3. 搭建K8s集群(kubeadm方式)-部署node节点和集群测试

    部署CNI网络插件 上面的状态还是NotReady,下面我们需要网络插件,来进行联网访问 # 下载网络插件配置 wget https://raw.githubusercontent.com/coreo ...

  4. 部署高可用的Lync Server 2013 Part 4 部署高可用的文件共享DFS

    上面的几节中,我们部署好了两个SQL的群集分别用作lync的数据库和用来备份的Mirror镜像,以及另一个单台的见证SQL数据库和报表服务,并开通了防火墙. 在Lync 2013的部署中,我们还需要提 ...

  5. 通过二进制方式_部署CNI网络和集群测试---K8S_Google工作笔记0015

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上面我们已经通过二进制方式,把master节点和node节点,以及kubelet和kube-pro ...

  6. K8S_Google工作笔记0007---通过kubeadm方式_部署node节点和集群测试

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 接着上一讲说,这里可以看到master节点部署完了,并且把node1,node2节点添加到了mas ...

  7. 互补输出级采用共集形式是为了使_互补输出级采用共集形式是为了使

    [单选题]下面结构中最适于表示稀疏无向图的是( ). [简答题]图的广度优先遍历类似于树的( )遍历,它所用到的数据结构是( ). [填空题]已知L是有表头结点的非空循环单链表,试从下列提供的答案中选 ...

  8. 按群计数10以内_大班数学活动:按群计数

    大班数学活动:按群计数 一设计意图: 按群计数,是一节幼儿园大班的传统教育活动是幼儿数群数概念初步发展的标志之一,在<指南>中指出5到6岁的幼儿能发现生活中许多问题都可以用数学 的方法来解 ...

  9. 粒子群算法组卷_概率表示的二进制粒子群算法在组卷中的应用

    概率表示的二进制粒子群算法在组卷中的应用 于庆梅 ; 杨争争 ; 雷景生 ; 刘怡乐 [期刊名称] <计算机仿真> [年 ( 卷 ), 期] 2012(029)009 [摘要] In or ...

最新文章

  1. postman 获取session_【接口测试】Postman入门10 Postman中的Session
  2. Java泛型之mybatis,基于spring MVC 和 MyBatis 泛型的代码生成模板
  3. 借助JRebel使Tomcat支持热部署
  4. mysql读写分离 存储过程_基于maxscale的读写分离部署笔记
  5. 最小二乘估计_相关性及最小二乘估计【20201026】
  6. 计算机网络之网络概述:6、TCP/IP模型和5层参考模型
  7. php连接mysql学习过程中遇到的各种问题总结
  8. 中兴通讯:已具备完整的5G端到端解决方案的能力
  9. 历经十年,Windows 7 生命周期将结束,微软:快换 Windows 10
  10. WSGI Middleware
  11. 原生js之同级元素添加移除class
  12. 编写 if 时尽量不要带 else
  13. 【声学检测】基于matlab MFCC+GMM安全事件声学检测系统【含Matlab源码 1699期】
  14. 小黑盒不显示服务器,小黑盒有的好友不显示 | 手游网游页游攻略大全
  15. 单片机IO口科普:推挽输出、开漏输出详解
  16. 程序集版本号,文件版本号及发布版本号管理
  17. R语言爬虫豆瓣高评分电影(喝最烈的酒,熬最深的夜,吃最好的胃药,敷最贵的面膜)
  18. 华硕计算机用户名默认,华硕路由器设置方法_华硕(ASUS)路由器怎么设置?-192路由网...
  19. python编写植物大战僵尸_python开发植物大战僵尸游戏
  20. alpha因子常见问题_手把手教你构建量化因子分析体系

热门文章

  1. 3D MAX 常见小问题集合三
  2. liverpool中文意思_Liverpool是什么意思
  3. 状态栏电量百分比默认关闭
  4. 邓丽君的竞争力三部曲【人人都是产品经理:9020】
  5. Android实现中英文切换(”傻瓜式“操作)
  6. Mitsuba中的智能指针ref和scheduler单例
  7. 洛谷 T244317 【图的存储】新建公路
  8. 股票中什么是每股收益,有什么作用
  9. 家庭服务机器人仿真平台运行指南
  10. 没有用oc正版怎么降噪?其他降噪软件。