作者:李耀宗
介绍
对于生产环境,咱们须要思考 Kubernetes 集群的高可用性。本文教您部署如何在多台 AWS EC2 实例疾速部署一套高可用的生产环境。要满足 Kubernetes 集群服务须要做到高可用,须要保障 kube-apiserver 的 HA,可应用下列两种形式:
- AWS ELB(举荐)
- keepalived + haproxy 对 kube-apiserver 进行负载平衡,实现高可用 Kubernetes 集群。
本教程重点介绍配置 AWS ELB 服务高可用装置。
前提条件
- 思考到数据的持久性,对于生产环境,咱们不建议您应用存储 OpenEBS,倡议 NFS、GlusterFS、Ceph 等存储 (须要提前准备)。文章为了进行开发和测试,集成了 OpenEBS 将 LocalPV 设置为默认的存储服务;
- SSH 能够拜访所有节点;
- 所有节点的工夫同步;
- Red Hat 在其 Linux 发行版本中包含了 SELinux,倡议敞开 SELinux 或者将 SELinux 的模式切换为 Permissive [宽容] 工作模式。
筹备主机
本示例创立 3 台 Ubuntu 18.04 server 64bit 的 EC2 云服务器,每台配置为 2 核 4 GB。
主机 IP | 主机名称 | 角色 |
---|---|---|
192.168.1.10 | master1 | master, node, etcd |
192.168.1.11 | master2 | master, node, etcd |
192.168.1.12 | master3 | master, node, etcd |
留神: 本教程仅作部署演示,在生产环境倡议角色拆散,独自部署 etcd 和 node 节点,进步稳定性。
创立 VPC
进入 AWS 控制台,在全副服务中抉择 VPC,创立一个 VPC,配置如下图所示:
创立子网
为该 VPC 创立子网,配置如下图所示:
创立互联网网关
抉择互联网网关,创立网关并绑定对应的 VPC:
配置路由表
配置 VPC 主动创立的路由表,减少一条 0.0.0.0/0
的路由:
创立平安组
配置 VPC 主动创立的默认平安组,设置如下入方向规定:
创立主机
在计算中抉择 EC2,按如下配置创立三台 EC2 主机:
- 抉择镜像
- 抉择规格
- 配置对应的 VPC 和子网
- 配置对应平安组
- EC2 主机创立胜利后,将一台主机绑定一个弹性 IP 地址,用于近程终端连贯:
创立负载均衡器
抉择负载平衡 - 指标群组,创立负载平衡指标群组,并注册 EC2 主机的 6443
端口:
- 创立
Network Load Balancer
类型的负载均衡器,并配置对应的 VPC 和子网:
- 配置监听器监听
6443
端口并连贯对应的指标群组:
查问负载均衡器的 IP 地址
抉择网络接口,能够看到主动生成的 ELB 网络接口的私有 IP 地址和公有 IP 地址:
配置 AWS 服务器 SSH 明码登录
顺次登录到每台服务器,重置 ubuntu
用户的明码:
sudo passwd ubuntu
批改 SSH 配置:
# 查找 PasswordAuthentication,将 PasswordAuthentication no 批改为:PasswordAuthentication yes
sudo vi /etc/ssh/sshd_config
重启 SSH 服务:
sudo systemctl restart sshd
获取 KubeKey 部署程序
从 Github Realese Page 下载 KubeKey 或间接应用以下命令:
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh -
应用 KubeyKey 部署
在以后地位创立部署配置文件 config-HA.yaml
:
./kk create config -f config-HA.yaml
集群配置调整
依据以后集群信息批改配置文件内容,无关更多信息,请参见多节点装置和 Kubernetes 集群配置:
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master1, address: 192.168.0.10, internalAddress: 192.168.0.10, user: ubuntu, password: password}
- {name: master2, address: 192.168.0.11, internalAddress: 192.168.0.11, user: ubuntu, password: password}
- {name: master3, address: 192.168.0.12, internalAddress: 192.168.0.12, user: ubuntu, password: password}
roleGroups:
etcd:
- master1
- master2
- master3
master:
- master1
- master2
- master3
worker:
- master1
- master2
- master3
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: "192.168.0.151"
port: 6443
kubernetes:
version: v1.19.8
imageRepo: kubesphere
clusterName: cluster.local
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
registryMirrors: []
insecureRegistries: []
addons: []
执行命令创立集群
./kk create cluster -f config-HA.yaml
KubeKey 可能会提醒短少 conntrack,可执行命令装置:
sudo apt-get install conntrack
。
查看后果
可执行命令查看部署后果,次要可通过以下命令进行查看:
kubectl get node
和kubectl get po
两个命令返回的后果中STATUS
的值为Ready
则示意集群部署胜利且组件运行失常。kubectl get ep
命令返回的后果中ENDPOINTS
蕴含所有管制立体即master
节点的 IP 地址。
ubuntu@master1:~$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master1 Ready master,worker 3m45s v1.19.8 192.168.0.10 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
master2 Ready master,worker 95s v1.19.8 192.168.0.11 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
master3 Ready master,worker 2m v1.19.8 192.168.0.12 <none> Ubuntu 18.04.5 LTS 5.4.0-1045-aws docker://20.10.7
ubuntu@master1:~$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-8f59968d4-gchrc 1/1 Running 0 104s
kube-system calico-node-c65wl 1/1 Running 0 105s
kube-system calico-node-kt4qd 1/1 Running 0 105s
kube-system calico-node-njxsh 1/1 Running 0 105s
kube-system coredns-86cfc99d74-ldx9b 1/1 Running 0 3m59s
kube-system coredns-86cfc99d74-pg5lj 1/1 Running 0 3m59s
kube-system kube-apiserver-master1 1/1 Running 0 4m19s
kube-system kube-apiserver-master2 1/1 Running 0 115s
kube-system kube-apiserver-master3 1/1 Running 0 2m33s
kube-system kube-controller-manager-master1 1/1 Running 0 4m19s
kube-system kube-controller-manager-master2 1/1 Running 0 115s
kube-system kube-controller-manager-master3 1/1 Running 0 2m34s
kube-system kube-proxy-klths 1/1 Running 0 2m12s
kube-system kube-proxy-nm79t 1/1 Running 0 3m59s
kube-system kube-proxy-nsvmh 1/1 Running 0 2m37s
kube-system kube-scheduler-master1 1/1 Running 0 4m19s
kube-system kube-scheduler-master2 1/1 Running 0 115s
kube-system kube-scheduler-master3 1/1 Running 0 2m34s
kube-system nodelocaldns-nblsl 1/1 Running 0 2m12s
kube-system nodelocaldns-q78k4 1/1 Running 0 3m54s
kube-system nodelocaldns-q9244 1/1 Running 0 2m37s
ubuntu@master1:~$ kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.0.10:6443,192.168.0.11:6443,192.168.0.12:6443 5m10s
本文由博客一文多发平台 OpenWrite 公布!