今天学习了K8S的概述、控制节点的部署、计算节点的部署。

一、k8s的概述

1.1 kubernetes概述

        Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它支持跨多台主机的容器调度、服务发现、负载均衡、健康检查、滚动更新等核心功能,是云原生应用的核心基础设施。

1.2 k8s的集群架构

        Kubernetes 集群由 控制平面(Control Plane,以前叫Master节点 ,工作节点(Worker Nodes),镜像仓库构成。

  • 控制平面:负责集群的全局控制与调度。
  • 工作节点:运行实际的应用容器(Pod)
  • 像镜仓库:存放私有镜像,为节点提供镜像支持
1.3 本次部署环境规划
主机名 IP 地址 角色 最低配置 说明
harbor 192.168.88.240 私有镜像仓库 2 核 CPU, 4GB 内存 用于存放私有镜像,加速拉取
master 192.168.88.50 控制节点 2 核 CPU, 4GB 内存 运行 kube-apiserver、etcd、scheduler 等组件
node001 192.168.88.51 工作节点 2 核 CPU, 2GB 内存 运行应用 Pod
node002 192.168.88.52 工作节点 2 核 CPU, 2GB 内存 运行应用 Pod
node003 192.168.88.53 工作节点 2 核 CPU, 2GB 内存 运行应用 Pod

说明

  • 生产环境建议控制节点为 3 台实现高可用(HA),当前为学习环境,使用单 master。
  • 所有节点操作系统建议为 RockeyLinux8.6。
  • 所有节点需时间同步、SSH 互通、关闭防火墙或配置规则。

1.3 角色与功能

master节点:提供集群控制,对集群进行全局决策,检测和响应集群事件。master节点上有四个组件:

  • apiserver:
  • schedule
  • controllermanager
  • etcd

node节点:负责为容器提供运行环境,可以水平扩展,运行容器的实际节点。node节点上有三个组件:

  • kubelet
  • kubeproxy
  • docker

镜像仓库:存储镜像,为节点提供镜像支持 。仓库组件: redistry或harbor

二、安装部署控制节点(master)

2.1 前期准备

2.1.1 主机名与网络配置

# 主机名成解析 编辑五台服务器的/etc/hosts文件,添加下面内容
192.168.88.240  harbor
192.168.88.50   master
192.168.88.51   node001
192.168.88.52   node002
192.168.88.53   node003
2.1.2 关闭防火墙与 SELinux
systemctl disable firewalld --now
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
2.1.3 禁用 Swap
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.1.4 加载内核模块与配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo 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

2.2 安装容器运行时(containerd)

推荐使用 containerd 作为容器运行时(Docker 已被弃用)。

yum install -y containerd
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

# 修改配置:使用 systemd 作为 cgroup 驱动
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

systemctl enable containerd --now

2.3 添加 Kubernetes YUM 源(国内优化)

cat <<EOF | sudo tee /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

2.4 安装 kubeadm、kubelet、kubectl

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet  # 注意:先不启动

2.5 预拉取镜像(使用阿里云镜像仓库)

由于国内无法访问 k8s.gcr.io,需从阿里云镜像仓库拉取。

# 1. 保存为 pull-k8s-images.sh
vim pull-k8s-images.sh

KUBE_VERSION=v1.28.0
KUBE_PAUSE_VERSION=3.9
ETCD_VERSION=3.5.9-0
COREDNS_VERSION=v1.10.1

images=(
  kube-apiserver:$KUBE_VERSION
  kube-controller-manager:$KUBE_VERSION
  kube-scheduler:$KUBE_VERSION
  kube-proxy:$KUBE_VERSION
  pause:$KUBE_PAUSE_VERSION
  etcd:$ETCD_VERSION
  coredns:$COREDNS_VERSION
)

for image in ${images[@]}; do
  docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image
  docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image k8s.gcr.io/$image
  docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$image
done




# 2. 添加执行权限
chmod +x pull-k8s-images.sh

# 3. 在每个节点上运行
./pull-k8s-images.sh

✅ 验证:crictl images 查看是否已加载所需镜像。


2.6 初始化控制节点

kubeadm init \
  --apiserver-advertise-address=192.168.88.50 \
  --pod-network-cidr=192.168.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --kubernetes-version=v1.28.0 \
  --ignore-preflight-errors=Swap

📌 关键参数说明

  • --pod-network-cidr:Pod 网络段,需与后续 CNI 插件一致。
  • --service-cidr:Service 虚拟 IP 段。
  • --ignore-preflight-errors=Swap:忽略 Swap 警告(仅测试环境使用)。

2.7 初始化成功后配置 kubeconfig

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.8 验证控制节点状态

kubectl get nodes
# 输出应为:
# NAME     STATUS     ROLES           AGE   VERSION
# master   NotReady   control-plane   2m    v1.28.0

⚠️ 当前状态为 NotReady,因为尚未安装网络插件。


三、安装 Calico 网络插件

3.1 Calico 概述

Calico 是一个高性能的 Kubernetes CNI(容器网络接口)插件,提供 Pod 间通信、网络策略(NetworkPolicy)控制、BGP 路由等功能。

  • 支持 IPIP、VXLAN、BGP 等模式
  • 适用于大规模集群
  • 提供细粒度的网络安全策略

3.2 安装 Calico

# 下载 Calico 配置清单
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O

# 修改 calico.yaml 中的 POD CIDR(确保与 kubeadm init 一致)
sed -i 's?192.168.0.0/16?192.168.0.0/16?g' calico.yaml

# 部署 Calico
kubectl apply -f calico.yaml

✅ 验证:

kubectl get pods -n kube-system | grep calico
kubectl get nodes  # 状态应变为 Ready

四、部署工作节点(计算节点)

4.1 工作节点概述

工作节点(Worker Node)负责运行应用容器,通过 kubelet 与控制平面通信,执行 Pod 调度任务。


4.2 获取 join token

master 节点上生成加入集群的命令:

kubeadm token create --print-join-command

输出示例:

kubeadm join 192.168.88.50:6443 --token abcdef.1234567890abcdef \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

🔐 Token 有效期为 24 小时,过期需重新生成。


4.3 在 node001~003 上执行 join 命令

在每台工作节点上执行以下步骤:

  1. 安装 containerd、kubeadm、kubelet(同 master 步骤 2.2~2.4)
  2. 执行 kubeadm join ... 命令
# 示例(在 node001 上执行)
kubeadm join 192.168.88.50:6443 --token abcdef.1234567890abcdef \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

✅ 节点加入后,kubelet 会自动启动并注册到集群。


4.4 验证节点状态

master 上查看:

kubectl get nodes

预期输出:

NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   10m     v1.28.0
node001   Ready    <none>          2m      v1.28.0
node002   Ready    <none>          1m      v1.28.0
node003   Ready    <none>          30s     v1.28.0

✅ 所有节点状态为 Ready,表示集群部署成功!


五、总结

阶段 关键操作
环境准备 主机名、网络、关闭防火墙、禁用 swap、配置内核参数
控制节点 安装 containerd、kubeadm/kubelet/kubectl、拉取镜像、kubeadm init
网络插件 部署 Calico,启用 Pod 网络通信
工作节点 安装基础组件,执行 kubeadm join 加入集群

下一步建议

  • 部署私有镜像仓库 Harbor(在 192.168.88.240 上)
  • 部署 Dashboard 可视化界面
  • 创建第一个 Deployment 和 Service
  • 学习 Helm、Ingress、ConfigMap、Secret 等核心资源

📌 学习心得:今天完成了 Kubernetes 集群的搭建全过程,从理论到实践,掌握了控制节点与工作节点的部署流程,理解了各组件协作机制,为后续深入学习打下坚实基础!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐