一、系统环境准备
1、系统环境说明
系统 | 角色 | IP | 组件 | K8s版本 |
centos7.9 | kubeadm-master1 | 192.168.100.41 | docker,kubeadm,kubelet,kubectl | v1.20.0 |
centos7.9 | kubeadm-master1 | 192.168.100.42 | docker,kubeadm,kubelet,kubectl | v1.20.0 |
centos7.9 | kubeadm-master1 | 192.168.100.43 | docker,kubeadm,kubelet,kubectl | v1.20.0 |
centos7.9 | kubeadm-node1 | 192.168.100.44 | docker,kubeadm,kubelet,kubectl | v1.20.0 |
centos7.9 | kubeadm-node1 | 192.168.100.45 | docker,kubeadm,kubelet,kubectl | v1.20.0 |
VIP | 192.168.100.46 | 使用VIP进行kubeadm初始化master |
2、初始化环境配置
2.1、关闭防火墙
systemctl stop firewalld
systemctl disable --now firewalld
2.2、关闭selinux
#永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时关闭
setenforce 0
2.3、关闭swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a && sysctl -w vm.swappiness=0
cat /etc/fstab
# 参数解释:
# -ri: 这个参数用于在原文件中替换匹配的模式。-r表示扩展正则表达式,-i允许直接修改文件。
# 's/.*swap.*/#&/': 这是一个sed命令,用于在文件/etc/fstab中找到包含swap的行,并在行首添加#来注释掉该行。
# /etc/fstab: 这是一个文件路径,即/etc/fstab文件,用于存储文件系统表。
# swapoff -a: 这个命令用于关闭所有启用的交换分区。
# sysctl -w vm.swappiness=0: 这个命令用于修改vm.swappiness参数的值为0,表示系统在物理内存充足时更倾向于使用物理内存而非交换分区。
2.4、时间同步
#加到计划任务每5分钟同步一次时间
echo "5 * * * * ntpdate ntp1.aliyun.com" > /var/spool/cron/root
#同步时间
/usr/sbin/ntpdate ntp.aliyun.com
#同步到硬件时钟
hwclock --systohc
2.5、将桥接的IPv4流量传递到iptables的链
#桥接前确认br_netfilter模块是否加载,执行以下命令
lsmod | grep br_netfilter
modprobe br_netfilter
#然后执行下命令
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#使其生效
sysctl --system
2.6、更换centos7配置yum源
#备份官方centos源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载阿里centos源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#配置epel源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#清除缓存
yum clean all
#生成新的缓存
yum makecache
2.7、配置docker和kubernetes源
#下载docker源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#配置kubernetes源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#更新yum缓存
yum makecache fast
2.8、所有节点设置主机名并配置hosts解析
#所有节点设置主机名
hostnamectl set-hostname <hostname>
#添加hosts解析
cat > /etc/hosts << EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.41 kubeadm-master1
192.168.100.42 kubeadm-master2
192.168.100.43 kubeadm-master3
192.168.100.44 kubeadm-node1
192.168.100.45 kubeadm-node2
EOF
2.9、配置免密登录
yum install -y sshpass
ssh-keygen -f /root/.ssh/id_rsa -P ''
export IP="192.168.100.41 192.168.100.42 192.168.100.43 192.168.100.44 192.168.100.45"
export SSHPASS=086530
for HOST in $IP;do
sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $HOST
done
# 这段脚本的作用是在一台机器上安装sshpass工具,并通过sshpass自动将本机的SSH公钥复制到多个远程主机上,以实现无需手动输入密码的SSH登录。
# 具体解释如下:
# 1. `apt install -y sshpass` 或 `yum install -y sshpass`:通过包管理器(apt或yum)安装sshpass工具,使得后续可以使用sshpass命令。
# 2. `ssh-keygen -f /root/.ssh/id_rsa -P ''`:生成SSH密钥对。该命令会在/root/.ssh目录下生成私钥文件id_rsa和公钥文件id_rsa.pub,同时不设置密码(即-P参数后面为空),方便后续通过ssh-copy-id命令自动复制公钥。
# 3. `export IP="192.168.100.41 192.168.100.42 192.168.100.43 192.168.100.44 192.168.100.45"`:设置一个包含多个远程主机IP地址的环境变量IP,用空格分隔开,表示要将SSH公钥复制到这些远程主机上。
# 4. `export SSHPASS=086530`:设置环境变量SSHPASS,将sshpass所需的SSH密码(在这里是"123123")赋值给它,这样sshpass命令可以自动使用这个密码进行登录。
# 5. `for HOST in $IP;do`:遍历环境变量IP中的每个IP地址,并将当前IP地址赋值给变量HOST。
# 6. `sshpass -e ssh-copy-id -o StrictHostKeyChecking=no $HOST`:使用sshpass工具复制本机的SSH公钥到远程主机。其中,-e选项表示使用环境变量中的密码(即SSHPASS)进行登录,-o StrictHostKeyChecking=no选项表示连接时不检查远程主机的公钥,以避免交互式确认。
# 通过这段脚本,可以方便地将本机的SSH公钥复制到多个远程主机上,实现无需手动输入密码的SSH登录。
三、 所有节点安装docker、kubeadm、kubelet和kubectl
kubernetes部署采用yum安装默认版本
kubernetes需要用到容器运行时接口,本例采用docker容器运行时
容器运行时安装参考:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/