基于 Kubeadm 部署 k8s 集群
环境准备
3台 ecs centos 7.9
安装版本,最新版k8s
参考:https://www.cnblogs.com/bmwhero/p/17911418.html
初始化
3台 服务器执行系统初始化脚本
#!/bin/bash
# 更新系统
sudo yum update -y
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 关闭SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭swap
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
# 网络优化
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
# 设置Kubernetes的yum仓库
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
# 设置docker的yum仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 移除以前安装的docker-ce
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 安装 containerd
sudo yum install -y containerd.io
sudo systemctl start containerd
sudo systemctl enable containerd
# 配置容器运行时 cgroup 驱动
sudo containerd config default | sudo tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = .*/SystemdCgroup = true/g' /etc/containerd/config.toml
sed -i 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/pause:3.9/g' /etc/containerd/config.toml
sudo systemctl restart containerd
# 安装kubelet、kubeadm和kubectl
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启动kubelet服务
sudo systemctl enable --now kubelet
echo "初始化完成。现在可以在主节点上执行 'kubeadm init' 来初始化Kubernetes集群了。"
master节点初始化
kubeadm init \
--kubernetes-version v1.29.0 \
--apiserver-advertise-address=172.16.25.246 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
拷贝kubeconfig
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
拷贝运行命令结尾时输出添加节点指令
kubeadm join 172.16.26.63:6443 --token 8dvw69.o5bz4qmr8g8aua58 \
--discovery-token-ca-cert-hash sha256:7d63effe65f741b4ad3353327b0bd72689f9ce17925007f0b87fb99f8dc12bba
安装网络插件
下载:
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
安装
kubectl apply -f kube-flannel.yml
加入work 和 master 节点
#用于生成token 和节点加入命令
kubeadm token create --print-join-command
kubeadm join 172.16.26.63:6443 --token 8dvw69.o5bz4qmr8g8aua58 \
--discovery-token-ca-cert-hash sha256:7d63effe65f741b4ad3353327b0bd72689f9ce17925007f0b87fb99f8dc12bba
# master节点加入,和worker节点的加入类似,只是需要在命令中增加--control-plane参数,表示该节点是作为master加入的