经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
使用 KubeKey 在 AWS 高可用部署 Kubernetes
来源:cnblogs  作者:kubesphere  时间:2021/12/24 8:52:43  对本文有异议

作者:李耀宗

介绍

对于生产环境,我们需要考虑 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 用户的密码:

  1. sudo passwd ubuntu

修改 SSH 配置:

  1. # 查找 PasswordAuthentication,将 PasswordAuthentication no 修改为: PasswordAuthentication yes
  2. sudo vi /etc/ssh/sshd_config

重启 SSH 服务:

  1. sudo systemctl restart sshd

获取 KubeKey 部署程序

Github Realese Page 下载 KubeKey 或直接使用以下命令:

  1. curl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.0 sh -

使用 KubeyKey 部署

在当前位置创建部署配置文件 config-HA.yaml:

  1. ./kk create config -f config-HA.yaml

集群配置调整

根据当前集群信息修改配置文件内容,有关更多信息,请参见多节点安装 Kubernetes 集群配置

  1. apiVersion: kubekey.kubesphere.io/v1alpha1
  2. kind: Cluster
  3. metadata:
  4. name: sample
  5. spec:
  6. hosts:
  7. - {name: master1, address: 192.168.0.10, internalAddress: 192.168.0.10, user: ubuntu, password: password}
  8. - {name: master2, address: 192.168.0.11, internalAddress: 192.168.0.11, user: ubuntu, password: password}
  9. - {name: master3, address: 192.168.0.12, internalAddress: 192.168.0.12, user: ubuntu, password: password}
  10. roleGroups:
  11. etcd:
  12. - master1
  13. - master2
  14. - master3
  15. master:
  16. - master1
  17. - master2
  18. - master3
  19. worker:
  20. - master1
  21. - master2
  22. - master3
  23. controlPlaneEndpoint:
  24. domain: lb.kubesphere.local
  25. address: "192.168.0.151"
  26. port: 6443
  27. kubernetes:
  28. version: v1.19.8
  29. imageRepo: kubesphere
  30. clusterName: cluster.local
  31. network:
  32. plugin: calico
  33. kubePodsCIDR: 10.233.64.0/18
  34. kubeServiceCIDR: 10.233.0.0/18
  35. registry:
  36. registryMirrors: []
  37. insecureRegistries: []
  38. addons: []

执行命令创建集群

  1. ./kk create cluster -f config-HA.yaml

KubeKey 可能会提示缺少 conntrack,可执行命令安装:sudo apt-get install conntrack

检查结果

可执行命令检查部署结果,主要可通过以下命令进行检查:

  1. kubectl get nodekubectl get po 两个命令返回的结果中 STATUS 的值为 Ready则表示集群部署成功且组件运行正常。
  2. kubectl get ep 命令返回的结果中 ENDPOINTS 包含所有控制平面即 master 节点的 IP 地址。
  1. ubuntu@master1:~$ kubectl get node -owide
  2. NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
  3. 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
  4. 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
  5. 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
  6. ubuntu@master1:~$ kubectl get po -A
  7. NAMESPACE NAME READY STATUS RESTARTS AGE
  8. kube-system calico-kube-controllers-8f59968d4-gchrc 1/1 Running 0 104s
  9. kube-system calico-node-c65wl 1/1 Running 0 105s
  10. kube-system calico-node-kt4qd 1/1 Running 0 105s
  11. kube-system calico-node-njxsh 1/1 Running 0 105s
  12. kube-system coredns-86cfc99d74-ldx9b 1/1 Running 0 3m59s
  13. kube-system coredns-86cfc99d74-pg5lj 1/1 Running 0 3m59s
  14. kube-system kube-apiserver-master1 1/1 Running 0 4m19s
  15. kube-system kube-apiserver-master2 1/1 Running 0 115s
  16. kube-system kube-apiserver-master3 1/1 Running 0 2m33s
  17. kube-system kube-controller-manager-master1 1/1 Running 0 4m19s
  18. kube-system kube-controller-manager-master2 1/1 Running 0 115s
  19. kube-system kube-controller-manager-master3 1/1 Running 0 2m34s
  20. kube-system kube-proxy-klths 1/1 Running 0 2m12s
  21. kube-system kube-proxy-nm79t 1/1 Running 0 3m59s
  22. kube-system kube-proxy-nsvmh 1/1 Running 0 2m37s
  23. kube-system kube-scheduler-master1 1/1 Running 0 4m19s
  24. kube-system kube-scheduler-master2 1/1 Running 0 115s
  25. kube-system kube-scheduler-master3 1/1 Running 0 2m34s
  26. kube-system nodelocaldns-nblsl 1/1 Running 0 2m12s
  27. kube-system nodelocaldns-q78k4 1/1 Running 0 3m54s
  28. kube-system nodelocaldns-q9244 1/1 Running 0 2m37s
  29. ubuntu@master1:~$ kubectl get ep
  30. NAME ENDPOINTS AGE
  31. kubernetes 192.168.0.10:6443,192.168.0.11:6443,192.168.0.12:6443 5m10s

本文由博客一文多发平台 OpenWrite 发布!

原文链接:http://www.cnblogs.com/kubesphere/p/15716462.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号