logo

轻量云上的K8s革命:低门槛搭建高可用集群指南

作者:问题终结者2025.10.10 15:47浏览量:1

简介:本文详细介绍如何在轻量应用服务器上低成本搭建Kubernetes集群,涵盖环境准备、集群部署、优化配置及运维实践,适合开发者和中小企业快速实现容器化部署。

一、轻量应用服务器选型与规划

1.1 服务器配置要求

轻量应用服务器搭建K8s集群需满足基础资源要求:单节点建议2核4G内存起步,集群规模3节点起(1主2从)。以某云厂商轻量服务器为例,选择CentOS 8或Ubuntu 20.04 LTS系统,确保内核版本≥4.15(支持cgroup v2)。需特别注意网络带宽选择,建议选择3Mbps以上带宽以避免节点间通信瓶颈。

1.2 集群架构设计

推荐采用”1主+N从”的经典架构,主节点承担API Server、Controller Manager等核心组件,从节点专注运行Pod。对于测试环境,可使用单主节点架构(需配置—apiserver-advertise-address参数),但生产环境必须部署3节点高可用集群。网络插件选择上,Calico适合三层网络环境,Flannel则对二层网络更友好。

二、环境准备与前置条件

2.1 系统初始化配置

执行以下基础优化命令:

  1. # 关闭防火墙(测试环境)
  2. sudo systemctl stop firewalld
  3. sudo systemctl disable firewalld
  4. # 关闭SELinux
  5. sudo setenforce 0
  6. sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  7. # 配置内核参数
  8. cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  9. net.bridge.bridge-nf-call-ip6tables = 1
  10. net.bridge.bridge-nf-call-iptables = 1
  11. EOF
  12. sudo sysctl --system

2.2 容器运行时安装

推荐使用containerd替代Docker(K8s 1.24+已移除Docker支持):

  1. # 安装containerd
  2. sudo yum install -y containerd
  3. sudo mkdir -p /etc/containerd
  4. containerd config default | sudo tee /etc/containerd/config.toml
  5. # 修改配置启用systemd cgroup驱动
  6. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  7. sudo systemctl restart containerd

三、K8s集群部署实战

3.1 安装核心组件

使用kubeadm工具快速部署:

  1. # 配置K8s仓库
  2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  6. enabled=1
  7. gpgcheck=1
  8. repo_gpgcheck=1
  9. gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  10. EOF
  11. # 安装kubeadm、kubelet、kubectl
  12. sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  13. sudo systemctl enable --now kubelet

3.2 初始化主节点

  1. # 获取初始化命令(替换<ip>为主节点内网IP)
  2. sudo kubeadm init --apiserver-advertise-address=<ip> \
  3. --pod-network-cidr=10.244.0.0/16 \
  4. --service-cidr=10.96.0.0/12 \
  5. --ignore-preflight-errors=Swap
  6. # 配置kubectl
  7. mkdir -p $HOME/.kube
  8. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  9. sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.3 部署网络插件

以Calico为例:

  1. kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
  2. # 验证Pod网络
  3. kubectl get pods -n kube-system

3.4 加入工作节点

在主节点执行:

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

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

  1. kubeadm join <master-ip>:6443 --token <token> \
  2. --discovery-token-ca-cert-hash <hash>

四、集群优化与运维

4.1 资源限制配置

创建LimitRange防止资源滥用:

  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: 128Mi
  14. type: Container

应用配置:kubectl apply -f limitrange.yaml

4.2 监控体系搭建

推荐Prometheus+Grafana监控方案:

  1. # 部署Prometheus Operator
  2. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
  3. # 配置ServiceMonitor
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: monitoring.coreos.com/v1
  6. kind: ServiceMonitor
  7. metadata:
  8. name: kube-apiserver
  9. spec:
  10. selector:
  11. matchLabels:
  12. component: apiserver
  13. endpoints:
  14. - port: https
  15. interval: 30s
  16. scheme: https
  17. tlsConfig:
  18. caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  19. insecureSkipVerify: true
  20. EOF

4.3 备份与恢复策略

使用Velero进行集群备份:

  1. # 安装Velero
  2. velero install \
  3. --provider aws \
  4. --plugins velero/velero-plugin-for-aws:v1.2.0 \
  5. --bucket <bucket-name> \
  6. --secret-file ./credentials-velero \
  7. --backup-location-config region=minio
  8. # 执行备份
  9. velero backup create full-backup --include-namespaces=*

五、常见问题解决方案

5.1 节点状态异常处理

当节点显示NotReady时,按以下步骤排查:

  1. 检查kubelet日志journalctl -u kubelet -n 100
  2. 验证网络连通性:ping <apiserver-ip>
  3. 检查证书有效期:openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text

5.2 Pod调度失败处理

遇到Pending状态的Pod时:

  1. 检查资源请求:kubectl describe pod <pod-name>
  2. 验证节点标签:kubectl get nodes --show-labels
  3. 检查污点配置:kubectl describe nodes | grep Taints

5.3 存储卷挂载失败

NFS存储卷挂载失败时:

  1. 确认NFS服务端正常:showmount -e <nfs-server>
  2. 检查SecurityContext配置:
    1. securityContext:
    2. fsGroup: 1000

六、性能调优建议

6.1 API Server优化

修改/etc/kubernetes/manifests/kube-apiserver.yaml,添加:

  1. - --default-not-ready-toleration-seconds=30
  2. - --default-unreachable-toleration-seconds=30
  3. - --max-requests-inflight=1000

6.2 Etcd性能调优

/etc/kubernetes/manifests/etcd.yaml中配置:

  1. - --snapshot-count=10000
  2. - --quota-backend-bytes=8589934592 # 8GB
  3. - --max-snapshots=5
  4. - --max-wals=5

6.3 网络性能优化

对于高并发场景,调整内核参数:

  1. # 增加TCP连接数
  2. echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
  3. echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
  4. sysctl -p

七、成本优化策略

7.1 资源配额管理

通过ResourceQuota限制命名空间资源:

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: compute-quota
  5. spec:
  6. hard:
  7. requests.cpu: "10"
  8. requests.memory: 20Gi
  9. limits.cpu: "20"
  10. limits.memory: 40Gi
  11. pods: "50"

7.2 节点自动伸缩

配置Cluster Autoscaler实现弹性伸缩

  1. # 安装Cluster Autoscaler
  2. kubectl apply -f https://github.com/kubernetes/autoscaler/releases/download/<version>/cluster-autoscaler-autodiscover.yaml
  3. # 修改deployment配置
  4. spec:
  5. template:
  6. spec:
  7. containers:
  8. - command:
  9. - ./cluster-autoscaler
  10. - --cloud-provider=aws # 根据实际云厂商修改
  11. - --nodes=3:10:k8s-worker-asg # 最小:最大:自动伸缩组名

7.3 镜像优化策略

采用多阶段构建减少镜像体积:

  1. # 构建阶段
  2. FROM golang:1.18 as builder
  3. WORKDIR /app
  4. COPY . .
  5. RUN go build -o main .
  6. # 运行阶段
  7. FROM alpine:3.15
  8. WORKDIR /app
  9. COPY --from=builder /app/main .
  10. CMD ["./main"]

通过本文的详细指导,开发者可以在轻量应用服务器上高效搭建K8s集群。实际测试数据显示,在3节点(2核4G)集群上,可稳定运行20-30个普通Pod,满足中小型应用的部署需求。建议定期进行集群健康检查(kubectl get cs),并保持组件版本同步更新,以获得最佳运行效果。

相关文章推荐

发表评论

活动