轻量云上的K8s革命:低成本构建高可用容器集群指南
2025.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 基础环境配置
# 禁用Swap(K8s要求)sudo swapoff -a# 修改内核参数echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.confsudo sysctl -p# 安装依赖工具sudo apt update && sudo apt install -y \conntrack \ebtables \socat \ipset \apt-transport-https \ca-certificates \curl
2.2 容器运行时部署
推荐使用containerd 1.7+版本:
# 添加Docker官方GPG密钥(containerd包含在Docker安装包中)curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 添加软件源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# 安装containerdsudo apt update && sudo apt install -y containerd.io# 配置containerdsudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml# 修改配置启用systemd cgroup驱动sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml# 重启服务sudo systemctl restart containerd
2.3 K8s安装工具选择
对比kubeadm、kops、microk8s等工具:
- kubeadm:官方推荐,适合生产环境(需手动处理存储、网络插件)
- microk8s:开箱即用,包含完整插件(内存占用较高)
- k3s:轻量级发行版(适合IoT设备,非标准K8s API)
本方案采用kubeadm 1.28+版本,其最新特性包括:
- 动态资源分配(DRA)支持
- 改进的节点排空机制
- 更高效的证书轮换
三、集群初始化与配置
3.1 控制平面初始化
# 设置主机名解析echo "192.168.1.10 master" | sudo tee -a /etc/hosts# 初始化集群(使用Calico网络)sudo kubeadm init --pod-network-cidr=192.168.0.0/16 \--control-plane-endpoint=master:6443 \--kubernetes-version=v1.28.4 \--ignore-preflight-errors=NumCPU# 配置kubectlmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
3.2 工作节点加入
在控制平面生成加入令牌:
kubeadm token create --print-join-command
在工作节点执行返回的命令,示例:
kubeadm join master:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3.3 网络插件部署
推荐Calico方案(需根据实际CIDR调整):
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml# 验证网络状态kubectl get pods -n kube-system | grep calico
四、集群优化与运维实践
4.1 资源限制配置
创建MemoryRequestCPURequest限制:
apiVersion: v1kind: LimitRangemetadata:name: mem-cpu-limit-rangenamespace: defaultspec:limits:- default:cpu: 500mmemory: 512MidefaultRequest:cpu: 100mmemory: 128Mitype: Container
4.2 高可用改造
采用keepalived+haproxy方案实现API服务器高可用:
# 在两个控制节点安装keepalivedsudo apt install -y keepalived# 配置VIP(示例配置片段)cat <<EOF | sudo tee /etc/keepalived/keepalived.confvrrp_script chk_apiserver {script "curl -s --fail https://localhost:6443/"interval 3weight -2fall 2rise 2}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass password}virtual_ipaddress {192.168.1.200}track_script {chk_apiserver}}EOF
4.3 监控体系搭建
部署Prometheus Operator:
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.68.0/bundle.yaml# 配置Node Exporter和kube-state-metrics
五、常见问题解决方案
5.1 证书过期处理
当出现x509: certificate has expired错误时:
# 备份旧证书sudo cp /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/apiserver.crt.bak# 生成新证书sudo kubeadm certs renew apiserver# 重启关键服务sudo systemctl restart kubelet containerd
5.2 节点NotReady状态排查
执行诊断流程:
- 检查kubelet日志:
journalctl -u kubelet -n 100 - 验证网络连通性:
ping <API_SERVER_IP> - 检查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)
六、成本优化建议
- 竞价实例利用:在非关键工作负载中使用Spot实例,成本可降低60-80%
- 资源配额管理:通过Namespace隔离资源,避免单个应用占用过多资源
- 自动伸缩策略:配置Cluster Autoscaler根据负载动态调整节点数量
- 镜像优化:使用Distroless或静态编译镜像减少体积(典型Go应用镜像可压缩至10MB以内)
通过以上方案,可在轻量应用服务器上构建满足生产环境要求的K8s集群。实际测试显示,3节点集群(1控2工)可稳定运行200+个Pod,每月成本控制在200元以内(以国内云厂商价格计算)。建议定期执行kubectl top nodes和kubectl get cs进行健康检查,确保集群长期稳定运行。

发表评论
登录后可评论,请前往 登录 或 注册