kubeadm安装生产环境多master节点高可用集群

一、环境规划

k8s环境规划:
podSubnet(pod网段) 10.244.0.0/16
serviceSubnet(service网段): 10.96.0.0/16
操作系统:centos7.6或者centos7.9
配置: 4Gib内存/4vCPU/60G硬盘
网络:NAT
集群环境规划表

kubeadm和二进制安装k8s适用场景分析
kubeadm是官方提供的开源工具,是一个开源项目,用于快速搭建kubernetes集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。Kubeadm初始化k8s,所有的组件都是以pod形式运行的,具备故障自恢复能力。
kubeadm是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对k8s架构组件理解不深的话,遇到问题比较难排查。
kubeadm适合需要经常部署k8s,或者对自动化要求比较高的场景下使用。
二进制:在官网下载相关组件的二进制包,如果手动安装,对kubernetes理解也会更全面。
Kubeadm和二进制都适合生产环境,在生产环境运行都很稳定,具体如何选择,可以根据实际项目进行评估。

二、准备安装k8s集群环境

2.1、修改机器IP,变成静态IP

以mgmt01为例、其他所有机器按照集群IP规划均配置为静态IP

[root@mgmt01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens3
DEVICE=ens3
ONBOOT=yes
IPADDR=172.17.1.1
PREFIX=16
GATEWAY=172.17.255.250
DNS1=172.17.255.250

#修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

systemctl  restart network
注:/etc/sysconfig/network-scripts/ifcfg-ens3文件里的配置说明:
NAME=ens3    #网卡名字,跟DEVICE名字保持一致即可
DEVICE=ens3   #网卡设备名,大家ip addr可看到自己的这个网卡设备名,每个人的机器可能这个名字不一样,需要写自己的
BOOTPROTO=static   #static表示静态ip地址
ONBOOT=yes    #开机自启动网络,必须是yes
IPADDR=172.17.1.1   #ip地址,需要跟自己电脑所在网段一致
PREFIX=16 #子网掩码,需要跟自己电脑所在网段一致
GATEWAY=172.17.255.250  #网关,在自己电脑打开cmd,输入ipconfig /all可看到
DNS1=172.17.255.250   #DNS,在自己电脑打开cmd,输入ipconfig /all可看到 

2.2 关闭selinux

以mgmt01为例、其他所有机器均需要关闭selinux

[root@mgmt01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#修改selinux配置文件之后,重启机器,selinux配置才能永久生效
[root@mgmt01 ~]# getenforce
Disabled
#显示Disabled说明selinux已经关闭

2.3配置机器主机名

以mgmt01为例、其他所有机器均需要按照集群规划中主机名规划配置主机名

 [root@mgmt01 ~]# hostnamectl set-hostname --static   mgmt01

升级系统,由centos7.6升级到centos7.9
yum update -y

2.4 配置主机hosts文件,相互之间通过主机名互相访问

修改每台机器的/etc/hosts文件,增加如下六行:
172.17.1.1 mgmt01
172.17.2.2 mgmt02
172.17.3.3 mgmt03
172.17.4.4 node01
172.17.5.5 node02
172.17.6.6 node03
修改之后如下:

[root@mgmt01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.17.1.1  mgmt01
172.17.2.2  mgmt02
172.17.3.3  mgmt03
172.17.4.4  node01
172.17.5.5  node02
172.17.6.6  node03

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

以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# ssh-keygen -f  ~/.ssh/id_rsa -N ''   #生成密钥文件

把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@mgmt01 ~]#ssh-copy-id mgmt01
[root@mgmt01 ~]#ssh-copy-id mgmt02
[root@mgmt01 ~]#ssh-copy-id mgmt03
[root@mgmt01 ~]#ssh-copy-id node01
[root@mgmt01 ~]#ssh-copy-id node02
[root@mgmt01 ~]#ssh-copy-id node03

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

以mgmt01为例、其他所有机器均需做相同操作

#临时关闭
[root@mgmt01 ~]# swapoff -a
#永久关闭:注释swap挂载,给swap这行开头加一下注释
[root@mgmt01 ~]#  vim /etc/fstab   #给swap这行开头加一下注释#
#/dev/mapper/centos_mgmt01-swap swap                    swap    defaults        0 0

问题1:为什么要关闭swap交换分区?
Swap是交换分区,如果机器内存不够,会使用swap分区,但是swap分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败。如果不想要关闭交换分区,安装k8s的时候可以指定–ignore-preflight-errors=Swap来解决。

2.7 修改机器内核参数

以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# modprobe br_netfilter
[root@mgmt01 ~]# echo "modprobe br_netfilter" >> /etc/profile
[root@mgmt01 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

 sysctl -p /etc/sysctl.d/k8s.conf

问题1:sysctl是做什么的?
在运行时配置内核参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

问题2:为什么要执行modprobe br_netfilter?
修改/etc/sysctl.d/k8s.conf文件,增加如下三行参数:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

sysctl -p /etc/sysctl.d/k8s.conf出现报错:

sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory

解决方法:
modprobe br_netfilter

问题3:为什么开启net.bridge.bridge-nf-call-iptables内核参数?
在centos下安装docker,执行docker info出现如下警告:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

解决办法:
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

问题4:为什么要开启net.ipv4.ip_forward = 1参数?
kubeadm初始化k8s如果报错:

就表示没有开启ip_forward,需要开启。

net.ipv4.ip_forward是数据包转发:
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
要让Linux系统具有路由转发功能,需要配置一个Linux的内核参数net.ipv4.ip_forward。这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。

2.8 关闭firewalld防火墙

以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@mgmt02 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@mgmt03 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@node01 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@node02 ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@node03 ~]# systemctl stop firewalld ; systemctl disable firewalld

2.9 配置阿里云的repo源

以mgmt01为例、其他所有机器均需做相同操作

#下载阿里云的repo源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

[root@mgmt01 ~]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
--2023-02-22 17:51:32--  https://mirrors.aliyun.com/repo/epel-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 8.132.50.99, 8.132.50.101, 8.132.50.95, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|8.132.50.99|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:664 [application/octet-stream]
正在保存至: “/etc/yum.repos.d/epel.repo”

100%[=========================================================================================================================================================================>] 664         --.-K/s 用时 0.002s  

2023-02-22 17:51:32 (319 KB/s) - 已保存 “/etc/yum.repos.d/epel.repo” [664/664])


#配置国内阿里云docker的repo源

[root@mgmt01 ~]# yum install yum-utils -y
[root@mgmt01 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

2.10 配置安装k8s组件需要的阿里云的repo源

以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# vim  /etc/yum.repos.d/kubernetes.repo

#将mgmt01上Kubernetes的repo源复制给其他五台机器

[root@mgmt01 ~]# scp /etc/yum.repos.d/kubernetes.repo   mgmt02:/etc/yum.repos.d/kubernetes.repo
kubernetes.repo                                                                                                                                                                  100%  129    62.4KB/s   00:00    
[root@mgmt01 ~]# scp /etc/yum.repos.d/kubernetes.repo   mgmt03:/etc/yum.repos.d/kubernetes.repo
kubernetes.repo                                                                                                                                                                  100%  129    46.0KB/s   00:00    
[root@mgmt01 ~]# scp /etc/yum.repos.d/kubernetes.repo   node01:/etc/yum.repos.d/kubernetes.repo
kubernetes.repo                                                                                                                                                                  100%  129    66.1KB/s   00:00    
[root@mgmt01 ~]# scp /etc/yum.repos.d/kubernetes.repo   node02:/etc/yum.repos.d/kubernetes.repo
kubernetes.repo                                                                                                                                                                  100%  129    53.8KB/s   00:00    
[root@mgmt01 ~]# scp /etc/yum.repos.d/kubernetes.repo   node03:/etc/yum.repos.d/kubernetes.repo
kubernetes.repo                                                                                                                                                                  100%  129    50.7KB/s   00:00    
[root@mgmt01 ~]# 

2.11、配置时间同步

以mgmt01为例、其他所有机器均需做相同操作

#安装ntpdate命令
[root@mgmt01 ~]# yum install ntpdate -y
#跟网络时间做同步
[root@mgmt01 ~]# ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@mgmt01 ~]# crontab -e
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org
#重启crond服务
[root@mgmt01 ~]# systemctl  restart  crond.service 

2.12、 安装基础软件包

以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# 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

三、安装containerd服务

以mgmt01为例、其他所有机器均需做相同操作

3.1 、安装containerd服务

[root@mgmt01 ~]# yum install  containerd.io-1.6.6 -y

接下来生成 containerd 的配置文件:

[root@mgmt01 ~]# containerd config default > /etc/containerd/config.toml

修改配置文件:

打开/etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"

配置 containerd 开机启动,并启动 containerd

[root@mgmt01 ~]# systemctl enable containerd  --now

配置containerd镜像加速器,k8s所有节点均按照以下配置:
编辑vim /etc/containerd/config.toml文件
找到config_path = “”,修改成如下目录:
config_path = “/etc/containerd/certs.d”

#保存退出

mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host.“https://vh3bm52y.mirror.aliyuncs.com”,host.“https://registry.docker-cn.com”]
capabilities = [“pull”]

重启containerd:
systemctl restart containerd

备注:docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像

3.2、安装docker服务

安装docker-ce
以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# yum install docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io  -y

配置docker镜像加速器和驱动
以mgmt01为例、其他所有机器均需做相同操作

[root@mgmt01 ~]# mkdir  /etc/docker
[root@mgmt01 ~]# vim  /etc/docker/daemon.json 
{
   
 "registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
} 



重启docker:

[root@xianchaomaster1 ~]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值