1. 总体架构与规划(先做设计再动手)
- 目标:明确服务类型(Web、API、DB)、SLA、峰值并发、容错要求。
- 输出:节点数量估算(控制平面+工作节点+DB/缓存节点)、公网/内网IP需求、备份及故障切换策略。
- 建议产出清单:网络拓扑图、IP段、子网、防火墙策略、监控指标阈值。
2. 在 CNCCSK 香港VPS 上批量开通实例(通过控制台或API)
- 控制台:选择镜像、带宽、磁盘、CPU/RAM,创建私有网络(VPC),分配内网IP。
- 推荐使用API/CLI自动化:编写脚本调用 CNCCSK 提供的 API(示例伪代码)以批量创建:curl -X POST https://api.cnccsk/instances -d '{ ... }'。将返回的IP、密码写入 inventory 文件。
3. SSH 与账号安全(第一步登陆与硬化)
- 生成密钥并分发:ssh-keygen -t rsa -b 4096; 使用 ssh-copy-id 或通过 cloud-init 把公钥写入~/.ssh/authorized_keys。
- 禁止密码登录:编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no,Restart sshd。
- 添加防爆破:安装 fail2ban,设置 sshd 规则;限制 root 登录 PermitRootLogin no。
4. 内网网络与安全组配置(隔离与访问控制)
- VPC 与子网:在控制台建私有网络,划分管理网与业务网。
- 安全组示例:管理网只允许运维IP的22/8300,业务网允许80/443/应用端口,数据库端口仅允许来自应用节点。
- 主机防火墙:使用 ufw/iptables,示例:ufw allow proto tcp from 10.0.0.0/24 to any port 3306。
5. 使用配置管理工具批量引导(Ansible 实战)
- 准备 inventory(hosts),并写 playbook 安装基础包:Python、docker、ntp、chrony。
- 示例任务片段:- name: install docker apt: name=docker.io state=latest become: yes
- 用 playbook 处理用户、ssh key、时间同步、内核参数(net.ipv4.ip_forward=1)等。
6. 容器化与编排(选择 Kubernetes + kubeadm 引导)
- 在每台机器安装 Docker 与 kubeadm/kubelet/kubectl(apt 或 yum)。
- 初始化控制平面(主节点):kubeadm init --apiserver-advertise-address=
--pod-network-cidr=192.168.0.0/16。保存 kubeadm join 命令。
- 安装 CNI(Calico/Flannel):kubectl apply -f calico.yaml。然后在 worker 上执行 kubeadm join ...。
7. 外部访问与负载均衡(HAProxy + Keepalived / nginx-ingress)
- 建议架构:两台或多台负载均衡器(HAProxy + Keepalived)放在前端,指向后端 ingress-controller 或应用节点。
- HAProxy 示例片段:frontend http_in bind *:80 default_backend web_back;backend web_back server web1 10.0.1.11:80 check。
- Keepalived 用于 VIP 漂移,确保单点故障切换。
8. 数据库与缓存的高可用部署(MySQL 主从/主主 或 Galera,Redis Sentinel)
- MySQL 主从:在主库执行 SHOW MASTER STATUS;在从库配置 CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='replica', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=xxxx;启动 slave。
- Redis Sentinel:部署至少3个 sentinel 节点,sentinel.conf 指定 monitor mymaster 127.0.0.1 6379 2。
9. 监控、日志与告警体系(Prometheus + Grafana + EFK)
- 节点监控:部署 node_exporter(systemd unit),Prometheus 抓取:- job_name: 'node' static_configs: - targets: ['10.0.1.11:9100']。
- 集群监控:部署 kube-state-metrics、cAdvisor。用 Grafana 导入 Dashboard。
- 日志收集:部署 EFK(Elasticsearch + Fluentd + Kibana)或 Loki/Promtail/Grafana;将日志按服务标签索引。
- 告警:Alertmanager 配置邮件/钉钉/Slack 告警策略。
10. 自动扩容策略(基于监控指标的 API 自动化扩容)
- 原理:Prometheus 告警触发自定义脚本 -> 调用 CNCCSK API 创建新 VPS -> 新实例通过 cloud-init 执行 join 脚本自动加入集群。
- 实例脚本要点:1) 通过 cloud-init 执行 kubeadm join;2) 安装监控 agent;3) 注册到负载均衡(或自动在 LB 后端注册)。
- 示例流程:Prometheus Alertmanager webhook -> 接收服务 -> 调用 provision.sh (curl -X POST CNCCSK API) -> 等待 SSH 可达 -> ansible 执行后续配置。
11. 备份与灾难恢复(etcd、数据库、文件)
- etcd 快照(Kubeadm 集群):ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 snapshot save /opt/backup/etcd-$(date +%F).db。定期上传到对象存储。
- 数据库:mysqldump 或使用物理备份 Percona XtraBackup;每日/每小时差异备份并复制到异地。
- 恢复演练:每季度做一次从快照恢复演练,记录恢复时间(RTO/RPO)。
12. 维护与运维流程(版本、补丁、回滚)
- 补丁策略:测试环境先升级节点,使用滚动升级(cordon -> drain -> upgrade node -> uncordon)。
- 回滚:使用 Deployment 的 revision 回滚(kubectl rollout undo deployment/xxx)。对数据库采用延迟从库做安全回滚点。
- 文档与 Runbook:把常用操作、故障处理流程写成 Runbook,放入版本控制。
13. 常见问题问答:如何处理节点宕机自动恢复?(问答)
问:节点宕机自动恢复流程是什么?
答:首先 Prometheus/监控检测到节点 5 分钟不可达触发告警;运维系统(或自动化脚本)先移除该节点流量(在 LB/Ingress 中下线),然后调用 CNCCSK API 启动新实例,cloud-init 自动执行 join 流程,待健康检查通过后将其加入负载池;若节点不可修复,终止并替换。
14. 常见问题问答:如何安全扩容并保证数据库一致性?(问答)
问:扩容时如何保证数据库的一致性和性能不受影响?
答:扩容应用层之前先评估 DB 负载,如果 DB 成为瓶颈,应先做数据库扩展(从库追加/读写分离/分片);扩容新应用实例时采用滚动发布并限制并发接入;在关键写操作处增加幂等处理;对跨节点事务使用重试与补偿机制。
15. 常见问题问答:怎样做成本与容量的长期规划?(问答)
问:运维团队如何做长期的成本与容量规划?
答:定期(每月/每季度)汇总监控指标(CPU/内存/带宽/存储增长),做趋势预测;按业务低峰/高峰制定弹性策略(例如非高峰关停测试/备用节点);使用自动化弹性扩缩容脚本控制按需启停,并对常用规格做成本对比选择最优实例类型。
来源:运维团队如何管理和扩展 CNCCSK香港vps 集群架构