Linux怎么加入Kubernetes集群_Linux下Kubeadm初始化与节点部署【教程】
发布时间 - 2025-12-27 00:00:00 点击率:次需严格遵循网络配置、组件版本对齐、证书信任及权限校验等环节:一、准备Linux主机环境;二、安装containerd;三、安装同版本kubeadm/kubelet/kubectl;四、初始化控制平面;五、部署CNI插件;六、加入工作节点;七、验证集群功能。
如果您希望将一台Linux主机加入已有的Kubernetes集群,或使用kubeadm在Linux系统上完成控制平面初始化与工作节点部署,则需严格遵循网络配置、组件版本对齐、证书信任及权限校验等关键环节。以下是具体操作步骤:
一、准备Linux主机环境
确保所有节点运行兼容的Linux发行版(如Ubuntu 20.04+/CentOS 7.6+/Rocky Linux 8.5+),内核版本不低于4.18,且已禁用swap并配置cgroup驱动为systemd。该步骤是kubeadm正常运行的前提条件,缺失任一要求将导致kubelet启动失败或节点注册中断。
1、执行sudo swapoff -a并注释/etc/fstab中swap行,永久禁用交换分区。
2、在/etc/default/grub中确认GRUB_CMDLINE_LINUX包含cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1,然后运行sudo update-grub && sudo reboot。
3、创建/etc/docker/daemon.json,写入{"exec-opts": ["native.cgroupdriver=systemd"]},重启docker服务。
4、执行sudo sysctl net.bridge.bridge-nf-c并写入
all-iptables=1/etc/sysctl.d/k8s.conf以持久化。
二、安装容器运行时(Container Runtime)
kubeadm自v1.24起不再内置Docker适配,必须显式配置符合CRI标准的运行时,如containerd。该步骤决定Pod能否被正确拉取镜像、启动和生命周期管理。
1、安装containerd:在Ubuntu上执行sudo apt-get install -y containerd;在RHEL系执行sudo yum install -y containerd。
2、生成默认配置:sudo containerd config default | sudo tee /etc/containerd/config.toml。
3、编辑/etc/containerd/config.toml,将SystemdCgroup = false改为SystemdCgroup = true。
4、重启服务:sudo systemctl restart containerd && sudo systemctl enable containerd。
三、安装kubeadm、kubelet与kubectl
三个组件必须使用**完全一致的版本号**(例如1.28.2),版本错位将导致join失败或control plane不可用。kubeadm负责集群引导,kubelet是节点代理,kubectl为命令行客户端。
1、添加Kubernetes APT/YUM源:Ubuntu执行curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -并写入/etc/apt/sources.list.d/kubernetes.list;RHEL系导入GPG密钥并配置repo文件。
2、更新包索引后安装指定版本:sudo apt-get install -y kubeadm=1.28.2-00 kubelet=1.28.2-00 kubectl=1.28.2-00(Ubuntu)或yum install -y kubeadm-1.28.2 kubelet-1.28.2 kubectl-1.28.2(RHEL系)。
3、锁定版本防止自动升级:sudo apt-mark hold kubeadm kubelet kubectl(Ubuntu)或yum versionlock kubeadm kubelet kubectl(RHEL系)。
4、启用并启动kubelet:sudo systemctl enable --now kubelet。
四、初始化控制平面节点(Master)
此操作仅在首台控制节点执行,将生成CA证书、etcd集群、API Server等核心组件,并输出kubeadm join命令供工作节点使用。初始化过程依赖于可访问的镜像仓库,若网络受限需提前拉取镜像。
1、执行sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.28.2(--pod-network-cidr需与后续CNI插件匹配)。
2、初始化成功后,按提示执行mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config。
3、记录输出的kubeadm join完整命令,含token、discovery-token-ca-cert-hash及control-plane-endpoint(如有)。
4、验证状态:kubectl get nodes应显示当前节点处于NotReady状态,待CNI部署后变为Ready。
五、部署CNI网络插件
Kubernetes不自带网络方案,必须部署CNI插件(如Flannel、Calico)才能使Pod跨节点通信。未部署前,所有节点均保持NotReady,且CoreDNS处于Pending状态。
1、选择Flannel方案:执行kubectl apply -f https://github.com/flannel-io/flannel/releases/download/v0.22.2/kube-flannel.yml。
2、若使用Calico,执行kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml,再应用自定义资源清单。
3、检查命名空间kube-system中flannel或calico相关Pod是否全部为Running状态。
4、再次运行kubectl get nodes,确认节点状态变为Ready。
六、加入工作节点(Worker Node)
工作节点需复用控制平面初始化时生成的token与证书哈希值进行双向认证。若token过期(默认24小时),须在主节点重新生成,并同步更新hash值。
1、在工作节点执行初始化阶段记录的完整kubeadm join命令,例如:sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。
2、若token失效,在主节点运行kubeadm token create --print-join-command获取新命令。
3、在工作节点执行后,等待约30秒,主节点运行kubectl get nodes应列出新增节点,状态为NotReady(等待CNI就绪)。
4、确认CNI Pod已在新节点上运行:kubectl get pods -n kube-system -o wide | grep flannel(或对应CNI名称)。
七、验证集群功能
通过部署测试Pod并验证其网络连通性与调度行为,确认集群基础能力可用。此阶段不依赖外部存储或Ingress,仅验证核心编排逻辑。
1、创建测试Deployment:kubectl create deployment nginx-test --image=nginx:alpine。
2、暴露为ClusterIP Service:kubectl expose deployment nginx-test --port=80 --target-port=80。
3、获取Service ClusterIP:kubectl get service nginx-test,记下IP地址。
4、在任意节点执行curl -I http://ClusterIP:80,返回HTTP 200表示Pod网络与Service代理正常。
# linux
# centos
# js
# git
# json
# node
# go
# docker
# github
# nginx
# app
# print
# 命名空间
# cURL
# Token
# operator
# default
# etcd
# kubernetes
# kubelet
# http
# https
# ubuntu
# 镜像
# 重启
# 如果您
# 如有
# 一台
# 自定义
# 已在
# 自带
# 能使
# 不低于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Android中AutoCompleteTextView自动提示
如何挑选最适合建站的高性能VPS主机?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
油猴 教程,油猴搜脚本为什么会网页无法显示?
Python文本处理实践_日志清洗解析【指导】
Laravel如何使用查询构建器?(Query Builder高级用法)
如何基于云服务器快速搭建个人网站?
图册素材网站设计制作软件,图册的导出方式有几种?
如何确认建站备案号应放置的具体位置?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Python文件异常处理策略_健壮性说明【指导】
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Python结构化数据采集_字段抽取解析【教程】
网站建设保证美观性,需要考虑的几点问题!
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
简单实现jsp分页
Laravel如何生成URL和重定向?(路由助手函数)
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
北京企业网站设计制作公司,北京铁路集团官方网站?
如何快速搭建支持数据库操作的智能建站平台?
浅谈redis在项目中的应用
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何在IIS中新建站点并配置端口与物理路径?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
网页设计与网站制作内容,怎样注册网站?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
php结合redis实现高并发下的抢购、秒杀功能的实例
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
教你用AI将一段旋律扩展成一首完整的曲子
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
如何用免费手机建站系统零基础打造专业网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
bootstrap日历插件datetimepicker使用方法
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
大型企业网站制作流程,做网站需要注册公司吗?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
javascript日期怎么处理_如何格式化输出
如何快速搭建高效WAP手机网站吸引移动用户?
如何在 Pandas 中基于一列条件计算另一列的分组均值

