轻量云服务器公网部署K8s:低成本实现容器化集群
2025.09.23 14:23浏览量:0简介:本文详细阐述如何在轻量应用服务器公网环境下搭建Kubernetes集群,涵盖环境准备、网络配置、安全加固及生产级优化方案,适合中小团队低成本实践容器化部署。
一、轻量应用服务器与K8s的适配性分析
轻量应用服务器(如AWS Lightsail、阿里云轻量服务器、腾讯云轻量应用服务器)以低配资源(1-4核CPU、1-8GB内存)和包年包月定价模式,成为中小规模K8s实验的理想选择。相比传统云服务器,轻量服务器成本降低60%-70%,但需解决资源限制带来的挑战。
典型场景适配:
- 开发测试环境:快速搭建隔离的K8s沙箱
- 个人项目部署:运行博客、API服务等轻量级应用
- 边缘计算节点:作为主集群的补充计算资源
核心限制:
- 单节点资源有限(建议单节点不超过2个Pod)
- 磁盘I/O性能较弱(需优化etcd存储)
- 公网带宽通常为1-5Mbps(需限制集群间通信流量)
二、公网环境搭建前的关键准备
1. 网络拓扑设计
采用”控制平面内网+工作节点公网”的混合架构:
graph TD
A[Master节点] -->|内网IP| B[Etcd集群]
A -->|公网IP| C[Worker节点1]
A -->|公网IP| D[Worker节点2]
E[负载均衡器] -->|443| A
- Master节点配置双网卡:内网用于集群通信,公网用于API访问
- Worker节点仅需公网IP,通过
--node-ip
参数指定内网通信地址(如有)
2. 安全组配置
必须开放的端口:
- TCP 6443 (Kubernetes API Server)
- TCP 2379-2380 (etcd client/server)
- TCP 10250 (Kubelet API)
- TCP 10255 (ReadOnly Kubelet API)
- UDP 8472 (Flannel VXLAN)
建议限制源IP范围,仅允许管理终端和跳板机访问控制平面。
3. 镜像选择策略
优先使用精简版操作系统:
- Ubuntu Server 22.04 LTS (最小安装)
- Alpine Linux 3.18+
- CoreOS Container Linux(已停止更新,不推荐新项目)
容器镜像需满足:
- 单容器内存不超过节点总内存的50%
- 镜像层数控制在10层以内
- 使用多阶段构建减少最终镜像大小
三、分步搭建流程(以Ubuntu为例)
1. 基础环境初始化
# 更新系统并安装依赖
sudo apt update && sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
socat \
conntrack \
ebtables \
ipset
# 禁用交换分区(K8s要求)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. 安装容器运行时
推荐使用containerd(资源占用比Docker少30%):
# 安装containerd
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 配置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
# 安装containerd
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/containerd.list
sudo apt update
sudo apt install -y containerd.io
# 配置containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
sudo systemctl restart containerd
3. 安装Kubernetes组件
# 添加K8s仓库
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 安装kubeadm/kubelet/kubectl
sudo apt update
sudo apt install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化控制平面(单节点测试)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 网络插件部署(Calico示例)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
# 修改Calico的MTU设置(适应轻量服务器带宽)
kubectl set env daemonset/calico-node -n kube-system FELIX_IPINIPMTU=1400
四、生产环境优化方案
1. 资源限制配置
# 创建LimitRange防止资源滥用
apiVersion: v1
kind: LimitRange
metadata:
name: mem-cpu-limit
namespace: default
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 100m
memory: 128Mi
type: Container
2. 高可用改造
- 使用
kubeadm join
添加多个控制平面节点 - 配置etcd集群外置(需额外轻量服务器)
- 部署Haproxy+Keepalived实现API Server负载均衡
3. 监控体系搭建
# 部署Prometheus Operator
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.67.1/bundle.yaml
# 配置Node Exporter和kube-state-metrics
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.67.1/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.67.1/example/user-guides/getting-started/prometheus-example.yaml
五、常见问题解决方案
Pod启动失败:检查
kubectl describe pod <pod-name>
中的Events,常见原因包括:- 镜像拉取失败(检查网络和镜像仓库权限)
- 资源不足(使用
kubectl top nodes
查看) - CNI插件故障(检查
calico-node
日志)
API Server不可用:
- 检查安全组是否放行6443端口
- 验证
/etc/kubernetes/manifests/kube-apiserver.yaml
配置 - 查看
journalctl -u kubelet
日志
节点状态NotReady:
- 确认
kubelet
服务运行正常 - 检查
/var/lib/kubelet/kubeadm-flags.env
配置 - 验证网络插件Pod状态
- 确认
六、成本优化建议
- 使用Spot实例(部分云厂商支持轻量服务器的竞价模式)
- 采用Pod垂直自动扩缩(VPA)替代水平扩缩(HPA)
- 配置镜像缓存(如使用Nexus或Harbor私有仓库)
- 实施Pod反亲和性策略避免资源争抢
- 定期清理未使用的PV和镜像
通过以上方案,开发者可在轻量应用服务器上构建满足生产基本需求的K8s集群,实现容器化应用的快速迭代和资源高效利用。实际部署时建议先在单节点环境验证,再逐步扩展到多节点架构。
发表评论
登录后可评论,请前往 登录 或 注册