kubeadm部署k8s集群

发布时间 2023-10-21 03:08:16作者: 我的城市没有海

一、系统环境准备

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/