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

Rocky Linux下Kubernetes 1.33二进制部署实战指南

1. 项目概述

在Rocky Linux上通过二进制方式部署Kubernetes 1.33集群,是当前企业级容器编排平台搭建的主流方案之一。不同于使用kubeadm等工具自动化安装,二进制部署要求管理员手动配置每个核心组件,包括etcd、kube-apiserver、kube-controller-manager、kube-scheduler等。这种方式虽然步骤繁琐,但能让你彻底掌握Kubernetes的底层运行机制,特别适合需要深度定制化配置的生产环境。

我最近在客户现场实施了一套基于Rocky Linux 8.6的Kubernetes 1.33集群,过程中积累了不少实战经验。相比常见的CentOS/RHEL系发行版,Rocky Linux作为CentOS的替代品,在软件包管理和系统配置上有一些独特之处需要特别注意。本文将详细记录从零开始搭建的全过程,包括组件编译、证书生成、服务配置等关键环节。

2. 环境准备与规划

2.1 硬件资源配置建议

对于生产环境,建议至少准备三台物理机或虚拟机作为集群节点:

  • 控制平面节点:4核CPU/8GB内存/100GB磁盘(建议奇数台,如3台实现高可用)
  • Worker节点:根据工作负载需求调整,建议8核CPU/16GB内存/200GB磁盘起步
  • 网络要求:节点间延迟<1ms,万兆网络最佳

重要提示:所有节点必须保证时间同步(chrony/NTP),否则证书验证会失败

2.2 操作系统配置

以Rocky Linux 8.6为例,基础配置步骤如下:

# 关闭SELinux(生产环境需根据安全策略调整) setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # 关闭防火墙(或配置放行规则) systemctl stop firewalld systemctl disable firewalld # 加载内核模块 cat > /etc/modules-load.d/k8s.conf <<EOF br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF # 加载模块 modprobe -- br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack # 配置内核参数 cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system

2.3 依赖软件安装

dnf install -y conntrack-tools socat ebtables ipset curl wget tar

3. 核心组件部署

3.1 证书体系搭建

Kubernetes重度依赖TLS证书进行组件间通信认证。我们使用cfssl工具链生成自签名证书:

# 下载cfssl工具 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson chmod +x /usr/local/bin/cfssl* # 创建CA配置文件 cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "87600h" } } } } EOF # 生成CA证书 cat > ca-csr.json <<EOF { "CN": "Kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "O": "Kubernetes", "OU": "CA", "ST": "Beijing" } ] } EOF cfssl gencert -initca ca-csr.json | cfssljson -bare ca

3.2 Etcd集群部署

Etcd作为Kubernetes的后端存储,需要首先部署:

# 下载etcd二进制包 ETCD_VER=v3.5.4 wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz tar -xvf etcd-${ETCD_VER}-linux-amd64.tar.gz mv etcd-${ETCD_VER}-linux-amd64/etcd* /usr/local/bin/ # 创建systemd服务文件 cat > /etc/systemd/system/etcd.service <<EOF [Unit] Description=Etcd Server After=network.target [Service] Type=notify ExecStart=/usr/local/bin/etcd \\ --name=etcd1 \\ --data-dir=/var/lib/etcd \\ --initial-advertise-peer-urls=https://192.168.1.101:2380 \\ --listen-peer-urls=https://192.168.1.101:2380 \\ --listen-client-urls=https://192.168.1.101:2379,https://127.0.0.1:2379 \\ --advertise-client-urls=https://192.168.1.101:2379 \\ --initial-cluster=etcd1=https://192.168.1.101:2380,etcd2=https://192.168.1.102:2380,etcd3=https://192.168.1.103:2380 \\ --initial-cluster-token=etcd-cluster \\ --initial-cluster-state=new \\ --client-cert-auth \\ --trusted-ca-file=/etc/kubernetes/pki/ca.crt \\ --cert-file=/etc/kubernetes/pki/etcd/server.crt \\ --key-file=/etc/kubernetes/pki/etcd/server.key \\ --peer-client-cert-auth \\ --peer-trusted-ca-file=/etc/kubernetes/pki/ca.crt \\ --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt \\ --peer-key-file=/etc/kubernetes/pki/etcd/peer.key Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF

3.3 Kubernetes控制平面部署

3.3.1 组件下载与安装
# 下载Kubernetes二进制文件 K8S_VER=v1.33.0 wget https://dl.k8s.io/${K8S_VER}/kubernetes-server-linux-amd64.tar.gz tar -xvf kubernetes-server-linux-amd64.tar.gz cd kubernetes/server/bin cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/
3.3.2 API Server配置
cat > /etc/systemd/system/kube-apiserver.service <<EOF [Unit] Description=Kubernetes API Server Documentation=https://github.com/kubernetes/kubernetes After=etcd.service [Service] ExecStart=/usr/local/bin/kube-apiserver \\ --advertise-address=192.168.1.101 \\ --allow-privileged=true \\ --apiserver-count=3 \\ --audit-log-maxage=30 \\ --audit-log-maxbackup=3 \\ --audit-log-maxsize=100 \\ --audit-log-path=/var/log/audit.log \\ --authorization-mode=Node,RBAC \\ --bind-address=0.0.0.0 \\ --client-ca-file=/etc/kubernetes/pki/ca.crt \\ --enable-admission-plugins=NodeRestriction \\ --enable-bootstrap-token-auth=true \\ --etcd-cafile=/etc/kubernetes/pki/ca.crt \\ --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt \\ --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key \\ --etcd-servers=https://192.168.1.101:2379,https://192.168.1.102:2379,https://192.168.1.103:2379 \\ --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt \\ --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key \\ --service-account-key-file=/etc/kubernetes/pki/sa.pub \\ --service-account-signing-key-file=/etc/kubernetes/pki/sa.key \\ --service-account-issuer=https://kubernetes.default.svc.cluster.local \\ --service-cluster-ip-range=10.96.0.0/12 \\ --tls-cert-file=/etc/kubernetes/pki/apiserver.crt \\ --tls-private-key-file=/etc/kubernetes/pki/apiserver.key \\ --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt \\ --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt \\ --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key \\ --requestheader-allowed-names=front-proxy-client \\ --requestheader-extra-headers-prefix=X-Remote-Extra- \\ --requestheader-group-headers=X-Remote-Group \\ --requestheader-username-headers=X-Remote-User \\ --secure-port=6443 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF

4. 网络与插件配置

4.1 CNI插件选择与部署

推荐使用Calico作为网络插件:

curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml

4.2 CoreDNS配置

# 下载CoreDNS配置文件 wget https://github.com/coredns/deployment/blob/master/kubernetes/coredns.yaml.sed # 修改配置后部署 kubectl apply -f coredns.yaml

5. 节点加入与验证

5.1 Worker节点准备

在每个Worker节点上:

# 安装kubelet kube-proxy cp kubelet kube-proxy /usr/local/bin/ # 配置kubelet cat > /etc/systemd/system/kubelet.service <<EOF [Unit] Description=Kubernetes Kubelet After=docker.service [Service] ExecStart=/usr/local/bin/kubelet \\ --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \\ --kubeconfig=/etc/kubernetes/kubelet.conf \\ --pod-manifest-path=/etc/kubernetes/manifests \\ --allow-privileged=true \\ --network-plugin=cni \\ --cni-conf-dir=/etc/cni/net.d \\ --cni-bin-dir=/opt/cni/bin \\ --cluster-dns=10.96.0.10 \\ --cluster-domain=cluster.local \\ --fail-swap-on=false \\ --runtime-cgroups=/systemd/system.slice \\ --kubelet-cgroups=/systemd/system.slice Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF

5.2 集群验证

kubectl get nodes kubectl get pods --all-namespaces

6. 常见问题排查

6.1 证书相关错误

症状:x509: certificate has expired or is not yet valid

解决方案:

  1. 检查所有节点时间同步
  2. 重新生成证书并设置更长有效期

6.2 Etcd集群无法启动

症状:etcdserver: unhealthy cluster

解决方案:

  1. 检查etcd节点间网络连通性
  2. 验证证书配置是否正确
  3. 清理数据目录后重新初始化

6.3 网络插件问题

症状:Pods处于ContainerCreating状态

解决方案:

  1. 检查CNI二进制文件权限
  2. 验证网络插件日志
  3. 确认内核模块加载正确

7. 性能调优建议

  1. Etcd优化

    • 单独SSD磁盘用于etcd数据目录
    • 调整心跳间隔和选举超时
    • 定期进行碎片整理
  2. API Server优化

    • 启用API优先级和公平性
    • 调整--max-requests-inflight参数
    • 使用本地SSD缓存
  3. kubelet优化

    • 设置合理的--max-pods参数
    • 启用Pod生命周期事件生成器
    • 调整镜像垃圾回收阈值

在Rocky Linux上完成Kubernetes二进制部署后,建议运行集群一致性测试工具(如sonobuoy)进行完整验证。对于生产环境,还需要考虑日志收集、监控告警、备份恢复等配套系统的搭建。

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

相关文章:

  • HTML多媒体与超链接:从基础到优化实践
  • 异步任务处理与SSE流式输出的技术实践
  • 微电网优化调度:基于MOPSO的多目标算法实践
  • C++工厂模式详解:从基础到高级应用
  • 辽宁高考350左右建筑学专业推荐哪些大学(2026最新盘点) - 2027品牌AI展
  • 英菲两AURIX TC4创新挑战赛作品评选
  • 软件公司如何构建动态护城河:学习速度与生存韧性的实战指南
  • AI调试工具在CSS布局、异步编程等5类场景中的局限与应对策略
  • TCP/IP协议栈深度解析:从原理到Linux内核优化实践
  • 石景山网站建设公司怎么做才能让客户满意及价格透明的深度解析与避坑指南
  • 无线接入网RAN第一级节点架构与部署实践
  • 本地AI应用部署指南:从环境配置到功能验证的完整流程
  • Kubernetes V1.33二进制部署实战(Rocky Linux环境)
  • Cocos2D游戏开发实战:从黄金矿工项目解析模块化设计与性能优化
  • 2026辽宁高考速看:350左右建筑学专业推荐大学 - 2027品牌AI展
  • 深度解析:什么是S32750双相钢?其卓越耐腐蚀性能的底层逻辑 - 2027品牌AI展
  • 010、光圈档位的蝴蝶效应——F值变化0.1对景深/信噪比/衍射极限的多米诺骨牌式影响
  • MCP协议传输层:四种通信方式详解与选型指南
  • Spark Scala实现大数据日期循环重跑自动化方案
  • AlmaLinux容器化部署Prometheus+Grafana监控系统实战
  • MySQL大文件低优先级导入方案与资源控制实践
  • MyBatis核心配置文件详解与最佳实践
  • VGGT-Ω:突破3D视觉显存瓶颈的高效Transformer架构解析
  • 技术任务中的无痕实践:从资源清理到工程素养的系统性方法
  • Excel高效运维:10个提升数据处理速度的技巧
  • 晋江市瓷砖空鼓维修上门服务推荐_2026闽南沿海与多少钱_卫生间厨房阳台客厅墙砖地砖 - 雨婺虹修缮
  • AI智能体安全防护与蚂蚁数科龙虾卫士技术解析
  • ADAMS在自卸车举升机构动力学仿真中的应用
  • Spring Boot中@Async注解的深度解析与实战优化
  • 009、镜头设计的几何光学第一课——为什么不是所有的光都能成像以及F数背后的物理约束