1、将 SELinux 设置为 permissive 模式:
以下指令适用于 Kubernetes 1.28.2。
##关闭防火墙
systemctl stop firewalld
##禁止防火墙开机启动
systemctl disable firewalld
##永久关闭selinux 注:重启机器后,selinux配置才能永久生效
sed -i 's/enforcing/disabled/' /etc/selinux/config
##临时关闭selinux 执行getenforce 显示Disabled说明selinux已经关闭
setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
##永久关闭交换分区swap 注:重启机器后,才能永久生效
sed -ri 's/.*swap.*/#&/' /etc/fstab
##临时关闭交换分区swap
swapoff -a
安装ipset和ipvsadm
dummy0网卡和kube-ipvs0网卡:在安装k8s集群时,启用了ipvs的话,就会有这两个网卡。(将service的IP绑定在kube-ipvs0网卡上)
yum install -y ipvsadm ipset sysstat conntrack libseccomp
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT ipip "
for kernel_module in \${ipvs_modules}; do
/sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/modprobe \${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
sh /etc/sysconfig/modules/ipvs.modules
lsmod | grep ip_vs
2、容器进行时
说明: 自 1.24 版起,Dockershim 已从 Kubernetes 项目中移除。
转发 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
下载安装containerd
github地址:https://github.com/containerd/containerd/blob/main/docs/getting-started.md
下载后解压:
tar -xzvf containerd-1.7.7-linux-amd64.tar.gz -C /usr/local
解压后可直接运行命令查看containerd版本:
containerd --version
配置containerd
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i "s#registry.k8s.io/pause:3.8#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9#g" /etc/containerd/config.toml
配置镜像加速
vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://cekcu3pt.mirror.aliyuncs.com"]
配置cgroup
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
等价于:
vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
下载单元文件,使用systemd启动containerd
wget -P /etc/systemd/system https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
systemctl daemon-reload
systemctl enable --now containerd
安装runc
去 https://github.com/opencontainers/runc/releases 下载libseccomp-2.5.4.tar.gz,如果之前yum安装libseccomp成功,则直接安装runc
install -m 755 runc.amd64 /usr/local/sbin/runc
运行runc命令不报错就没问题
3、添加 Kubernetes 的 yum 仓库。在仓库定义中的 exclude 参数确保了与 Kubernetes 相关的软件包在运行 yum update 时不会升级,因为升级 Kubernetes 需要遵循特定的过程。
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
4、安装 kubelet、kubeadm 和 kubectl,并启用 kubelet 以确保它在启动时自动启动:
yum install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2 --disableexcludes=kubernetes
systemctl enable --now kubelet
配置crictl:
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 5
image-endpoint: unix:///var/run/containerd/containerd.sock
EOF
镜像下载/导入
1.列出需要使用的镜像列表
kubeadm config images list
2.拉取镜像
kubeadm config images pull \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2
–image-repository: 从哪个地方下载镜像(默认"k8s.gcr.io",但k8s.gcr.io国内无法访问);
–kubernetes-version: 指定kubernetes集群的镜像版本;
3.初始化
执行ifconfig ,获取eth0的ip地址,例如:172.17.50.30
echo "172.17.50.30 a01" >> /etc/hosts
kubeadm init \
--apiserver-advertise-address=172.17.50.30 \
--control-plane-endpoint=a01 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
执行结果中出现:
Your Kubernetes control-plane has initialized successfully!
按照 安装结果 的提示配置
安装网络插件- calico
文档地址 :https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
执行文档中的install中的第一个命令
然后获取命名空间
kubectl get ns
kubectl get pods -n tigera-operator
下载第二个命令中的yaml文件
将里面的cidr改成与kubeadm init时–pod-network-cidr参数一样的值
然后执行:
kubectl create -f custom-resources.yaml
kubectl get ns
kubectl get pods -n calico-system