K8S环境搭建
步骤一:系统层配置
hostname修改
-
安装步骤中,NetWork开启,设置主机名
-
命令行修改
- hostnamectl set-hostname k8sMaster
- hostnamectl set-hostname k8sNodeOne
- hostnamectl set-hostname k8sNodeTwo
配置静态ip
StepOne:网段网关(查看网络信息)
虚拟机处于哪个网段,以及网关是多少。
- 打开 VMware Workstation。
- 点击顶部菜单栏的 “编辑” (Edit) → “虚拟网络编辑器” (Virtual Network Editor)。
- 选择 VMnet8(如果你用的是 NAT 模式,这是最常用的模式)或 VMnet0(桥接模式)。
- 如果是 NAT 模式(推荐): 点击 “NAT 设置” (NAT Settings)。
- 记下以下信息(非常重要):
- 子网 IP (Subnet IP): 例如 192.168.136.0
- 子网掩码 (Subnet Mask): 例如 255.255.255.0
- 网关 IP (Gateway IP): 例如 192.168.136.2 (注意:VMware NAT 模式下网关通常以 .2 结尾,而不是 .1)
StepTwo:在虚拟机内部设置固定 IP
情况 A:CentOS 7 / RHEL
CentOS 7 使用 ifcfg 文件配置网络。
-
进入终端,切换到 root 用户。
-
找到网卡配置文件:
cd /etc/sysconfig/network-scripts/ ls # 找到类似 ifcfg-ens33 或 ifcfg-eth0 的文件 -
编辑该文件(例如 vi ifcfg-ens33),修改或添加以下内容:
# 将 BOOTPROTO 改为 static BOOTPROTO="static" # 确保开机启动 ONBOOT="yes" # 添加以下几行(根据第一步记下的信息填写) # IPADDR 是你想固定的 IP,必须在子网范围内,例如 192.168.136.100 IPADDR=192.168.136.100 # 子网掩码 NETMASK=255.255.255.0 # 网关 (VMware NAT 下通常是 .2) GATEWAY=192.168.136.2 # DNS (可以用网关,也可以用谷歌 8.8.8.8) DNS1=192.168.136.2 DNS2=8.8.8.8 -
保存并退出(:wq)。
-
重启网络服务:
systemctl restart network
hosts修改
- cat <
>/etc/hosts 192.168.136.134 k8sMaster 192.168.136.135 k8sNodeOne 192.168.136.136 k8sNodeTwo EOF - 依次三台主机执行
Gemini3Pro提示词
-
现在我要搭建kubernetes,已知条件如下:
1,已经准备好三台centos主机
2,三台主机无国外互联网环境
3,已经做好的配置 hostname修改 安装步骤中,NetWork开启,设置主机名 命令行修改 hostnamectl set-hostname k8sMaster hostnamectl set-hostname k8sNodeOne hostnamectl set-hostname k8sNodeTwo
hosts修改依次三台主机执行 cat <
>/etc/hosts 192.168.136.137 k8sMaster 192.168.136.139 k8sNodeOne 192.168.136.138 k8sNodeTwo EOF 现在教我从零开始搭建kubernetes
步骤二:基建整备 (OS Tuning)
1. 关闭防火墙与SELinux
# 停止并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
# 禁用SELinux (临时 + 永久)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
2. 关闭Swap (关键)
# 临时关闭
swapoff -a
# 永久关闭 (注释掉fstab中的swap行)
sed -i '/swap/s/^/#/' /etc/fstab
3. 内核参数调优与模块加载
# 加载必要模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 设置内核参数
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 --system
步骤三:安装容器
安装 containerd。比Docker更轻量,更符合K8s的CRI标准。
1. 安装 containerd
# 重装官方镜像源
sudo rm -rf /etc/yum.repos.d/*
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache
# 安装yum工具
yum install -y yum-utils
# 添加Docker官方源 (containerd在Docker源里,虽然我们不用Docker引擎)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装containerd
yum install -y containerd.io
# 生成默认配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
2. 修改Cgroup驱动 (架构师的特别提醒) 这是新手最容易翻车的地方。Systemd是CentOS的初始化系统,K8s希望Cgroup驱动也用Systemd,而不是Cgroupfs,否则会导致资源管理冲突。
# 使用sed命令将 SystemdCgroup = false 改为 true
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 启动 containerd 并设置开机自启
systemctl enable --now containerd
步骤四:安装 Kubernetes 组件
现在安装 K8s 的“三驾马车”:
- kubelet: 运行在所有节点上的“节点代理”。
- kubeadm: 集群引导工具。
- kubectl: 命令行指挥棒。
1. 添加 Kubernetes 官方源 (v1.28+) 注意:Google的源近期有变动,这里使用新的社区源 pkgs.k8s.io。
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
EOF
2. 安装工具
# 安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启动 kubelet (现在它会处于crash loop状态,直到kubeadm init,这是正常的)
systemctl enable --now kubelet
步骤五:控制平面初始化 (Control Plane Setup)
⚠️ 注意:仅在 k8sMaster (192.168.136.137) 上执行
我们要初始化集群的大脑。这里我选择 Calico 作为网络插件,因为它支持BGP协议,且网络策略(Network Policy)功能强大,符合资深架构师的品味。为了配合Calico,我们需要指定Pod网段。
# 在 Master 节点执行
kubeadm init \
--apiserver-advertise-address=192.168.136.137 \
--image-repository registry.k8s.io \
--kubernetes-version v1.29.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=192.168.0.0/16
(注:如果你的网络环境拉取 registry.k8s.io 较慢,可以考虑换成阿里云镜像源,但你说了要官方资源,所以我保留了官方源)
执行成功后,你会看到一段类似 kubeadm join … 的输出。请务必复制这段命令,保存好!这是Worker节点的“入场券”。
配置 kubectl 权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
步骤六:部署网络插件 (CNI)
⚠️ 注意:仅在 k8sMaster 上执行
没有网络插件,CoreDNS起不来,Node状态会一直是 NotReady。我们安装 Calico。
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml
(稍等几分钟,等待Calico的Pod变绿)
步骤七:节点加入 (Scale Out)
⚠️ 注意:在 k8sNodeOne 和 k8sNodeTwo 上执行
使用你在第四阶段保存的那个 kubeadm join 命令。如果你弄丢了,可以在 Master 上运行 kubeadm token create —print-join-command 重新获取。
命令长这样(不要直接复制我的,用你生成的):
kubeadm join 192.168.136.137:6443 --token <你的token> \
--discovery-token-ca-cert-hash sha256:<你的hash>
步骤八:验收 (Verification)
回到 Master 节点,检验我们的成果。
kubectl get nodes
如果一切顺利,你应该看到类似下面的输出:
NAME STATUS ROLES AGE VERSION
k8sMaster Ready control-plane 5m v1.29.0
k8sNodeOne Ready <none> 2m v1.29.0
k8sNodeTwo Ready <none> 2m v1.29.0
架构师总结: 你现在拥有了一个基于 containerd 运行时、Calico 网络的标准 Kubernetes 集群。
- 可扩展性:只要网络互通,随时可以通过 kubeadm join 增加算力。
- 规范性:使用了 Systemd Cgroup 驱动,避免了不稳定的资源争抢。