准备工作与环境规划
目标与节点规划
在 Linux 下搭建 K8s 集群的第一步是明确目标与节点分工,确保高可用与可扩展的需求能够落地。本文将围绕 Linux下K8s集群搭建全流程详解与实操指南展开,帮助读者从零散任务走向完整流程。
通常需要至少两台物理或虚拟主机作为集群的一部分,其中一台充当控制平面,其他节点作为工作节点。网络互通、时间同步、磁盘性能等因素直接影响集群稳定性,请在上线前完成基线检查。
系统与硬件要求
推荐的 Linux 发行版包括 Ubuntu 22.04 LTS 或 Debian 11/12,配合较新的内核版本以获得更好的容器支持与网络特性。为确保性能,单节点至少需要 2–4 核 CPU、8–16 GB RAM,对企业级应用可扩展至更高配置。
硬件层面应确保SSD 存储、稳定的网络带宽与低延迟、可预测的 I/O 性能,另外要确保时钟同步(chrony 或 ntp)以避免证书和调度相关问题。
依赖安装与系统优化
核心依赖与环境准备
Kubernetes 集群需要一个容器运行时和一组关键组件,因此需要在所有节点安装 containerd、kubeadm、kubelet、kubectl。同时开启必要的内核参数以确保网络插件可用。
系统层面的优化包括:禁用 swap、启用 netfilter 桥接转发,以及开启 IP 转发等。只有在所有节点达到一致的配置,集群才具备稳定的调度能力。
禁用 Swap 与网络参数配置
Kubernetes 要求主机在节点上禁用 swap,以确保资源调度的确定性。执行下列操作:
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
同时设置网络相关内核参数,以支持容器网络的高效转发:net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1 等。
sudo modprobe br_netfilter
sudo sysctl -w net.bridge.bridge-nf-call-iptables=1
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.d/k8s.conf
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/k8s.conf
sudo sysctl --system
为确保时间一致性,请在所有节点启用 chrony 或 ntp,同步时间以避免证书和调度问题。
K8s 安装与集群初始化
Containerd 与 Kubernetes 工具链安装
在所有节点上按如下步骤安装 containerd、kubeadm、kubelet、kubectl,并锁定版本以保持集群稳定性。此处以 Debian/Ubuntu 为例,实际环境可按发行版调整命令。
# 安装必要工具与证书
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl# Containerd 安装与配置
sudo apt-get install -y containerd.io
sudo mkdir -p /etc/containerd
sudo containerd config default > /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd# Kubernetes apt 源
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 安装 kubeadm、kubelet、kubectl
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
初始化主节点
在第一台控制平面节点执行初始化操作,指定 Pod 网段以便后续网络插件对接。注意 Pod CIDR 的选择应与所选网络插件一致。
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
初始化完成后,配置本地 kubectl 的上下文,以便在控制平面执行管理操作。输出中包含将要执行的 join 命令,用于后续工作节点的加入。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm token create --print-join-command
网络插件部署与工作节点接入
网络插件与节点加入
Kubernetes 集群需要一个网络插件来实现 Pod 间通信和网络策略。常用选项包括 Calico、Flannel。下面以 Calico 为例完成网络对接。
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25/manifests/calico.yaml
在每个工作节点上执行主节点输出的 join 命令,使节点正式加入集群。成功后,可以通过 kubectl get nodes 验证节点状态是否为 Ready。
kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
集群验证与应用部署
健康自检与示例部署
通过以下命令对集群状态进行自检,确认节点就绪、核心组件运行正常,以及网络插件工作正常。节点就绪状态和 核心组件就绪是评估集群健康的关键指标。
kubectl get nodes
kubectl get pods -A
kubectl -n kube-system get pods
为验证端到端能力,可以部署一个简单的应用(如 Nginx)来测试负载能力与流量转发。以下为一个基础 Deployment 的示例:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploy
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.23ports:- containerPort: 80
kubectl apply -f nginx-deploy.yaml
kubectl expose deployment nginx-deploy --port=80 --type=NodePort
存储与后续扩展
本地存储与持久化配置
在开发与测试场景中,可以使用本地存储来实现简单的持久化能力。Local Path Provisioner 是一个常见的本地 PV 方案,便于快速落地。
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-provisioner.yaml
通过 PersistentVolumeClaim 绑定本地 PV,以实现应用的持久化需求:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: test-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: local-path


