02 集群环境搭建
本次教程需要 3 台 CentOS 7.9 操作系统的服务器。
2.1 配置免密钥登录
在本地主机上操作。
实现免密钥登录集群服务器,后面分发证书和配置文件到集群服务器会很方便。
具体操作过程,略......
2.2 配置主机名解析
集群服务器之间实现通过主机名进行通信。
分别在 3 台服务器上操作。
本地主机也建议做一下,后续分发文件也可以用主机名。
cat >> /etc/hosts <<EOF
192.168.3.201 k8s-master-01
192.168.3.202 k8s-master-02
192.168.3.203 k8s-master-03
EOF
2.3 修改服务器主机名
修改服务器的主机名,3 台服务器都要修改。
分别在 3 台服务器上操作。
# echo "<主机名>" > /etc/hostname
echo "k8s-master-01" > /etc/hostname
echo "k8s-master-02" > /etc/hostname
echo "k8s-master-03" > /etc/hostname
2.4 服务器环境初始化
从 k8s-deploy 获取脚本,然后将脚本分发到集群所有服务器上。
在本地主机上操作。
https://github.com/pjgmow/k8s-deploy 提供了环境初始化的脚本,以及集群需要用到的服务配置文件、服务启动管理文件、证书签名请求(CSR)文件等等,这些文件可以直接用,也可以根据需求进行修改。
mkdir -pv /data
git clone https://github.com/pjgmow/k8s-deploy
cd /data/k8s-deploy/bash
#K8S_HOST=(k8s-master-01 k8s-master-02 k8s-master-03)
#for h in ${K8S_HOST[@]};do scp system-init.sh root@$h:/root/;done
scp system-init.sh root@k8s-master-01:/root/
scp system-init.sh root@k8s-master-02:/root/
scp system-init.sh root@k8s-master-03:/root/
脚本分发到 3 台服务器之后,分别登录 3 台服务器执行脚本,执行完成后检查看下是否有报错,同时创建集群所需要的目录,最后检查没问题了就重启一下服务器。
/bin/bash /root/system-init.sh
mkdir -pv /etc/kubernetes/{tls,conf,kubeconfig}
mkdir -pv /var/lib/kube-proxy
mkdir -pv /var/lib/etcd
mkdir -pv ~/.kube
mkdir -pv /etc/containerd
system-init.sh
脚本内容如下。
#!/bin/bash
# CentOS 7.9
# 配置时间同步服务
echo "###############"
yum install -y chrony
systemctl enable chronyd && systemctl restart chronyd
systemctl status chronyd
echo "###############"
# 关闭防火墙
echo "###############"
systemctl disable firewalld && systemctl stop firewalld
systemctl status firewalld
echo "###############"
# 关闭selinux安全服务
echo "###############"
sed -i "s@^\(SELINUX\)=.*@\1=disabled@" /etc/selinux/config && setenforce 0
grep "^SELINUX=" /etc/selinux/config
echo "###############"
# 关闭swap分区
echo "###############"
swapoff -a && sed -i '/swap/ s@^\(.*\)@\#\1@g' /etc/fstab
egrep -v "^#|^$" /etc/fstab
echo "###############"
# 配置contrainerd容器运行时
echo "###############"
cat <<EOF | tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
echo "###############"
# 启用ipvs
echo "###############"
# CentOS 7.9 默认内核版本是3.10
# 内核版本4.18以下使用nf_conntrack_ipv4
# 内核版本4.18以上使用nf_conntrack
yum install -y ipset ipvsadm
cat <<EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
nf_conntrack_ipv4
EOF
echo "###############"
# 配置limit参数
echo "###############"
cat <<EOF | tee /etc/security/limits.d/20-nproc.conf
* soft nproc 65535
root soft nproc unlimited
* hard nproc 65535
root hard nproc unlimited
* soft nofile 65535
* hard nofile 65535
EOF
cat <<EOF | tee /etc/systemd/system.conf
[Manager]
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
EOF
cat <<EOF | tee /etc/systemd/user.conf
[Manager]
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
EOF
echo "###############"
# 配置kernel参数
echo "###############"
cat <<EOF | tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
echo "###############"