JDKHOME JDKHOME
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Web

    • 权限框架Twiggy
    • 脚手架BLZO
  • 杂货
技术思考
  • Kubernetes
  • 文档
  • jdkhome
  • 友链
  • 版权声明
  • 分类
  • 标签
  • 归档
  • Kubernetes学习记录
  • 国内环境ubuntu18安装k8s
  • 部署nginx服务
  • Kubernetes部署ELK日志收集
  • 启动Pod遇到CrashLoopBackOff解决方案
  • Filebeat使用Node方式收集k8s集群日志
  • 主动清理日志
  • k8s修改Master的Ip
  • 手动重启Pod
  • 分配pod到指定的节点
  • jenkins-pipeline自动构建并部署至k8s
  • 搭建K8S高可用集群
    • 前言
      • 准备工作
    • 准备负载均衡器
    • 启动
    • 补充
    • 参考链接
  • 搭建redis
  • Kubernetes
linkji
2020-09-13

搭建K8S高可用集群

# 搭建k8s高可用集群

# 前言

前面在国内环境 ubuntu18 安装 k8s这篇文章中,我们搭建了简单的单master的k8s集群,但是在生产环境中,单节点是无法满足高可用的需求的。本篇文章将指导搭建一个3master、3worker的高可用k8s集群。

# 准备工作

7台机器

IP ROTE Hostname
10.0.0.180 负载均衡器 k8slb
10.0.0.181 master master001
10.0.0.182 master master002
10.0.0.183 master master003
10.0.0.185 worker worker001
10.0.0.186 worker worker002
10.0.0.187 worker worker003

这里除了k8s的node之外,还需要准备一个负载均衡器,我这里直接单开一台机器来安装负载均衡器,如果你是云上环境,可以直接用云服务商提供的负载均衡能力。

所有机器都安装好docker、设置好hostname。除了负载均衡器所在机器外,其他机器全部安装好kubeadm、kubelet、kubectl 并准备好启动k8s时所需的镜像。如有疑问可以参考国内环境 ubuntu18 安装 k8s。

# 准备负载均衡器

这里的负载均衡器是用来对k8s的 apiserver进行负载均衡的,官方没有限制负载均衡的软件,我这里用的是haproxy。 你可以进一步的搭建出haproxy + keepalive 的高可用负载均衡。


# cat /data/haproxy/haproxy.cfg 
global
    daemon
    nbproc 1
    chroot /usr/local/etc/haproxy

defaults
    mode tcp
    retries 2
    option redispatch
    maxconn 4096
    timeout connect 5000ms
    timeout client 30000ms
    timeout server 30000ms
    log 127.0.0.1 local0 err

listen apiserver
    bind 0.0.0.0:6443
    mode tcp
    server master001 10.0.0.181:6443 check
    server master002 10.0.0.182:6443 check
    server master003 10.0.0.183:6443 check

# 启动haproxy容器
docker run -d \
--name haproxy \
--restart=always \
-p 6443:6443 \
-v /data/haproxy:/usr/local/etc/haproxy:ro \
haproxy:2.2.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 启动

kubeadm init --control-plane-endpoint 10.0.0.180:6443 --upload-certs
1

初始化完成后终端上会打印出相应的join命令

# 加入成为master
kubeadm join 10.0.0.180:6443 --token xxxxxxx \
	--discovery-token-ca-cert-hash sha256:xxxxxxx \
    --control-plane --certificate-key xxxxxxx

# 加入成为worker
kubeadm join 10.0.0.180:6443 --token xxxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxx
1
2
3
4
5
6
7
8

可见加入成为master相较加入成为worker 只是多了一个 certificate-key 的参数。

在其他的node上使用root权限执行命令即可加入。

最后的效果:

$ kubectl get nodes
NAME        STATUS     ROLES    AGE     VERSION
master001   Ready      master   82m     v1.19.1
master002   Ready      master   78m     v1.19.1
master003   Ready      master   25m     v1.19.1
worker001   Ready      <none>   16m     v1.19.1
worker002   Ready      <none>   16m     v1.19.1
worker003   Ready      <none>   2m22s   v1.19.1
1
2
3
4
5
6
7
8

# 补充

如果忘记了join的命令,可以用以下方式重新生成:

# 生成加入成为worker的命令
kubeadm token create --print-join-command --ttl 0

# 生成加入成为master的 certificate-key 值
kubeadm init phase upload-certs --upload-certs
1
2
3
4
5

# 参考链接

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

上次更新: 2020/09/13, 14:09:00

← jenkins-pipeline自动构建并部署至k8s 搭建redis →

最近更新
01
搭建redis
11-21
02
istio安装
10-25
03
nexus搭建
09-12
更多文章>
鄂ICP备15015406号 | Copyright © 2015-2020 jdkhome
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式