前提条件
硬件条件:2核4G,再小就无法安装
时间同步:ntp
dnf -y install chrony
systemctl enable chronyd --now开启ipv4转发并且开启网桥过滤:
modprobe br_netfilter
modprobe overlay
cat <<EOF | tee /etc/sysctl.d/k8s.conf > /dev/null
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
echo "br_netfilter" | tee /etc/modules-load.d/k8s.conf
sysctl --system关闭swap:
sudo swapoff -a #立刻关闭swap分区
sudo sed -i 's/.*swap.*/#&/g' /etc/fstab #在fstab文件中关闭防止重启后开启添加yum源
# 安装 wget vim net-tools telnet epel-release
dnf install -y wget vim net-tools telnet epel-release tree
# 如果不是阿里源,再执行以下命令,从阿里云下载 Docker DNF 源配置文件到系统指定目录
# ce 表示 Community Edition,社区版
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 添加 k8s 源
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes-tencent]
name=Kubernetes Tencent Mirror
baseurl=https://mirrors.cloud.tencent.com/kubernetes_new/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=0
[kubernetes-aliyun]
name=Kubernetes Aliyun Mirror
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开始安装
首先先在所有节点上安装containerd
sudo dnf install -y containerd.io配置containerd
# 生成配置文件
containerd config default > /etc/containerd/config.toml
# 修改 SystemdCgroup 参数为 true,表示 containerd 使用 systemd 作为 cgroup 驱动程序。
sed -ri 's#SystemdCgroup = false#SystemdCgroup = true#' /etc/containerd/config.toml
# 修改sandbox沙箱镜像,registry.k8s.io 在某些网络环境下可能访问不稳定或受到限制。
# 而阿里云的镜像仓库 registry.aliyuncs.com 在国内网络环境下通常具有更好的访问速度和稳定性。
# 版本可以自己调整
sed -ri 's#registry.k8s.io\/pause:3.8#registry.aliyuncs.com\/google_containers\/pause:3.10.1#' /etc/containerd/config.toml
# 新增镜像源配置目录
sed -i 's/config_path = ""/config_path = "\/etc\/containerd\/certs.d\/"/g' /etc/containerd/config.toml关联镜像目录
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io" # 源镜像地址#下面的地址失效可以找一找
[host."https://docker.m.daocloud.io"] # 道客-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://dockerproxy.com"] # 镜像加速地址
capabilities = ["pull", "resolve"]
[host."https://docker.mirrors.sjtug.sjtu.edu.cn"] # 上海交大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.mirrors.ustc.edu.cn"] # 中科大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.nju.edu.cn"] # 南京大学-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://registry.docker-cn.com"] # 官方中国镜像-镜像加速地址
capabilities = ["pull","resolve","push"]
[host."https://tc4nbd2x6gieid.xuanyuan.run"] # 轩辕镜像-镜像加速地址
capabilities = ["pull","resolve","push"]
EOF
# 重启生效
systemctl enable containerd
systemctl restart containerd
# 验证测试
systemctl status containerd在节点中安装相关组件
sudo dnf install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet初始化master节点
kubeadm init \
--apiserver-advertise-address=192.168.88.101 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--control-plane-endpoint=master
# 这里的地址,改成自己master节点的IP地址
# 这里就这么写,是对应上后面flannel网络插件的默认值
# 这里的主机名,就是master节点的主机名如果说初始化失败可以使用
sudo kubeadm reset -f来重置环境
如果还是超时可以先在命名空间k8s.io中下载下来镜像然后改tag,(其他节点可能出现这种情况,所以可以使用相同方法处理)
sudo ctr -n k8s.io images pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1
sudo ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1 registry.k8s.io/pause:3.10.1
sudo crictl images | grep pause最后在其他所有节点输入最后生成的token即可加入集群,如果master节点找不到可以添加hosts,或者直接换成IP
sudo kubeadm join master:6443 --token 0x0mnj.t5xbmpooayuex5kx \
--discovery-token-ca-cert-hash sha256:0640f0b85320bca8eb60d6a06b0a9561e426658311a46ab9a0901c3585341220master重置token
sudo kubeadm token create --print-join-command在master上执行,防止端口被认为不安全导致kubectl命令不能执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config因为现在没有安装网络插件,所以如果直接kubelet get node 查看应该是有NotReady,安装网络插件flannel或者Calico后可以解决。
flannel插件安装
# 方法一:使用 apply 命令,会创建相应的 namespace 和 pod
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
# 方法二:如果 apply 一直提示拉取不下来,可以换成先拉取,再 apply
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
kubectl apply -f kube-flannel.yml
查看flannel容器是否启动
kubectl get pod -A # -A 表示 All如果发现长时间无法运行可以尝试
grep -n "image:" kube-flannel.yml查看这个需要什么镜像,将镜像下载下来然后就可以了。
最后检查flannel是否都正常启动