1、kubeadm 工具功能
- kubeadm init:初始化一个 Master 节点
- kubeadm join:将工作节点加入集群
- kubeadm upgrade:升级 K8s 版本
- kubeadm token:管理 kubeadm join 使用的令牌
- kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改
- kubeadm version:打印 kubeadm 版本
- kubeadm alpha:预览可用的新功能
2、环境规划

3、初始化配置
4、负载均衡器
Nginx + Keepalived

- 开源
- Ningx:主流 Web 服务和反向代理服务器,这里用四层实现对 apiserver 实现负载均衡!
- LVS
- HAProxy
- 公有云
- SLB
- 阿里云
- 腾讯云
- 华为云
4.1、安装软件包(主 / 备)
4.2、Nginx 配置文件
4.3、NginxMaster
- vrrp_script:指定检查 nginx 工作状态脚本(根据 nginx 状态判断是否故障转移)
- virtual_ipaddress:虚拟 IP(VIP)
- 准备上述配置文件中检查 nginx 运行状态的脚本:
4.4、NginxBackup
- 准备上述配置文件中检查 nginx 运行状态的脚本:
- keepalived 根据脚本返回状态码(0 为工作正常,非 0 不正常)判断是否故障转移
4.5、设置开机启动
4.6、查看工作状态
- 可以看到,在 ens33 网卡绑定了 192.168.31.88 虚拟 IP,说明工作正常。
4.7 Nginx+Keepalived 高可用测试
- 关闭主节点 Nginx,测试 VIP 是否漂移到备节点服务器
- 在 Nginx Master 执行 pkill nginx
- 在 Nginx Backup,ip addr 命令查看已成功绑定 VIP

5、Etcd 集群
为了节省机器,这里与 K8s 节点机器复用
也可以独立于 k8s 集群之外部署,只要 apiserver 能连接到就行
- Etcd 是一个分布式键值存储系统,Kubernetes 使用 Etcd 进行数据存储
- kubeadm 搭建默认情况下只启动一个 Etcd Pod,存在单点故障,生产环境强烈不建议
- 所以我们这里使用 3 台服务器组建集群,可容忍 1 台机器故障
- 当然,你也可以使用 5 台组建集群,可容忍 2 台机器故障
节点名称 | IP |
---|---|
etcd-1 | 192.168.189.21 |
etcd-2 | 192.168.189.22 |
etcd-3 | 192.168.189.26 |
5.1 准备 cfssl 工具
cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。
找任意一台服务器操作,这里用 Master 节点。
5.2 生成 Etcd 证书
1、自签证书颁发机构(CA)
2、自签 Etcd HTTPS 证书
3、从 Github 下载二进制文件
下载地址:https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
4、部署 Etcd 集群
以下在节点 1 上操作,为简化操作,待会将节点 1 生成的所有文件拷贝到节点 2 和节点 3。
4.1、创建工作目录并解压
4.2、创建 etcd 配置文件
- ETCD_NAME:节点名称,集群中唯一
- ETCD_DATA_DIR:数据目录
- ETCD_LISTEN_PEER_URLS:集群通信监听地址
- ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
- ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
- ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
- ETCD_INITIAL_CLUSTER:集群节点地址
- ETCD_INITIAL_CLUSTER_TOKEN:集群 Token
- ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入已有集群
4.3、systemd 管理 etcd
4.4、拷贝刚才生成的证书
4.5、启动并设置开机启动
4.6、拷贝文件
将上面节点 1 所有生成的文件拷贝到节点 2 和节点 3
然后在节点 2 和节点 3 分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP
最后启动 etcd 并设置开机启动,同上
4.7、查看集群状态
- 如果输出上面信息,就说明集群部署成功
- 如果有问题第一步先看日志:/var/log/message 或 journalctl -u etcd
6、K8s 集群
6.1 安装软件包 [all]
这里使用 Docker 作为容器引擎,也可以换成别的,例如 containerd
1、安装 Docker
2、添加阿里云 yum 源
3、安装 K8s 软件
由于版本更新频繁,这里指定版本号部署
6.2 配置 Master
1、初始化 master-1
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
或者使用配置文件引导
初始化完成后,会有两个 join 的命令
- 带有 --control-plane 是用于加入组建多 master 集群的
- 不带的是加入节点的
- kubeadm token create --print-join-command --ttl 0
2、初始化 master-2
3、测试负载均衡器
找 K8s 集群中任意一个节点,使用 curl 查看 K8s 版本测试,使用 VIP 访问
- 可以正确获取到 K8s 版本信息,说明负载均衡器搭建正常
- 该请求数据流程:curl -> vip(nginx) -> apiserver
- 通过查看 Nginx 日志也可以看到转发 apiserver IP:
6.3 配置 Node
只在 192.168.189.26-Node 节点执行
- 默认 token 有效期为 24 小时,当过期之后,该 token 就不可用了
- 这时就需要重新创建 token,可以直接使用命令快捷生成:
kubeadm token create --print-join-command
6.4 清理
如果你在集群中使用了一次性服务器进行测试,则可以关闭这些服务器,而无需进一步清理
你可以使用 kubectl config delete-cluster 删除对集群的本地引用
7、部署 Calico
Calico 是一个纯三层的数据中心网络方案,是目前 Kubernetes 主流的网络方案
8、部署 Dashboard
8.1、Dashboard
访问地址:https://NodeIP:30001
这里使用 https
评论区