logo

轻量云服务器高效部署:k8s集群搭建全攻略

作者:Nicky2025.09.23 14:23浏览量:0

简介:本文详细介绍如何在轻量应用服务器上搭建k8s集群,涵盖环境准备、节点配置、网络与存储规划及安全加固,助力开发者低成本构建高效容器编排系统。

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

轻量应用服务器(如阿里云ECS轻量版、腾讯云轻量服务器)以低成本、高灵活性和快速部署为特点,通常配备1-4核CPU、2-8GB内存及50-200GB存储,适合中小型项目或测试环境。而k8s作为容器编排领域的标准,其资源需求与轻量服务器存在天然匹配空间:通过合理配置,单节点可运行数十个Pod,集群总负载能力可达百级Pod。

关键适配点包括:

  1. 资源分配策略:采用静态资源预留(如--kube-reserved=cpu=500m,memory=512Mi)避免OOM,动态资源分配需依赖Vertical Pod Autoscaler(VPA)。
  2. 网络模型选择:轻量服务器通常支持VPC网络,推荐使用Calico或Flannel的VXLAN模式,减少网络插件对CPU的占用。
  3. 存储方案:优先使用云盘(如AWS EBS、阿里云云盘)而非本地盘,通过StorageClass实现动态卷供应。

二、环境准备与节点规划

1. 服务器选型与配置

  • 规格建议:3节点集群(1主2从),主节点至少2核4GB,从节点1核2GB。
  • 操作系统:Ubuntu 22.04 LTS(内核≥5.4)或CentOS Stream 9,禁用Swap(swapoff -a)。
  • 网络要求:确保节点间内网互通,开放端口6443(API Server)、10250(Kubelet)、2379-2380(etcd)。

2. 安装前置工具

  1. # 安装containerd(替代Docker)
  2. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  3. overlay
  4. br_netfilter
  5. EOF
  6. sudo modprobe overlay br_netfilter
  7. curl -fsSL https://get.docker.com | sh - # 或直接安装containerd
  8. sudo apt-get install -y containerd
  9. sudo mkdir -p /etc/containerd
  10. containerd config default | sudo tee /etc/containerd/config.toml
  11. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  12. sudo systemctl restart containerd

三、k8s集群搭建步骤

1. 使用kubeadm初始化主节点

  1. # 安装kubeadm/kubelet/kubectl
  2. sudo apt-get update
  3. sudo apt-get install -y apt-transport-https ca-certificates curl
  4. curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
  5. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  6. sudo apt-get update
  7. sudo apt-get install -y kubelet kubeadm kubectl
  8. # 初始化集群(忽略Swap警告)
  9. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
  10. mkdir -p $HOME/.kube
  11. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  12. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2. 部署CNI网络插件

以Calico为例:

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

3. 加入工作节点

在主节点执行:

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

在工作节点执行输出的命令,例如:

  1. kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  2. --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

四、轻量环境下的优化实践

1. 资源限制配置

通过LimitRangeResourceQuota控制资源使用:

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

2. 高可用改造方案

  • etcd集群化:将etcd部署到独立节点或使用云服务商的托管etcd。
  • 负载均衡:使用Nginx Ingress替代NodePort,减少节点端口占用。

3. 监控与日志方案

  • Prometheus适配:调整--storage.tsdb.retention.time=7d减少磁盘占用。
  • 日志聚合:使用Fluentd+Elasticsearch轻量版,禁用非关键日志收集。

五、常见问题与解决方案

  1. 节点NotReady状态

    • 检查kubectl get nodes输出,确认KUBELET_CONFIG_ARGS是否包含--node-status-update-frequency=10s
    • 验证/var/lib/kubelet/kubeadm-flags.env配置。
  2. Pod调度失败

    • 使用kubectl describe node <node-name>查看资源剩余量。
    • 通过kubectl taint nodes <node-name> key=value:NoSchedule隔离故障节点。
  3. API Server超时

    • 调整/etc/kubernetes/manifests/kube-apiserver.yaml中的--default-not-ready-toleration-seconds--default-unreachable-toleration-seconds参数。

六、成本优化建议

  1. 按需实例选择:利用云服务商的“按使用量计费”模式,配合自动伸缩组(ASG)。
  2. 镜像优化:使用distrolessalpine基础镜像,减少镜像体积。
  3. 定时启停:通过CRON任务在非工作时间暂停非关键节点:
    1. # 停止节点
    2. sudo systemctl stop kubelet containerd
    3. # 启动节点
    4. sudo systemctl start containerd kubelet

通过上述方法,开发者可在轻量应用服务器上构建出稳定、高效的k8s集群,实现开发测试环境的快速迭代与成本控制。实际部署中需持续监控集群状态,根据业务负载动态调整资源配置。

相关文章推荐

发表评论