一、安装环境
准备三台主机:
192.168.1.66 k8s-master
192.168.1.77 k8s-node01
192.168.1.88 k8s-node02
网段:
Pod ⽹段 172.16.0.0/16
Service ⽹段 10.96.0.0/16
注:宿主机⽹段、Pod ⽹段、Service ⽹段不能重复,服务器 IP 地址不能设置为 DHCP,需配置为静态 IP。
二、 前期准备
1、用master主机对另外两台node机进行免密登录
root@k8s-master \~\]# ssh-keygen
\[root@k8s-master \~\]# ssh-copy-id root@192.168.1.77
\[root@k8s-master \~\]# ssh-copy-id root@192.168.1.88
### 2、配置主机映射
\[root@k8s-master \~\]# vim /etc/hosts
192.168.1.66 k8s-master
192.168.1.77 k8s-node01
192.168.1.88 k8s-node02
\[root@k8s-master \~\]# scp /etc/hosts root@192.168.1.77:/etc/hosts
\[root@k8s-master \~\]# scp /etc/hosts root@192.168.1.88:/etc/hosts
### 3、上传repo源
kubernetes.repo
docker-ce.repo
还需要阿里云源以及epel.repo源
如果没有的话也可以在官网下载或是把我之前的文章中把对应的内容写入docker-ce.repo和kubernetes.repo 里。
\[root@k8s-master \~\]# yun clean all \&\& yum makecache
## 三、前期环境配置
(对master以及两台node机子进行以下操作)
### 1、安装必备工具
\[root@k8s-master \~\]# yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git tree -y
### 2、关闭安全及swap分区
\[root@k8s-master \~\]# swapoff -a \&\& sysctl -w vm.swappiness=0
\[root@k8s-master \~\]# sed -ri '/\^\[\^#\]\*swap/s@\^@#@' /etc/fstab
### 3、设置时间同步
\[root@k8s-master \~\]# yum -y install ntpdate
\[root@k8s-master \~\]# ntpdate time2.aliyun.com
\[root@k8s-master \~\]# crontab -e
\* 5 \* \* \* /usr/sbin/ntpdate time2.aliyun.com
### 4、设置限制条件
\[root@k8s-master \~\]# ulimit -SHn 65535 #单个进程可以打开的⽂件数量将被限制为 65535
\[root@k8s-master \~\]# vim /etc/security/limits.conf
\* soft nofile 65536
\* hard nofile 131072
\* soft nproc 65535
\* hard nproc 655350
\* soft memlock unlimited
\* hard memlock unlimited
### 5、安装k8s高可用性Git仓库
\[root@k8s-master \~\]# cd /root/ ; git clone https://gitee.com/dukuan/k8s-ha-install.git # 在 /root/ ⽬录下克隆⼀个名为 k8s-ha-install.git 的 Git 仓库
### 6、更新系统
\[root@k8s-master \~\]# yum update -y --exclude=kernel\* --nobest \&\& reboot
## 四、内核模块配置
\[root@k8s-master \~\]# yum install ipvsadm ipset sysstat conntrack libseccomp -y
\[root@k8s-master \~\]# modprobe -- ip_vs # 使用 modprobe 命令加载内核模块,核心 IPVS 模块。
\[root@k8s-master \~\]# modprobe -- ip_vs_rr # IPVS 负载均衡算法 rr
\[root@k8s-master \~\]# modprobe -- ip_vs_wrr # IPVS 负载均衡算法 wrr
\[root@k8s-master \~\]# modprobe -- ip_vs_sh # 用于源端负载均衡的模块
\[root@k8s-master \~\]# modprobe -- nf_conntrack # 用于网络流量过滤和跟踪的模块
\[root@k8s-master \~\]# vim /etc/modules-load.d/ipvs.conf
>
>
> # 在系统启动时加载下列 IPVS 和相关功能所需的模块
>
> ip_vs # 负载均衡模块
>
> ip_vs_lc # 用于实现基于连接数量的负载均衡算法
>
> ip_vs_wlc # 用于实现带权重的最少连接算法的模块
>
> ip_vs_rr # 负载均衡rr算法模块
>
> ip_vs_wrr # 负载均衡wrr算法模块
>
> ip_vs_lblc # 负载均衡算法,它结合了最少连接(LC)算法和基于偏置的轮询(Round Robin with Bias)算法
>
> ip_vs_lblcr # 用于实现基于链路层拥塞状况的最少连接负载调度算法的模块
>
> ip_vs_dh # 用于实现基于散列(Hashing)的负载均衡算法的模块
>
> ip_vs_sh # 用于源端负载均衡的模块
>
> ip_vs_fo # 用于实现基于本地服务的负载均衡算法的模块
>
> ip_vs_nq # 用于实现NQ算法的模块
>
> ip_vs_sed # 用于实现随机早期检测(Random Early Detection)算法的模块
>
> ip_vs_ftp # 用于实现FTP服务的负载均衡模块
>
> ip_vs_sh
>
> nf_conntrack # 用于跟踪网络连接的状态的模块
>
> ip_tables # 用于管理防护墙的机制
>
> ip_set # 用于创建和管理IP集合的模块
>
> xt_set # 用于处理IP数据包集合的模块,提供了与iptables等网络工具的接口
>
> ipt_set # 用于处理iptables规则集合的模块
>
> ipt_rpfilter # 用于实现路由反向路径过滤的模块
>
> ipt_REJECT # iptables模块之一,用于将不符合规则的数据包拒绝,并返回特定的错误码
>
> ipip # 用于实现IP隧道功能的模块,使得数据可以在两个网络之间进行传输
>
> \[root@k8s-master \~\]# lsmod \| grep -e ip_vs -e nf_conntrack # 查看已写入加载的模块
>
> ip_vs_sh 16384 0
>
> ip_vs_wrr 16384 0
>
> ip_vs_rr 16384 0
>
> ip_vs 172032 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
>
> nf_conntrack 172032 4 xt_conntrack,nf_nat,ipt_MASQUERADE,ip_vs
>
> nf_defrag_ipv6 20480 2 nf_conntrack,ip_vs
>
> nf_defrag_ipv4 16384 1 nf_conntrack
>
> libcrc32c 16384 5 nf_conntrack,nf_nat,nf_tables,xfs,ip_vs
\[root@k8s-master \~\]# vim /etc/sysctl.d/k8s.conf
>
>
> # 写入k8s所需内核模块
>
> net.bridge.bridge-nf-call-iptables = 1 # 控制网络桥接与iptables之间的网络转发行为
>
> net.bridge.bridge-nf-call-ip6tables = 1 # 用于控制网络桥接(bridge)的IP6tables过滤规则。当该参数设置为1时,表示启用对网络桥接的IP6tables过滤规则
>
> fs.may_detach_mounts = 1 # 用于控制文件系统是否允许分离挂载,1表示允许
>
> net.ipv4.conf.all.route_localnet = 1 # 允许本地网络上的路由。设置为1表示允许,设置为0表示禁止。
>
> vm.overcommit_memory=1 # 控制内存分配策略。设置为1表示允许内存过量分配,设置为0表示不允许。
>
> vm.panic_on_oom=0 # 决定当系统遇到内存不足(OOM)时是否产生panic。设置为0表示不产生panic,设置为1表示产生panic。
>
> fs.inotify.max_user_watches=89100 # inotify可以监视的文件和目录的最大数量。
>
> fs.file-max=52706963 # 系统级别的文件描述符的最大数量。
>
> fs.nr_open=52706963 # 单个进程可以打开的文件描述符的最大数量。
>
> net.netfilter.nf_conntrack_max=2310720 # 网络连接跟踪表的最大大小。
>
> net.ipv4.tcp_keepalive_time = 600 # TCP保活机制发送探测包的间隔时间(秒)。
>
> net.ipv4.tcp_keepalive_probes = 3 # TCP保活机制发送探测包的最大次数。
>
> net.ipv4.tcp_keepalive_intvl =15 # TCP保活机制在发送下一个探测包之前等待响应的时间(秒)。
>
> net.ipv4.tcp_max_tw_buckets = 36000 # TCP TIME_WAIT状态的bucket数量。
>
> net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT套接字。设置为1表示允许,设置为0表示不允许。
>
> net.ipv4.tcp_max_orphans = 327680 # 系统中最大的孤套接字数量。
>
> net.ipv4.tcp_orphan_retries = 3 # 系统尝试重新分配孤套接字的次数。
>
> net.ipv4.tcp_syncookies = 1 # 用于防止SYN洪水攻击。设置为1表示启用SYN cookies,设置为0表示禁用。
>
> net.ipv4.tcp_max_syn_backlog = 16384 # SYN连接请求队列的最大长度。
>
> net.ipv4.ip_conntrack_max = 65536 # IP连接跟踪表的最大大小。
>
> net.ipv4.tcp_max_syn_backlog = 16384 # 系统中最大的监听队列的长度。
>
> net.ipv4.tcp_timestamps = 0 # 用于关闭TCP时间戳选项。
>
> net.core.somaxconn = 16384 # 用于设置系统中最大的监听队列的长度
\[root@k8s-master \~\]# reboot
# 保存后,所有节点重启,保证重启后内核依然加载
## 五、基本组件安装
### 1、安装Containerd
#### 5.1.1安装Docker
\[root@k8s-master \~\]# yum remove -y podman runc containerd # 卸载之前的containerd
\[root@k8s-master \~\]# yum install docker-ce docker-ce-cli containerd.io -y # 安装Docker和containerd
#### 5.1.2配置Containerd所需模块
\[root@k8s-master \~\]# cat \<\