在生产环境时,需要保证内核版本高于5,可以选择升级内核或使用龙蜥 Anolis OS
准备工作
前置配置
-
转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置所需的 sysctl 参数,参数在重新启动后保持不变 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 应用 sysctl 参数而不重新启动 sudo sysctl --system #通过运行以下指令确认 br_netfilter 和 overlay 模块被加载: lsmod | grep br_netfilter lsmod | grep overlay #通过运行以下指令确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1: sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward modprobe br_netfilter #生效 sudo sysctl --system #开启ipvs yum -y install ipvsadm ipset # 临时生效 modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 # 永久生效 cat > /etc/sysconfig/modules/ipvs.modules <<EOF modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF -
关闭防火墙等默认配置
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0
#关闭swap 使用free -m 查看
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
- 配置主机名和host文件映射
# 预备环境
#对于云服务器来说,要注意组内互信
#各个机器设置自己的域名
hostnamectl set-hostname xxxx
echo "127.0.0.1 $(hostname)" >> /etc/hosts
安装组件
- 安装 kubelet、kubeadm、kubectl
阿里云镜像地址
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg <https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg>
EOF
setenforce 0
#卸载旧版本
yum remove -y kubelet kubeadm kubectl
#查看可以安装的版本
yum list kubelet --showduplicates | sort -r
# 安装最新版
yum install -y kubelet kubeadm kubectl
# 安装指定版本
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9
#开机启动
systemctl enable kubelet && systemctl start kubelet
- 安装容器运行时(containerd)
- 安装参考
Install Docker Engine on CentOS | Docker Documentation
💡 如果已经安装了docker环境,则已经有了containerd运行时- 添加和修改配置文件
# 将默认配置文件导入
containerd config default > /etc/containerd/config.toml
来源:配置containerd_小吉猫w的技术博客_51CTO博客
-
**配置
systemdcgroup 驱动搜索SystemdCgroup
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
如果低于1.22版本,也要注意kubelet的驱动
-
重载沙箱(pause)镜像
搜索sandbox_image
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6"
sudo systemctl restart containerd
- 配置国内镜像源
containerd配置国内镜像源及使用私有镜像仓库_containerd 镜像源_o!xiaoxuan的博客-CSDN博客
- 下载镜像
kubeadm config images list --kubernetes-version ${k8s-version}
kubeadm config images pull --image-repository="registry.cn-hangzhou.aliyuncs.com/google_containers" --kubernetes-version=${k8s-version}
启动控制平面
#所有机器添加master域名映射,以下需要修改为自己的
echo "${hostip} cluster-endpoint" >> /etc/hosts
# 注意3个网段均不能重叠,详见https://blog.csdn.net/mayi_xiaochaun/article/details/121402679
kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--apiserver-advertise-address=${hostip} \
--control-plane-endpoint=cluster-endpoint \
--kubernetes-version ${k8s-version} \
--service-cidr=172.168.0.0/16 \
--pod-network-cidr=10.0.0.0/16
k8s coredns显示0/1 Running问题排查_coredns ready 0/1_mayi_xiaochuan的博客-CSDN博客
worker节点加入
配置网络插件
kubectl create -f calico.yaml
设置ipvs
#修改kube-proxy配置
$ kubectl edit cm kube-proxy -n kube-system
# 修改如下
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictARP: false
syncPeriod: 30s
tcpFinTimeout: 0s
tcpTimeout: 0s
udpTimeout: 0s
kind: KubeProxyConfiguration
metricsBindAddress: ""
mode: "ipvs"
重启所有的 kube-proxy pod
$ kubectl delete pod kube-proxy-sf99g -n kube-system