当前位置: 首页 > news >正文

两个节点部署Kubernetes集群完整指南(个人测试环境)

两个节点部署Kubernetes集群完整指南(个人测试环境)

一、核心结论

对于个人测试环境,两个节点(1个控制平面节点+1个工作节点)的Kubernetes集群部署需遵循以下核心原则:
• 硬件配置:控制平面节点建议4核CPU、8GB内存、100GB SSD;工作节点建议4核CPU、16GB内存、200GB SSD(均为推荐配置,最低可降至2核4G,但可能影响性能)。

• 操作系统:优先选择Ubuntu 22.04 LTS(Kubernetes官方推荐,兼容性好,社区支持完善);若偏好CentOS生态,可选择CentOS Stream 9(需自行处理维护问题)。

• 部署工具:使用kubeadm(Kubernetes官方工具,流程标准化,适合快速搭建)。

• 网络插件:推荐Calico(支持网络策略,性能稳定)或Flannel(配置简单,适合新手)。

二、详细部署步骤

  1. 环境准备(所有节点执行)

目标:统一所有节点的系统配置,确保网络互通,禁用不必要的服务。

1.1 操作系统初始化

• 设置主机名(每台节点唯一):

控制平面节点(例如)

hostnamectl set-hostname k8s-master

工作节点(例如)

hostnamectl set-hostname k8s-worker

• 配置/etc/hosts(解析所有节点IP,避免DNS依赖):

在两台节点的/etc/hosts中添加:
192.168.1.10 k8s-master # 控制平面节点IP
192.168.1.11 k8s-worker # 工作节点IP

1.2 关闭不必要服务

• 关闭防火墙(Kubernetes需要节点间自由通信):

• Ubuntu:systemctl stop ufw && systemctl disable ufw

• CentOS:systemctl stop firewalld && systemctl disable firewalld

• 关闭SELinux(避免权限问题):

• Ubuntu:默认无SELinux,无需操作。

• CentOS:setenforce 0 && sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

• 禁用Swap(Kubernetes强制要求,避免性能波动):
swapoff -a # 临时关闭
sed -i '/swap/s/^/#/' /etc/fstab # 永久关闭(注释/etc/fstab中的swap行)

1.3 配置内核参数(网络依赖)

• 加载overlay(容器存储)和br_netfilter(桥接网络)模块:
modprobe overlay
modprobe br_netfilter

• 配置内核网络参数(允许iptables检查桥接流量):

创建/etc/sysctl.d/k8s.conf,添加:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1

• 生效配置:sysctl --system

  1. 安装容器运行时(所有节点执行)

目标:安装Kubernetes支持的容器运行时(此处以containerd为例,官方推荐)。

• 安装containerd:

• Ubuntu:
apt update && apt install -y containerd

• CentOS:
yum install -y containerd

• 配置containerd(使用systemd作为Cgroup驱动,与Kubernetes兼容):

生成默认配置:containerd config default > /etc/containerd/config.toml
修改/etc/containerd/config.toml,将SystemdCgroup设置为true:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true

• 重启containerd:systemctl restart containerd && systemctl enable containerd

  1. 安装Kubernetes核心组件(所有节点执行)

目标:安装kubeadm(集群初始化工具)、kubelet(节点代理)、kubectl(命令行工具)。

• 添加Kubernetes仓库:

• Ubuntu:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list

• CentOS:

创建/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

• 安装组件(指定版本,避免自动升级):

• Ubuntu:
apt update && apt install -y kubelet=1.29.10-00 kubeadm=1.29.10-00 kubectl=1.29.10-00
apt-mark hold kubelet kubeadm kubectl # 锁定版本,防止意外升级

• CentOS:
yum install -y kubelet-1.29.10 kubeadm-1.29.10 kubectl-1.29.10
systemctl enable kubelet && systemctl start kubelet # 启动kubelet

  1. 初始化控制平面节点(k8s-master执行)

目标:初始化Kubernetes控制平面(API Server、Controller Manager、Scheduler等组件)。

• 执行kubeadm init:

替换<MASTER_IP>为控制平面节点的实际IP(例如192.168.1.10),--pod-network-cidr指定Pod网络范围(需与后续网络插件一致):
kubeadm init
--kubernetes-version v1.29.10
--pod-network-cidr=10.244.0.0/16
--service-cidr=10.96.0.0/12
--apiserver-advertise-address=<MASTER_IP>

输出说明:
初始化成功后,会输出kubeadm join命令(用于工作节点加入集群),需保存该命令(例如:kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:xxxxxx)。

• 配置kubectl(控制平面节点):

复制配置文件到用户目录,设置权限:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u)😒(id -g) $HOME/.kube/config

  1. 部署网络插件(控制平面节点执行)

目标:安装网络插件,实现Pod间通信(以Calico为例)。

• 安装Calico:

执行以下命令(会自动下载并应用Calico的YAML配置):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

验证:等待几分钟后,执行kubectl get pods -n kube-system,确保calico-node Pod处于Running状态。

  1. 工作节点加入集群(k8s-worker执行)

目标:将工作节点加入已初始化的Kubernetes集群。

• 执行kubeadm join:

使用控制平面节点输出的kubeadm join命令(例如):
kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:xxxxxx

验证:在控制平面节点执行kubectl get nodes,若工作节点状态为Ready,则表示加入成功。

  1. 验证集群状态(控制平面节点执行)

目标:确认集群所有组件正常运行。

• 检查节点状态:
kubectl get nodes

输出示例(两节点均Ready):

NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 10m v1.29.10
k8s-worker Ready 5m v1.29.10

• 检查Pod状态:
kubectl get pods -n kube-system

输出应包含calico-node(网络插件)、coredns(DNS服务)等Pod,且状态均为Running。

三、优化配置(可选)

目标:提升集群性能和稳定性(适合长期使用)。

• 资源预留(避免控制平面组件被Pod抢占资源):

修改/var/lib/kubelet/config.yaml,添加:
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
reservedSystemCPUs: "0-1" # 保留前2个CPU核心给系统和控制平面组件
systemReserved:
cpu: "500m"
memory: "512Mi"

重启kubelet:systemctl restart kubelet。

• 持久化存储(使用本地存储):

创建工作节点本地目录(例如/mnt/data),创建PersistentVolume(PV):
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 100Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- k8s-worker # 工作节点主机名

应用配置:kubectl apply -f pv.yaml。

四、常见问题排查

• 节点状态NotReady:

• 检查网络插件是否正常运行(kubectl get pods -n kube-system)。

• 检查kubelet状态(systemctl status kubelet),查看日志(journalctl -xeu kubelet)。

• Pod无法调度:

• 检查节点资源(kubectl describe node k8s-worker),确认CPU/内存是否充足。

• 检查污点(kubectl describe node k8s-master | grep Taints),若有NoSchedule污点,需移除(kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule-)。

五、总结

通过以上步骤,你可以在个人测试环境中快速搭建一个双节点Kubernetes集群。该集群具备基本的容器编排能力,可用于测试微服务、CI/CD流水线等场景。若需扩展集群,只需重复工作节点加入步骤即可。

注意:个人测试环境无需追求高可用(如多控制平面节点),但生产环境需考虑3个控制平面节点+负载均衡的高可用架构。

http://www.jsqmd.com/news/350130/

相关文章:

  • 盘点无锡可靠的不锈钢抛光厂,金属内腔抛光厂推荐有哪些 - 工业设备
  • 一文速通 OceanBase 物化视图能力
  • 分析青岛有名的龙膜授权企业,靠谱的推荐有哪些 - 工业品牌热点
  • 30.Android系统源码-libYUV实战 - YUV格式转换与SIMD优化核心技术
  • 变形监测必看!2026年单北斗GNSS变形监测系统排行榜,助力精准监测与安全管理
  • 导师又让重写?10个AI论文网站测评:本科生毕业论文写作神器推荐
  • 导师又让重写?8个AI论文网站深度测评,自考毕业论文写作必备!
  • 损耗直降 40%+:RFID 资产管理系统,企业降本增效的新解法
  • 靠谱的广告策划公司有哪些,推荐广告策划品牌企业 - 工业推荐榜
  • Java方法回顾及加深
  • 流延机费用怎么算,流延机制造厂哪家更值得选? - 工业品网
  • python接口自动化-全局常量如何在yaml文件中作为入参使用
  • 别再瞎找了!8个降AIGC平台测评:专科生降AI率必备神器
  • 2026更新版!10个AI论文工具测评:本科生毕业论文写作与科研写作必备指南
  • 多波束前视声呐采购攻略:高稳定性品牌与现货供应商优选 - 品牌推荐大师1
  • 2026年食品级软管厂家权威推荐:食品级PU/钢丝/透明软管源头厂家精选 - 品牌推荐官
  • afa
  • PC-自定义windows文件图标与默认打开方式
  • 【开源项目分享】跨平台+批量终端管理!自研视频编解码算法的国产远程桌面控制神器:JWRC发布1.8.2版本,用2ms延迟重新定义效率
  • 实用指南:基于java的SpringBoot/SSM+Vue+uniapp的出行服务系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 2026年氨水厂家权威推荐:电子级/食品级/化工用/脱硫氨水源头厂家精选 - 品牌推荐官
  • 2026天津短视频运营公司权威推荐,智能营销中台与精准获客实力解读 - 品牌鉴赏师
  • 【科技补全76】新概念英语点读工具NCE-Flow、在线材料管理器copyparty 部署指北
  • 2026航空插头厂家推荐,连接器兼容性与抗干扰能力深度测评 - 品牌鉴赏师
  • 2026年2月长沙数字营销/GEO优化/AI搜索/公司综合实力五强榜单 - 2026年企业推荐榜
  • 2026春季男士通勤裤休闲裤行业深度观察,哪个值得买?解决通勤商务出差多场景痛点 - 行业深度观察
  • 2026年广告策划公司价格大比拼,广告策划公司推荐 - 工业推荐榜
  • 读《那朵花》有感
  • 长沙毛坯房装饰公司哪家好,名匠装饰实力出众 - myqiye
  • AI 论文周报丨AI Agent最新进展,PaperBanana/Lumine/Insight Agents……技术全景解读