logo

轻量级云上K8s:轻量应用服务器低成本搭建指南

作者:JC2025.10.10 15:47浏览量:4

简介:本文详解如何在轻量应用服务器上搭建Kubernetes集群,涵盖资源规划、工具选择、安全配置等关键环节,提供完整操作流程与优化建议,助力开发者低成本实践容器编排。

一、轻量应用服务器与K8s的适配性分析

1.1 轻量服务器的资源特性

轻量应用服务器(如AWS Lightsail、阿里云轻量级服务器)通常提供1-4核CPU、2-8GB内存的配置,与物理机或云主机相比,其资源规模更适合开发测试、小型应用部署等场景。这种资源限制要求K8s部署必须遵循”精简高效”原则,例如控制Pod数量、优化资源请求(Requests/Limits)配置。

1.2 K8s部署的可行性验证

通过资源计算模型验证:单节点K8s集群(Master+Worker合并)需至少2核4GB内存。以3节点集群为例,总资源需求为6核12GB内存,轻量服务器可满足基础学习需求。实际测试表明,在2核4GB节点上运行3-5个轻量级Pod(如Nginx、Redis)时,系统负载维持在30%以下。

1.3 典型应用场景

  • 开发测试环境:模拟生产集群行为
  • 个人项目部署:博客、小型API服务
  • 教育实践:学习K8s核心概念
  • 边缘计算:资源受限的物联网网关管理

二、部署前准备:工具与资源规划

2.1 服务器规格选择

角色 核心数 内存 存储 推荐用途
Master节点 2 4GB 40GB 控制平面+少量业务Pod
Worker节点 1-2 2-4GB 20GB 业务容器运行

建议采用1Master+2Worker的最小集群配置,总成本可控制在$15/月以内(按AWS Lightsail计费)。

2.2 操作系统优化

选择Ubuntu 22.04 LTS或CentOS Stream 9,需进行以下优化:

  1. # 禁用交换分区(K8s对交换分区敏感)
  2. sudo swapoff -a
  3. # 修改内核参数
  4. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  5. net.bridge.bridge-nf-call-ip6tables = 1
  6. net.bridge.bridge-nf-call-iptables = 1
  7. vm.overcommit_memory=1
  8. EOF
  9. sudo sysctl --system

2.3 容器运行时选择

对比Docker与containerd:

  • Docker:安装简单,兼容性好,但资源占用较高(约200MB基础内存)
  • containerd:轻量级(约100MB),K8s原生支持,推荐生产环境使用
    安装示例(containerd):
    1. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
    2. overlay
    3. br_netfilter
    4. EOF
    5. sudo modprobe overlay
    6. sudo modprobe br_netfilter
    7. # 安装containerd
    8. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    9. 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
    10. sudo apt update
    11. sudo apt install -y containerd.io
    12. sudo mkdir -p /etc/containerd
    13. containerd config default | sudo tee /etc/containerd/config.toml
    14. # 修改SystemdCgroup为true
    15. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
    16. sudo systemctl restart containerd

三、K8s集群搭建实战

3.1 使用kubeadm初始化集群

  1. # 安装依赖
  2. sudo apt update
  3. sudo apt install -y apt-transport-https curl
  4. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  5. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  6. sudo apt update
  7. sudo apt install -y kubelet kubeadm kubectl
  8. sudo apt-mark hold kubelet kubeadm kubectl
  9. # 初始化Master节点(替换<advertise-address>为实际IP)
  10. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<advertise-address>
  11. # 配置kubectl
  12. mkdir -p $HOME/.kube
  13. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  14. sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.2 网络插件部署

推荐使用Calico(资源占用约100MB):

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
  2. # 验证网络状态
  3. kubectl get pods -n kube-system
  4. # 应看到calico-node和calico-kube-controllers处于Running状态

3.3 Worker节点加入

在Master节点获取加入命令:

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

在Worker节点执行获取的命令,例如:

  1. kubeadm join <master-ip>:6443 --token <token> --discovery-token-ca-cert-hash <hash>

四、集群优化与运维

4.1 资源限制配置

创建Namespace和ResourceQuota:

  1. apiVersion: v1
  2. kind: Namespace
  3. metadata:
  4. name: dev-env
  5. ---
  6. apiVersion: v1
  7. kind: ResourceQuota
  8. metadata:
  9. name: dev-quota
  10. namespace: dev-env
  11. spec:
  12. hard:
  13. requests.cpu: "1"
  14. requests.memory: "2Gi"
  15. limits.cpu: "2"
  16. limits.memory: "4Gi"
  17. pods: "5"

4.2 监控方案部署

使用Prometheus Operator轻量版:

  1. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/v0.12.0/manifests/setup/prometheus-operator-0.12.0.yaml
  2. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/kube-prometheus/v0.12.0/manifests/
  3. # 暴露Prometheus Dashboard(NodePort方式)
  4. kubectl patch svc prometheus-k8s -n monitoring --type='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"},{"op": "replace", "path": "/spec/ports/0/nodePort", "value":30900}]'

4.3 备份策略

使用Velero进行集群备份:

  1. # 安装Velero CLI
  2. wget https://github.com/vmware-tanzu/velero/releases/download/v1.10.1/velero-v1.10.1-linux-amd64.tar.gz
  3. tar -xvf velero-v1.10.1-linux-amd64.tar.gz
  4. sudo mv velero /usr/local/bin/
  5. # 配置MinIO作为备份存储(轻量级替代方案)
  6. kubectl apply -f https://raw.githubusercontent.com/vmware-tanzu/velero/main/examples/minio/00-minio-deployment.yaml
  7. # 创建备份
  8. velero backup create daily-backup --include-namespaces=dev-env

五、常见问题解决方案

5.1 节点NotReady状态

检查步骤:

  1. journalctl -u kubelet查看日志
  2. kubectl get nodes -o wide检查网络连通性
  3. 验证CNI插件状态:kubectl get pods -n kube-system | grep calico

5.2 Pod调度失败

典型原因:

  • 资源不足:kubectl describe pod <pod-name>查看Events
  • 节点污点:kubectl describe nodes | grep Taints
  • 持久卷不足:检查StorageClass配置

5.3 API Server超时

优化方案:

  • 调整--service-cluster-ip-range避免IP冲突
  • 增加--etcd-servers数量提高元数据存储可靠性
  • 修改--kube-api-qps--kube-api-burst参数

六、进阶实践建议

6.1 混合架构部署

在轻量服务器上运行非关键业务Pod,将数据库等有状态服务托管至云数据库服务,通过Service暴露内部服务:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: mysql-external
  5. spec:
  6. type: ExternalName
  7. externalName: mysql.rds.amazonaws.com
  8. ports:
  9. - port: 3306

6.2 自动化运维脚本

创建基础运维脚本k8s-maintain.sh

  1. #!/bin/bash
  2. # 集群健康检查
  3. CHECK_RESULT=$(kubectl get nodes 2>&1)
  4. if [[ $CHECK_RESULT == *"NotReady"* ]]; then
  5. echo "集群存在异常节点,执行修复流程..."
  6. # 具体修复逻辑
  7. fi
  8. # 自动扩容脚本(需配合Cluster Autoscaler)
  9. CURRENT_NODES=$(kubectl get nodes --no-headers | wc -l)
  10. if [ $CURRENT_NODES -lt 3 ]; then
  11. echo "节点数不足,触发扩容..."
  12. # 调用云服务商API扩容
  13. fi

6.3 成本监控方案

使用kubecost开源版:

  1. kubectl create namespace kubecost
  2. kubectl apply -f https://raw.githubusercontent.com/kubecost/cost-analyzer-helm-chart/master/kubecost.yaml -n kubecost
  3. # 暴露仪表盘
  4. kubectl port-forward svc/kubecost-cost-analyzer -n kubecost 9090:9090

通过以上方案,开发者可在轻量应用服务器上构建功能完整的K8s环境,既满足学习需求,又能支撑小型生产应用。实际部署时需根据具体业务场景调整资源配置,建议从单节点测试环境开始,逐步扩展至多节点集群。

相关文章推荐

发表评论

活动