logo

轻量服务器公网部署:K8s集群实战指南

作者:快去debug2025.10.10 15:47浏览量:0

简介:本文详细阐述如何在轻量应用服务器公网环境下搭建Kubernetes集群,涵盖环境准备、安全加固、组件安装及运维优化全流程,提供可落地的技术方案。

一、轻量服务器特性与K8s适配性分析

轻量应用服务器(如阿里云ECS轻量版、腾讯云轻量服务器)以低资源占用、高性价比和快速部署为特点,其典型配置为1核2G-4核8G内存,适合中小规模K8s集群搭建。相较于物理机或高配云服务器,轻量服务器在K8s部署中需重点解决三大问题:

  1. 资源限制:单节点内存不足可能导致etcd性能下降,需通过调整--etcd-memory-limit参数(默认1GB)和关闭非必要组件(如dashboard)优化资源使用。
  2. 网络带宽:公网环境需考虑跨节点通信延迟,建议使用WireGuard或IPSec VPN构建内网隧道,将Pod间通信限制在私有网络
  3. 存储方案:轻量服务器通常不提供块存储接口,可采用Longhorn(轻量级分布式存储)或NFS共享存储方案,示例配置如下:
    1. # Longhorn存储类示例
    2. apiVersion: storage.k8s.io/v1
    3. kind: StorageClass
    4. metadata:
    5. name: longhorn
    6. provisioner: driver.longhorn.io
    7. parameters:
    8. numberOfReplicas: "2"
    9. staleReplicaTimeout: "2880" # 48小时

二、公网环境安全加固方案

1. 基础防护层

  • 防火墙规则:仅开放必要端口(6443-K8s API、2379-2380-etcd、10250-kubelet),使用ufw示例:
    1. sudo ufw allow 6443/tcp
    2. sudo ufw allow 2379:2380/tcp
    3. sudo ufw enable
  • SSH密钥认证:禁用密码登录,生成ED25519密钥对:
    1. ssh-keygen -t ed25519 -C "k8s-admin"
    2. # 将公钥添加至~/.ssh/authorized_keys

2. K8s安全组件

  • RBAC权限控制:创建最小权限ServiceAccount,示例限制deployment读写权限:
    ```yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
    name: deploy-sa

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: deploy-role
rules:

  • apiGroups: [“apps”]
    resources: [“deployments”]
    verbs: [“get”, “list”, “create”, “update”]

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: deploy-binding
subjects:

  • kind: ServiceAccount
    name: deploy-sa
    roleRef:
    kind: Role
    name: deploy-role
    ```
  • 网络策略:使用Calico实现Pod级隔离,示例禁止跨命名空间通信:
    1. apiVersion: networking.k8s.io/v1
    2. kind: NetworkPolicy
    3. metadata:
    4. name: default-deny
    5. spec:
    6. podSelector: {}
    7. policyTypes:
    8. - Ingress

三、K8s集群部署实战

1. 节点初始化

  • 系统准备(以Ubuntu 22.04为例):
    1. # 禁用交换分区
    2. sudo swapoff -a
    3. # 修改内核参数
    4. echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
    5. sudo sysctl -p

2. 使用kubeadm安装集群

  • 主节点初始化

    1. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
    2. --apiserver-advertise-address=<公网IP> \
    3. --control-plane-endpoint=<公网域名IP>:6443
    4. # 配置kubectl
    5. mkdir -p $HOME/.kube
    6. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    7. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 工作节点加入

    1. sudo kubeadm join <控制平面IP>:6443 --token <token> \
    2. --discovery-token-ca-cert-hash sha256:<hash值>

3. 网络插件部署

推荐使用Flannel(轻量级)或Calico(支持网络策略):

  1. # Flannel部署
  2. kubectl apply -f https://github.com/flannel-io/cni-plugins/releases/latest/download/flannel.yml
  3. # Calico部署
  4. kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

四、高可用与运维优化

1. 控制平面高可用

  • 多主节点架构:使用kubeadm创建3节点控制平面,通过keepalived实现VIP漂移:
    1. # keepalived配置示例
    2. vrrp_script chk_apiserver {
    3. script "curl -f http://127.0.0.1:6443/"
    4. interval 3
    5. weight -2
    6. fall 2
    7. rise 2
    8. }
    9. vrrp_instance VI_1 {
    10. interface eth0
    11. state MASTER
    12. virtual_router_id 51
    13. priority 101
    14. virtual_ipaddress {
    15. <VIP>/24
    16. }
    17. track_script {
    18. chk_apiserver
    19. }
    20. }

2. 监控告警体系

  • Prometheus+Grafana部署
    1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    2. helm install prometheus prometheus-community/kube-prometheus-stack
  • 关键指标告警规则
    ```yaml
    groups:
  • name: node-memory
    rules:
    • alert: NodeMemoryUsage
      expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
      for: 5m
      labels:
      severity: warning
      annotations:
      summary: “Node {{ $labels.instance }} memory usage high”
      ```

五、典型问题解决方案

  1. Pod无法调度:检查节点资源状态kubectl describe nodes,调整--kube-reserved--system-reserved参数。
  2. API Server超时:增加--kube-api-qps--kube-api-burst参数值(默认5/10)。
  3. 证书过期:使用kubeadm certs renew all自动更新证书,需提前备份/etc/kubernetes/pki目录。

六、成本优化建议

  1. 按需扩容:使用K8s Horizontal Pod Autoscaler(HPA)结合自定义指标:
    1. apiVersion: autoscaling/v2
    2. kind: HorizontalPodAutoscaler
    3. metadata:
    4. name: nginx-hpa
    5. spec:
    6. scaleTargetRef:
    7. apiVersion: apps/v1
    8. kind: Deployment
    9. name: nginx
    10. minReplicas: 2
    11. maxReplicas: 10
    12. metrics:
    13. - type: Resource
    14. resource:
    15. name: cpu
    16. target:
    17. type: Utilization
    18. averageUtilization: 70
  2. 资源回收:配置Terminating状态Pod快速清理:
    1. # 修改kube-controller-manager参数
    2. --terminated-pod-gc-threshold=100 # 默认12500

通过上述方案,可在轻量应用服务器上构建稳定、安全的K8s集群。实际部署时需根据业务负载动态调整参数,建议通过Prometheus监控持续优化资源配置。对于生产环境,建议采用托管K8s服务(如ACK、GKE)以降低运维复杂度,但在开发测试阶段,轻量服务器方案可节省70%以上成本。

相关文章推荐

发表评论

活动