K8S篇之一 kubeadm安装2master+1node集群-之初始化环境操作

一、环境说明

1.1 环境规划

名称 详细说明
系统 centos7.8.2003
配置 4vcpu+8GB+100GB
网络 桥接

1.2 环境信息和网段划分

K8S集群 IP 主机名 安装的组件
控制节点1 192.168.10.201 nflmaster1 apiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepailed、nginx、calico
控制节点2 192.168.10.202 nflmaster2 apiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepailed、nginx、calico
工作节点1 192.168.10.211 nflnode1 kubelet、kube-proxy、docker、calico、coredns
VIP 192.168.10.200

规划的pod网段和service网段如下

资源名称 网段
pod网段 10.10.0.0/16
service网段 10.11.0.0/16

二、kubeadm安装步骤前的初始化环境操作

1.1 3台机器环境初始化-固定IP、主机名更改并访问

①固定IP如下
cd /etc/sysconfig/network-scripts && vi ifcfg-ens33 #根据自己网卡实际名字修改
把BOOTPROTO后面的值改为static
image

systemctl restart network #重启网卡

②固定主机名如下
[root@localhost ~]# hostnamectl set-hostname nflmaster1 && bash #在201机器上修改
[root@localhost ~]# hostnamectl set-hostname nflmaster2 && bash #在202机器上修改
[root@localhost ~]# hostnamectl set-hostname nflnode1 && bash #在211机器上修改

③机器间主机名互访如下
每台机器下,修改 /etc/hosts 文件,最后增加如下三行:

点击查看增加/etc/hosts的代码
192.168.10.201 nflmaster1
192.168.10.202 nflmaster2
192.168.10.211 nflnode1
每台机器都去ping nflmaster1 ping nflmaster2 ping nflnode1都是通的即可。

1.2 配置主机之间无密码登录

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作

1.2.1 第一台nflmaster1主机上操作

①首先生成公钥和私钥文件
[root@nflmaster1 ~]# ssh-keygen #一直回车,会生成2个文件,私钥和公钥
[root@nflmaster1 ~]# cd /root/.ssh/ && ll
image
②命令把nflmaster1的公钥拷贝到每台主机上
[root@nflmaster1 .ssh]# ssh-copy-id nflmaster1 #拷贝到本机-master1,紧跟着输入 yes,输入nflmaster1的root密码
[root@nflmaster1 .ssh]# ssh-copy-id nflmaster2 #拷贝nflmaster2,输入yes,输入nflmaster2的root密码
[root@nflmaster1 .ssh]# ssh-copy-id nflnode1 #拷贝到nflnode1上,输入yes,输入nflnode1的root密码
③nflmaster1上验证,ssh登录其他主机,是否需要输入密码
[root@nflmaster1 .ssh]# ssh nflmaster2 #登录nflmaster2
[root@nflmaster1 .ssh]# ssh nflnode1 #登录nflnode1
image

1.2.2 在nflmaster2、nflnode1上按照1.2.1步骤设置即可

1.3 关闭交换分区swap,提升性能

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作

1.3.1 临时关闭,重启机器后,交换分区会打开

[root@nflmaster1 ~]# swapoff -a #临时关闭
[root@nflmaster1 ~]# free -g #验证,此时swap都是0
[root@nflmaster1 ~]# swapon -a #打开swap
image

1.3.2 永久关闭--推荐使用

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
把/etc/fstab文件中的UUID删除,swap挂载的那一行注销掉
备注:只注销swap那一行,不删除UUID--boot那一行,reboot机器后,swap分区也是永久关闭的。克隆的机器,需要删除UUID那一行。
image

image
此时 reboot主机,free -g 查看,无swap分区

为什么需要关闭swap交换分区?
答:因为用kubeadm安装K8S时,不关闭swap分区,会报一个初始化的错误--提示swap分区没有关闭。
解决:①提前关闭swap分区;
②kubeadm 后,加一个参数 --ignore-preflight-errors=Swap
去解决;

1.4 修改机器内核参数-开启转发和桥接模式

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
[root@nflmaster1 ~]# modprobe br_netfilter #加载模块
[root@nflmaster1 ~]# lsmod | grep br_netfilter #验证是否加载成功
image

[root@nflmaster1 ~]# vim /etc/sysctl.d/k8s.conf #新建文件,写入下面三行,开启转发功能

点击查看k8s.conf代码
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

[root@nflmaster1 ~]# sysctl -p /etc/sysctl.d/k8s.conf #指定从k8s.conf文件中加载内核参数,使其生效
image

解释/etc/sysctl.d/k8s.conf文件内容含义
①net.bridge.bridge-nf-call-ip6tables = 1 和net.bridge.bridge-nf-call-iptables = 1 为什么设置1-开启状态?
答:不开启的话,在安装docker时,docker info 查看信息时,会有警告,
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
所以提前开启。
②net.ipv4.ip_forward = 1 为什么设置1-开启?
答:不开启的话,kubeadm初始化时,会报一个错误,ERROR fileConten--proc-sys-net-ipv4-ip_forward:/proc/sys/net/ipv4/ip_forward...not set to 1 数据包转发的参数,需要开启。

1.5 关闭firewalld防火墙和selinux

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
[root@nflmaster1 ~]# systemctl stop firewalld.service
[root@nflmaster1 ~]# systemctl disable firewalld.service
[root@nflmaster1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
关闭selinux后,机器reboot才能使其生效
[root@nflmaster1 yum.repos.d]# getenforce
image

1.6 3台机器都配置阿里的Base的repo源、docker的repo源、k8s组件的repo源

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作

①配置阿里的base源

[root@nflmaster1 yum.repos.d]# mkdir -p /root/repo.bak/ #创建新目录
[root@nflmaster1 yum.repos.d]# mv /etc/yum.repos.d/* /root/repo.bak/ #把本地的repo源,全部备份到新建的目录
[root@nflmaster1 yum.repos.d]# cd /etc/yum.repos.d/ #进入本地的repo源目录

把CentOS-Base.repo文件上传到/etc/yum.repos.d/目录下
链接:https://pan.baidu.com/s/1s8q-4CFkrYgyuYljBfx8lg
提取码:1234

image

②配置阿里的docker的repo源

[root@nflmaster1 yum.repos.d]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@nflmaster1 yum.repos.d]# ll
image

③配置安装K8S组件时,需要阿里的repo源

[root@nflmaster1 ~]# cd /etc/yum.repos.d/ && vim kubernetes.repo #在/etc/yum.repos.d/目录下,新建kubernetes.repo文件,填写下面内容

点击查看kubernetes.repo代码
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

image

1.7 配置时间同步(网络ntp或者本地ntp)

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
每台机器上需要有ntp、ntpdate
[root@nflmaster1 ~]# yum -y install ntp ntpdate
[root@nflmaster1 ~]# ntpdate cn.pool.ntp.org #同步网络时间
[root@nflmaster1 ~]# crontab -e #写定时同步任务

点击查看代码
* 6 * * * /usr/sbin/ntpdate cn.pool.ntp.org

[root@nflmaster1 ~]# systemctl restart crond.service #重启服务

1.8 开启ipvs

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作

为什么开启ipvs?
答:kuber-proxy组件会用到ipvs,K8S中,创建service资源时,带着端口,就会被kube-proxy与apiserver交互时检测到,然后就会把service的ip、端口保存到iptables规则或ipvs规则中。
备注1:当规则越来越多时,ipvs查询规则的速度会比iptables快。

ipvs和iptables的区别是什么?
答:ipvs--ip virtual server,ip虚拟服务,可以在传输层作负载均衡。属于linux内核机制,在主机运行。
kube-proxy支持iptables和ipvs两种模式。
在K8S v1.8时,出来的ipvs。v1.11处于稳定版本,可以使用了。
在K8S v1.1时,有iptables。v1.2版本,iptables就是处于默认模式。

iptables和ipvs都是基于netfilter实现的:
1、ipvs采用的是hash表存储规则,线性查找是很快;
iptables是一条条规则存储的。
规则少时,无明显区别;规则存储多时,ipvs查找起来就很快。
不开启ipvs进行配置的话,kube-proxy默认使用iptables。
2、ipvs 大型集群使用时,提供更好的扩展性和性能;
3、ipvs支持更多的负载均衡算法(如最小负载、最少连接、加权等)
4、ipvs支持 服务器健康检查、连接重试等功能;

链接:https://pan.baidu.com/s/1eL4Bus9nQPvgSVsigWn0-A
提取码:1234
把上面链接中的ipvs.modules文件上传到/etc/sysconfig/modules/目录下
image

[root@nflmaster1 ~]# cd /etc/sysconfig/modules/
[root@nflmaster1 modules]# chmod +x ipvs.modules
[root@nflmaster1 modules]# lsmod | grep ip_vs #此时未加载
[root@nflmaster1 modules]# bash ipvs.modules #执行脚本
[root@nflmaster1 modules]# lsmod | grep ip_vs #再次查看、验证
image

1.9 安装基础软件包

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
这些软件包,即使是以最小包,也可以使用安装。
[root@nflmaster1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

1.10 安装iptables

以下以nflmaster1机器为例。同理,在其余2台机器上如此操作
可以安装,也可以不安装。因为上面用了ipvs了。
[root@nflmaster1 ~]# yum -y install iptables-services #安装
[root@nflmaster1 ~]# systemctl stop iptables #关闭
[root@nflmaster1 ~]# systemctl disable iptables #关闭自启动
[root@nflmaster1 ~]# iptables -F #清空防火墙规则

K8S篇之二 kubeadm安装2master+1node集群-之安装docker服务+安装初始化K8S需要的软件包

posted @ 2022-07-24 18:04  菜鸟不想早飞  阅读(19)  评论(0)    收藏  举报