使用 KubeKey 在 AWS 高可用部署 Kubernetes
作者:李耀宗
介绍
对于生产环境,我们需要考虑 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 发布!
使用 KubeKey 在 AWS 高可用部署 Kubernetes的更多相关文章
- kubernetes 1.15.1 高可用部署 -- 从零开始
这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...
- 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)
公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- kubernetes1.7.6 ha高可用部署
写在前面: 1. 该文章部署方式为二进制部署. 2. 版本信息 k8s 1.7.6,etcd 3.2.9 3. 高可用部分 etcd做高可用集群.kube-apiserver 为无状态服务使用hap ...
- 手动搭建高可用的kubernetes 集群
之前按照和我一步步部署 kubernetes 集群的步骤一步一步的成功的使用二进制的方式安装了kubernetes集群,在该文档的基础上重新部署了最新的v1.8.2版本,实现了kube-apiserv ...
- Pod在多可用区worker节点上的高可用部署
一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可 ...
- harbor高可用部署
文章转载自:https://blog.csdn.net/networken/article/details/119704025 harbor高可用简介 harbor目前有两种主流的高可用方案: 多ha ...
- Kubeadm搭建高可用(k8s)Kubernetes v1.24.0集群
文章转载自:https://i4t.com/5451.html 背景 Kubernetes 1.24新特性 从kubelet中移除dockershim,自1.20版本被弃用之后,dockershim组 ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- LVS+Keepalived高可用部署
一.LVS+Keepalived高可用部署 一.keepalived节点部署 1.安装keepalived yum install keepalived ipvsadm -y mkdir -p /op ...
随机推荐
- 【转载】 NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研
原文地址: https://www.cnblogs.com/xuyaowen/p/nccl-learning.html ---------------------------------------- ...
- 关于英语的语言规范问题——美式英语、英式英语和中式英语(Chinese English)到底哪个才是正宗 —— 中式英语才是英语世界的未来
因为日常生成生活中总是会使用英语进行阅读.写作.学习和交流表达,由于小的时候是学传统正宗英语(英式英语),后来长大后因为美国实力强又开始学这个时候的正宗英语(美式英语),但是由于个人的能力问题(农村娃 ...
- 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC——如何在MPI中支持multiprocessing和fork操作——如何在HPC平台上使用pytorch——是否可以通过调度器的提交参数绕过HPC的计费系统
本文要讨论的就是如何在MPI中支持multiprocessing和fork操作,但是这个问题同时也是如何在HPC平台如何使用pytorch的问题,可以说这两个问题其实是同一个问题,而这个问题的解决过程 ...
- 从零体检一个魔塔社区模型(modelscope)最简单demo
从社区拿一个模型,比如以下这个链接 https://www.modelscope.cn/models/iic/cv_mobilenet-v2_bad-image-detecting 它的代码样例如下 ...
- springboot中统一日志输出logback
1.背景 为了便于分析和记录系统的运行,一个系统输出其运行的关键日志是非常必要的 比如输出:请求参数.请求url.请求方式.执行的sql.重要操作的日志.响应结果等 而这些日志中,大部分不需要我们手动 ...
- 后缀数组--SA--字符串
SA (Suffix Array) -- 后缀数组 简介 这里明白两个定义: \(SA_i\) : 按字典序排列后大小为 \(i\) 的后缀的后缀头的下标. \(Rank_i\) : 后缀头的下标为 ...
- Python wheel
在 Python 的生态系统中,wheel 是一种打包格式,用于分发和安装 Python 项目.它是 Python 包的标准格式之一,旨在提高安装速度和可靠性. Wheel 的优势 快速安装:因为 w ...
- SpringBoot启动项目报错:java.lang.UnsatisfiedLinkError: D:\files\software\jdk-15.0.1\jdk-17.0.3.1\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
目录 问题描述 解决方法: 问题描述 在运行向的时候出现报错: java.lang.UnsatisfiedLinkError: D:\files\software\jdk-15.0.1\jdk-17. ...
- 神经网络之卷积篇:详解池化层(Pooling layers)
详解池化层 除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,来看一下. 先举一个池化层的例子,然后再讨论池化层的必要性.假如输入是一个4×4矩阵,用到的 ...
- 这10种分布式ID,太绝了!
前言 分布式ID,在我们日常的开发中,其实使用的挺多的. 有很多业务场景在用,比如: 分布式链路系统的trace_id 单表中的主键 Redis中分布式锁的key 分库分表后表的id 今天跟大家一起聊 ...