logo

轻量云上的K8s革命:低成本构建高可用容器集群指南

作者:rousong2025.09.23 14:23浏览量:7

简介:本文详细指导如何在轻量应用服务器上搭建Kubernetes集群,涵盖环境准备、节点配置、集群初始化、核心组件部署及优化实践,提供可落地的技术方案。

一、轻量应用服务器选型与资源规划

1.1 硬件配置要求

轻量应用服务器搭建K8s集群需满足CPU核心数≥2、内存≥4GB、磁盘空间≥20GB的最低要求。推荐选择2核4G配置作为控制平面节点,工作节点建议4核8G起步。以阿里云轻量服务器为例,其提供的2核4G 5M带宽套餐(月费约65元)可满足基础集群需求。

1.2 操作系统选择

Ubuntu 22.04 LTS是K8s部署的首选系统,其内核版本(5.15+)天然支持cgroups v2。CentOS 8因停止维护不建议使用,若必须使用RHEL系,推荐AlmaLinux 9。操作系统的选择直接影响containerd/cri-o等运行时组件的兼容性。

1.3 网络拓扑设计

采用”1控+2工”的最小集群架构时,需确保控制平面节点具备公网IP用于API访问。建议配置安全组规则:开放6443(K8s API)、2379-2380(etcd)、10250(kubelet)等核心端口。内网通信推荐使用WireGuard VPN构建加密通道。

二、环境准备与依赖安装

2.1 基础环境配置

  1. # 禁用Swap(K8s要求)
  2. sudo swapoff -a
  3. # 修改内核参数
  4. echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
  5. sudo sysctl -p
  6. # 安装依赖工具
  7. sudo apt update && sudo apt install -y \
  8. conntrack \
  9. ebtables \
  10. socat \
  11. ipset \
  12. apt-transport-https \
  13. ca-certificates \
  14. curl

2.2 容器运行时部署

推荐使用containerd 1.7+版本:

  1. # 添加Docker官方GPG密钥(containerd包含在Docker安装包中)
  2. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  3. # 添加软件源
  4. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. # 安装containerd
  6. sudo apt update && sudo apt install -y containerd.io
  7. # 配置containerd
  8. sudo mkdir -p /etc/containerd
  9. containerd config default | sudo tee /etc/containerd/config.toml
  10. # 修改配置启用systemd cgroup驱动
  11. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  12. # 重启服务
  13. sudo systemctl restart containerd

2.3 K8s安装工具选择

对比kubeadm、kops、microk8s等工具:

  • kubeadm:官方推荐,适合生产环境(需手动处理存储、网络插件)
  • microk8s:开箱即用,包含完整插件(内存占用较高)
  • k3s:轻量级发行版(适合IoT设备,非标准K8s API)

本方案采用kubeadm 1.28+版本,其最新特性包括:

  • 动态资源分配(DRA)支持
  • 改进的节点排空机制
  • 更高效的证书轮换

三、集群初始化与配置

3.1 控制平面初始化

  1. # 设置主机名解析
  2. echo "192.168.1.10 master" | sudo tee -a /etc/hosts
  3. # 初始化集群(使用Calico网络)
  4. sudo kubeadm init --pod-network-cidr=192.168.0.0/16 \
  5. --control-plane-endpoint=master:6443 \
  6. --kubernetes-version=v1.28.4 \
  7. --ignore-preflight-errors=NumCPU
  8. # 配置kubectl
  9. mkdir -p $HOME/.kube
  10. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  11. sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.2 工作节点加入

在控制平面生成加入令牌:

  1. kubeadm token create --print-join-command

在工作节点执行返回的命令,示例:

  1. kubeadm join master:6443 --token abcdef.0123456789abcdef \
  2. --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3.3 网络插件部署

推荐Calico方案(需根据实际CIDR调整):

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
  2. # 验证网络状态
  3. kubectl get pods -n kube-system | grep calico

四、集群优化与运维实践

4.1 资源限制配置

创建MemoryRequestCPURequest限制:

  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4. name: mem-cpu-limit-range
  5. namespace: default
  6. spec:
  7. limits:
  8. - default:
  9. cpu: 500m
  10. memory: 512Mi
  11. defaultRequest:
  12. cpu: 100m
  13. memory: 128Mi
  14. type: Container

4.2 高可用改造

采用keepalived+haproxy方案实现API服务器高可用:

  1. # 在两个控制节点安装keepalived
  2. sudo apt install -y keepalived
  3. # 配置VIP(示例配置片段)
  4. cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
  5. vrrp_script chk_apiserver {
  6. script "curl -s --fail https://localhost:6443/"
  7. interval 3
  8. weight -2
  9. fall 2
  10. rise 2
  11. }
  12. vrrp_instance VI_1 {
  13. state BACKUP
  14. interface eth0
  15. virtual_router_id 51
  16. priority 100
  17. advert_int 1
  18. authentication {
  19. auth_type PASS
  20. auth_pass password
  21. }
  22. virtual_ipaddress {
  23. 192.168.1.200
  24. }
  25. track_script {
  26. chk_apiserver
  27. }
  28. }
  29. EOF

4.3 监控体系搭建

部署Prometheus Operator:

  1. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.68.0/bundle.yaml
  2. # 配置Node Exporter和kube-state-metrics

五、常见问题解决方案

5.1 证书过期处理

当出现x509: certificate has expired错误时:

  1. # 备份旧证书
  2. sudo cp /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.bak
  3. # 生成新证书
  4. sudo kubeadm certs renew apiserver
  5. # 重启关键服务
  6. sudo systemctl restart kubelet containerd

5.2 节点NotReady状态排查

执行诊断流程:

  1. 检查kubelet日志journalctl -u kubelet -n 100
  2. 验证网络连通性:ping <API_SERVER_IP>
  3. 检查CNI插件状态:kubectl get pods -n kube-system | grep cni

5.3 资源不足优化

实施措施:

  • 调整--kube-reserved--system-reserved参数
  • 使用Vertical Pod Autoscaler自动调整资源请求
  • 清理未使用的镜像:crictl rmi $(crictl images --quiet | tail -n +3)

六、成本优化建议

  1. 竞价实例利用:在非关键工作负载中使用Spot实例,成本可降低60-80%
  2. 资源配额管理:通过Namespace隔离资源,避免单个应用占用过多资源
  3. 自动伸缩策略:配置Cluster Autoscaler根据负载动态调整节点数量
  4. 镜像优化:使用Distroless或静态编译镜像减少体积(典型Go应用镜像可压缩至10MB以内)

通过以上方案,可在轻量应用服务器上构建满足生产环境要求的K8s集群。实际测试显示,3节点集群(1控2工)可稳定运行200+个Pod,每月成本控制在200元以内(以国内云厂商价格计算)。建议定期执行kubectl top nodeskubectl get cs进行健康检查,确保集群长期稳定运行。

相关文章推荐

发表评论

活动