文章目录
前言
本文将带大家一起通过二进制搭建Kubernetes v1.20,因为实验内容较多,故分成上、中、下三篇文章进行展示。
单master集群架构图
目前Kubernetes最新版本是v1.24,但大部分公司一般不会使用最新版本。
目前公司使用比较多的:老版本是v1.15,因为v1.16改变了很多API接口版本,新版本使用比较多的是v1.18、v1.20。
一、实验环境
注意:生产环境中,etcd集群和master、node节点都应该部署在不同的机器上,此处为了实验方便,将三台etcd节点分别部署在了master和node节点上了。
k8s集群master01:192.168.192.11,kube-apiserver、kube-controller-manager、kube-scheduler、etcd
k8s集群master02:192.168.192.12
k8s集群node01:192.168.192.13 kubelet、kube-proxy、docker
k8s集群node02:192.168.192.14
etcd集群节点1:192.168.192.11 etcd
etcd集群节点2:192.168.192.13
etcd集群节点3:192.168.192.14
负载均衡nginx+keepalive01(master):192.168.192.15
负载均衡nginx+keepalive02(backup):192.168.192.16
二、部署etcd集群
2.1 操作系统初始化配置
所有节点进行操作。
#关闭防火墙,清除防火墙规则
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
#-X可以清除一些自定义的链表规则
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#--------关闭swap-------------
swapoff -a #临时关闭交换分区
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭交换分区
#------根据规划设置主机名------
hostnamectl set-hostname master01 && su
hostnamectl set-hostname master02 && su
hostnamectl set-hostname node01 && su
hostnamectl set-hostname node02 && su
#--------修改/etc/hosts文件------
#添加主机名和IP的映射关系
vim /etc/hosts
192.168.192.11 master01
192.168.192.12 master02
192.168.192.13 node01
192.168.192.14 node02
#-----------调整内核参数--------------
vim /etc/sysctl.d/k8s.conf
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
#开启路由转发功能
sysctl --system #加载系统的内核参数
#-----------时间同步-------------------
yum install ntpdate -y
ntpdate time.windows.com
#将时间同步加入计划性任务,每30分钟执行一次
crontab -e
*/30 * * * * /usr/sbin/ntpdate time.windows.com
2.2 部署 etcd 集群(分布式键值对数据库)
etcd是Coreos团队于2013年6月发起的开源项目,它的目标是构建一个 高可用的分布式键值(key-value) 数据库。etcd内 部采用raft协议作为一致性算法,etcd是go语言编写的。
etcd作为服务发现系统,有以下的特点:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单。
- 安全:支持SSL证书验证。
- 快速:单实例支持每秒2k+读操作。
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性。
etcd目前默认使用2379端口提供HTTP API服务,2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。
即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。 (etcd和api-server通信使用2379端口,etcd之间使用2380通信)
etcd在生产环境中一般推荐集群方式部署。由于etcd的leader选举机制,要求至少为3台或以上的奇数台。
准备签发证书环境:
CFSSL是CloudFlare公司开源的一款PKI/TLS 工具。CFSSL包含一个命令行工具和一个用于签名、验证和捆绑TLS证书的HTTP API服务。使用Go语言编写。
CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL用来为etcd提供TLS证书,它支持签三种类型的证书:
- client证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如kubeapiserver 访问etcd;
- server证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如etcd对外提供服务;
- peer证书,相互之间连接时使用的证书,如etcd节点之间进行验证和通信。
这里全部都使用同一套证书认证。
1)在 etcd01 节点上操作
#----