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

20250708-2-Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记

一、操作系统初始化配置(一个旧版本的K8S部署记录,仅供参考)



1. 关闭防火墙



  • 关闭防火墙:
    • 临时关闭:systemctl stop firewalld
    • 永久关闭:systemctl disable firewalld
  • 清空iptables规则:
    • 使用iptables -F清空规则
    • 原因:默认规则会限制部分端口访问,可能导致集群通信问题
  • 防火墙工具关系:
    • firewalld和iptables都是配置Linux内核netfilter的工具
    • firewalld是红帽在CentOS 7中加入的替代iptables的工具
2. 关闭SELinux
  • 关闭方法:
    • 永久关闭:sed -i 's/enforcing/disabled/' /etc/selinux/config
    • 临时关闭:setenforce 0
  • 验证状态:
    • 使用getenforce命令检查,显示"Disabled"表示已关闭
  • 关闭原因:
    • SELinux使用复杂且安全系数不高
    • 企业环境和公有云中普遍不使用
3. 关闭swap
  • 关闭方法:
    • 临时关闭:swapoff -a
    • 永久关闭:sed -ri 's/.*swap.*/#&/' /etc/fstab
  • 关闭原因:
    • Kubernetes 1.22前版本不支持使用swap
    • swap使用硬盘空间,性能比内存低几十倍
    • 固态硬盘可改善性能但成本较高
4. 设置主机名



  • 设置方法:
    • 使用hostnamectl set-hostname <hostname>设置
    • 执行bash刷新当前解释器使更改立即生效
  • 主机名规划示例:
    • Master节点:k8s-master
    • Node1节点:k8s-node1
    • Node2节点:k8s-node2
5. 配置hosts文件
  • 配置方法:
    • 在master节点执行:cat >> /etc/hosts << EOF
    • 添加格式:<IP地址> <主机名>
  • 配置原因:
    • API server连接node节点时会使用hosts解析
    • 只需在master节点配置即可
6. 网络参数配置
  • 配置内容:
    • 创建/etc/sysctl.d/k8s.conf文件
    • 添加桥接IPv4流量传递到iptables的规则
  • 生效方法:
    • 执行sysctl --system使配置生效
  • 配置原因:
    • 避免出现网络相关问题
    • Kubernetes官方建议配置
7. 时间同步
  • 同步方法:
    • 安装ntpdate:yum install ntpdate -y
    • 同步时间:ntpdate time.windows.com
  • 同步重要性:
    • 确保集群所有节点时间一致
    • 时间不一致可能导致各种问题
二、安装Docker、kubeadm、kubelet

1. 安装Docker



  • 安装方式:可以通过yum安装或二进制方式安装,在所有节点都需要执行
  • 容器引擎选择:默认使用Docker作为容器引擎,也可以替换为containerd等其他引擎
  • 具体步骤:
    • 下载Docker的yum源:wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    • 安装Docker:yum -y install docker-ce
    • 设置开机启动并启动服务:systemctl enable docker && systemctl start docker
    • 验证安装:docker info
  • 加速器配置:为提高镜像下载速度,需要配置镜像加速器
    • 创建配置文件:cat > /etc/docker/daemon.json << EOF {"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]} EOF
    • 重启服务生效:systemctl restart docker
2. 添加阿里云YUM软件源



  • 配置目的:CentOS 7默认源中没有Kubernetes包,需要添加阿里云源来安装kubeadm等工具
  • 配置方法:
3. 安装kubeadm、kubelet和kubectl



  • 组件功能:
    • kubeadm:用于搭建Kubernetes集群的工具
    • kubelet:每个节点上运行的agent
    • kubectl:命令行管理工具
  • 安装命令:yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
  • 版本选择:示例使用1.21.0版本,也可选择其他版本如1.22
  • 服务管理:
    • 设置开机启动:systemctl enable kubelet
    • 注意:此时不要直接启动kubelet服务,因为配置文件尚未准备好
三、部署Kubernetes Master

1. 执行kubeadm init命令



  • 集群通告地址:使用--apiserver-advertise-address=192.168.31.71指定集群通信地址,生产环境中建议使用内网IP(服务器通常有内外网双网卡,内网用于服务器间高速通信)
  • 镜像仓库覆盖:通过--image-repository registry.aliyuncs.com/google_containers指定阿里云镜像仓库,解决默认k8s.gcr.io国内无法访问的问题
  • 版本一致性:--kubernetes-version v1.21.0必须与安装的kubelet/kubeadm版本严格一致
  • 网络规划:
    • --service-cidr=10.96.0.0/12定义Service虚拟网络(Pod统一访问入口)
    • --pod-network-cidr=10.244.0.0/16定义Pod网络(需与后续CNI网络组件配置保持一致)
    • 注意避免与宿主机网段冲突,无特殊需求可直接使用示例配置
  • 配置文件替代方案:可通过kubeadm.conf文件定义集群配置,使用kubeadm init -config kubeadm.conf初始化
    • 包含版本、镜像仓库、网络等关键参数
    • 适合需要重复部署或参数复杂的场景
2. 拷贝kubectl配置文件到默认路径



  • 必要操作:执行以下命令使kubectl工具生效:
  • 替代方案:root用户可直接设置环境变量:
  • 节点状态验证:执行kubectl get nodes查看,此时状态应为NotReady(因尚未部署网络插件)
3. 配置文件拷贝默认路径执行示例



  • 关键输出:初始化完成后会生成node节点加入命令,格式为:
    • 需妥善保存该命令用于后续节点加入
  • 网络插件提示:输出中包含部署CNI网络插件的提示,需按指引完成部署后集群才可用
四、加入Kubernetes Node

1. 执行kubeadm join命令

  • 命令结构:kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash <hash>
  • 有效期:默认token有效期为24小时,过期后需使用kubeadm token create --print-join-command重新生成
  • 常见错误:复制命令时可能出现多余字符(如.),需粘贴到文本编辑器检查并拼接为完整一行
  • 哈希值验证:需确保sha256哈希值完整无误,少一位都会导致节点加入失败
  • 配置拷贝:需执行sudo cp -i /etc/kubernetes/admin.conf$HOME/.kube/config和权限设置命令
  • 网络插件:加入节点后必须部署CNI网络插件(如Calico),否则节点状态显示为NotReady
  • 多节点加入:相同join命令可在多个worker节点重复执行,需确保网络连通性和参数准确性
2. 网络插件配置
  • CIDR匹配:必须修改Calico YAML中的CALICO_IPV4POOL_CIDR与kubeadm init时指定的--pod-subnet一致
  • YAML获取:可通过wget https://docs.projectcalico.org/manifests/calico.yaml下载模板文件
  • 版本兼容性:不同Kubernetes版本(如v1.21.0)可能需要特定版本的Calico配置文件
3. 节点状态检查
  • 查看命令:在master节点执行kubectl get nodes可查看所有节点状态
  • 正常状态:成功加入的节点应显示为Ready状态,控制平面节点会标注control-plane角色
  • 连接问题:若出现连接拒绝错误,需检查$HOME/.kube/config文件是否配置正确
五、部署容器网络

1. 网络部署过程



  • 节点加入命令:使用kubeadm join命令将新节点加入集群,格式为:
  • Token有效期:默认token有效期为24小时,过期后需重新生成,使用命令:
  • 网络插件选择:Calico是纯三层数据中心网络方案,当前Kubernetes主流选择
  • 部署步骤:
    • 下载YAML文件:
    • 修改CALICO_IPV4POOL_CIDR参数,需与kubeadm init时指定的--pod-network-cidr一致
    • 应用配置:
    • 检查状态:
2. 初始化过程详解
  • 预检阶段:
    • 系统检查:验证节点配置是否满足集群要求,包括SWAP是否关闭等
    • 镜像下载:可能出现coredns镜像拉取失败警告(需后续处理)
  • 证书生成:
    • 通信安全:所有K8s组件基于HTTPS通信,需要自签名证书
    • 自动生成:kubeadm脚本会自动创建各类组件证书,包括:
      • API Server证书
      • etcd相关证书
      • 前端代理证书
    • 配置文件:为kube-controller-manager等组件生成连接集群的kubeconfig文件
  • kubelet启动:
    • 配置文件:自动生成/var/lib/kubelet/config.yaml等配置文件
    • 静态Pod:控制平面组件(API Server等)通过静态Pod方式启动
    • 特殊机制:静态Pod是K8s的特殊启动形式(后续会专门讲解)
3. 节点加入问题处理
  • 常见警告:
    • 驱动警告:Docker使用cgroupfs驱动而非推荐的systemd驱动(可忽略)
    • 主机名解析:未配置hosts导致主机名无法解析(不影响功能)
  • 核心流程:
    • kubelet启动:节点加入主要启动kubelet服务
    • TLS引导:完成证书签名请求(CSR)流程建立安全连接
  • 网络就绪条件:
    • NotReady状态:未部署网络插件前节点显示NotReady
    • 解决方案:必须部署网络插件为Pod提供网络服务
    • 验证命令:
六、CoreDNS问题处理

1. Token有效期问题

  • 默认有效期:kubeadm生成的token默认有效期为24小时,过期后不可用
  • 解决方法:需要重新创建token才能继续使用
  • 完整命令示例:
2. 网络插件未部署问题

  • 典型表现:节点状态显示为NotReady,日志报错"NetworkPluginNotReady"
  • 根本原因:CNI(容器网络接口)插件未正确部署
  • 日志特征:
    • "Unable to update cni config"
    • "no networks found in /etc/cni/net.d"
    • "Container runtime network not ready"
  • 诊断方法:通过journalctl -u kubelet命令查看kubelet日志
3. CNI配置缺失问题
  • 关键错误:
  • 网络状态:NetworkReady=false,原因显示为cni config未初始化
  • 容器运行时:Docker报告网络插件未就绪
  • 解决方案:需要部署CNI网络插件(如Calico、Flannel等)
4. 网络插件部署验证
  • 验证步骤:
    • 部署CNI网络插件
    • 检查/etc/cni/net.d目录下是否有网络配置文件
    • 使用kubectl get node查看节点状态是否变为Ready
  • 完整流程:网络插件部署后需要等待一段时间(通常1-2分钟)让组件完成初始化
七、部署容器网络

1. 前提条件与准备



  • token有效期:默认token有效期为24小时,过期后不可用
  • token重新生成:使用命令kubeadm token create --print-join-command快速生成新token
2. 安装Docker与kubeadm



  • 阿里云镜像源配置:
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF
  • 组件安装:yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
3. 部署Kubernetes Master



  • 关键参数:
    • --apiserver-advertise-address:集群通告地址
    • --image-repository:指定阿里云镜像仓库地址
    • --pod-network-cidr:Pod网络,需与CNI网络组件yaml中保持一致
  • 配置文件方式:可通过kubeadm.conf文件引导初始化
4. 配置网络插件Calico



  • 网络方案选择:Calico是纯三层的数据中心网络方案,Kubernetes主流选择
  • 部署步骤:
    • 下载YAML:wget https://docs.projectcalico.org/manifests/calico.yaml
    • 修改CALICO_IPV4POOL_CIDR与kubeadm init的--pod-network-cidr一致
    • 部署:kubectl apply -f calico.yaml
  • 执行位置:所有yaml文件都只在Master节点执行
5. 解决CoreDNS镜像拉取问题
  • 问题现象:ImagePullBackOff错误,因镜像tag路径不匹配
  • 解决方案:
    • 在所有节点执行:
    • 等待Pod自动恢复
  • 关键注意:必须在所有节点执行上述操作
6. 测试Kubernetes集群



  • 测试方法:
  • 访问验证:通过http://NodeIP:Port访问测试服务
7. 部署Dashboard



  • 官方UI:Dashboard是Kubernetes官方提供的管理界面
八、部署Dashboard



1. 下载与上传Dashboard文件



  • 官方UI功能:Dashboard是Kubernetes官方提供的Web UI界面,可用于基本管理K8s资源
  • 文件获取方式:
    • 官方下载地址:https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
    • 课件中文件名:kubernetes-dashboard.yaml
  • 上传注意事项:由于网络访问限制,建议使用老师提供的已下载文件,上传到master节点执行
2. 修改Service为NodePort类型



  • 默认访问限制:Dashboard默认只能集群内部访问
  • 修改关键配置:
    • 将Service类型改为NodePort
    • 添加nodePort: 30001
    • 完整配置示例:
3. 部署Dashboard



  • 部署步骤:
    • 应用修改后的yaml文件:kubectl apply -f kubernetes-dashboard.yaml
    • 检查Pod状态:kubectl get pods -n kubernetes-dashboard
  • 部署结果验证:
    • 成功后会创建namespace、serviceaccount、service等资源
    • Pod状态应为Running:dashboard-metrics-scraper和kubernetes-dashboard
4. 创建用户并授权



  • 创建管理员用户:
    • 创建serviceaccount:kubectl create serviceaccount dashboard-admin -n kube-system
    • 绑定cluster-admin角色:kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  • 获取登录Token:
    • 命令:kubectl describe secrets -n kube-system$(kubectl -n kube-system get secret | awk '/dashboard-admin/{print$1}')
    • Token用途:用于登录Dashboard的身份凭证
5. 访问Dashboard



  • 访问地址:https://NodeIP:30001
  • 访问注意事项:
    • 必须使用HTTPS协议访问
    • 浏览器会显示不安全警告(因使用自签名证书),需手动继续访问
    • 登录时使用之前获取的Token
  • 节点选择:可以访问集群中任意节点的IP
6. Dashboard功能概览



  • 核心功能:
    • 查看集群节点状态和资源使用情况
    • 管理命名空间和各类资源(Deployments、Pods、Services等)
    • 查看容器日志和进入容器终端
    • 编辑和更新资源配置
  • 操作示例:
    • 创建Deployment:kubectl create deployment web --image=nginx
    • 查看Pod日志:通过UI界面直接查看
    • 进入容器终端:通过UI提供的Shell功能
  • 使用场景:适合临时调试和基本资源管理,生产环境仍需依赖命令行工具
九、知识小结

知识点

核心内容

关键操作/命令

注意事项

系统初始化

关闭防火墙和SELinux

systemctl stop firewalld

setenforce 0

防火墙规则会影响节点通信

SELinux默认开启需关闭

基础环境配置

设置主机名和时间同步

hostnamectl set-hostname

ntpdate

主机名用于集群识别

时间同步至关重要

Docker安装

配置镜像加速器

yum install docker

配置阿里云镜像加速

国内需替换默认仓库

设置开机自启

Kubernetes组件安装

安装kubeadm/kubelet

yum install kubelet-1.21.0

版本需严格一致

先配置阿里云yum源

Master节点初始化

使用kubeadm init

kubeadm init --apiserver-advertise-address

注意API Server地址

记录join命令

Node节点加入

执行kubeadm join

kubeadm join <master-ip>:6443

检查token有效性

解决格式错误问题

网络插件部署

安装Calico网络

kubectl apply -f calico.yaml

修改CIDR匹配集群

仅在Master执行

Dashboard部署

安装Web UI界面

kubectl apply -f dashboard.yaml

需配置Service类型

创建访问token

常见问题处理

镜像拉取失败

docker pull 阿里云镜像

docker tag重命名

所有节点需同步操作

检查tag准确性

集群验证

检查节点状态

kubectl get nodes

kubectl get pods -A

Ready状态确认

组件运行状态检查

http://www.dtcms.com/a/269829.html

相关文章:

  • 兰顿蚂蚁路径lua测试
  • 无缝高清矩阵与画面分割器的区别
  • OpenWebUI(5)源码学习-后端socket通信模块
  • Apache DolphinScheduler保姆级实操指南:云原生任务调度实战
  • iOS打包流程
  • navicat导出数据库的表结构
  • 鸿蒙分布式开发实战指南:让设备协同像操作本地一样简单
  • 深度 |以数字技术赋能服务消费场景创新
  • kafka如何让消息均匀的写入到每个partition
  • Spring Boot 多数据源切换:AbstractRoutingDataSource
  • Elasticsearch Kibana 使用 原理
  • 用基础模型构建应用(第七章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Linux基础篇、第五章_01利用 Cobbler 实现 CentOS 7 与 Rocky 9.5 自动化安装全攻略
  • 记录一次在 centos 虚拟机 中 安装 Java环境
  • windows内核研究(系统调用 1)
  • 从传统项目管理到敏捷DevOps:如何转向使用DevOps看板工具进行工作流管理
  • 谁主沉浮:人工智能对未来信息技术发展路径的影响研究
  • 优化提示词提升VLLM准确率
  • K8s——配置管理(1)
  • 构建高效分布式系统:bRPC组合Channels与HTTP/H2访问指南
  • 从单体到微服务:Spring Cloud 开篇与微服务设计
  • 微前端框架对比
  • 无缝矩阵支持音频分离带画面分割功能的全面解析
  • ​AI赋能的自动驾驶革命:从安全架构到世界模型的系统性突破
  • 【操作系统】磁盘调度
  • hmall学习
  • 2025年模型与机器学习国际会议 (ICMML 2025)
  • BM9 删除链表的倒数第n个节点
  • 计算机网络4层架构怎么理解,分别把协议和对应的层用一些生活的例子形象说明一下
  • MyBatis完全学习指南