首页 虚拟现实

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)

分类:虚拟现实
字数: (8383)
阅读: (0653)
内容摘要:K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus),

在企业级环境中,Kubernetes (K8s) 已经成为微服务架构的事实标准。本文将深入探讨如何从零开始搭建一个生产级别的 K8s 集群,并使用 Ingress 暴露微服务,最后集成 Prometheus 实现监控告警。

集群搭建:从裸机到容器编排

基础环境准备

首先,我们需要准备至少三台服务器(建议四核 8G 内存起步),操作系统选择 CentOS 7 或 Ubuntu 20.04。确保服务器之间网络互通,并关闭防火墙或开放必要的端口(6443, 2379-2380, 10250-10252, 30000-32767)。

安装 Docker 和 Kubeadm

在所有节点上安装 Docker 和 Kubeadm 工具。

# 以 CentOS 7 为例
yum install -y docker
systemctl start docker
systemctl enable docker

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet

初始化 Kubernetes 集群

在一台服务器上作为 Master 节点执行以下命令进行初始化:

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)
kubeadm init --apiserver-advertise-address=<Master 节点 IP> --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 安装 Calico 网络插件(或其他 CNI 插件)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

记录下 kubeadm join 命令,用于将其他节点加入集群。

加入 Worker 节点

在其他服务器上执行 kubeadm join 命令,将它们加入到 Kubernetes 集群。

kubeadm join <Master 节点 IP>:<端口> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

验证集群状态

在 Master 节点上执行 kubectl get nodes 命令,确认所有节点都处于 Ready 状态。

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)

微服务暴露:Ingress 的配置与使用

安装 Ingress Controller

Ingress Controller 负责将外部流量路由到集群内部的微服务。这里我们选择使用 Nginx Ingress Controller。 在K8S集群中, 提到Nginx,不可避免的会想到反向代理,负载均衡,以及面对高并发场景下,对Nginx的配置优化,例如调整worker_processes,worker_connections 等参数。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

配置 Ingress 规则

假设我们有一个名为 myapp 的微服务,它的 Service 名称是 myapp-service,监听端口是 80。我们可以创建一个 Ingress 资源来暴露它:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.example.com # 修改为你自己的域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

将以上内容保存为 myapp-ingress.yaml 文件,然后执行 kubectl apply -f myapp-ingress.yaml 命令创建 Ingress 资源。

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)

DNS 解析

将域名 myapp.example.com 解析到 Ingress Controller 的外部 IP 地址。

监控告警:Prometheus 监控体系搭建

安装 Prometheus

使用 Helm 安装 Prometheus Operator:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack

配置 ServiceMonitor

ServiceMonitor 用于监控特定的 Service。例如,要监控 myapp-service,可以创建以下 ServiceMonitor 资源:

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: myapp-servicemonitor
  labels:
    release: prometheus
spec:
  selector:
    matchLabels:
      app: myapp # 匹配 myapp-service 的 labels
  endpoints:
  - port: web # 监控的端口名称
    interval: 30s

配置 Alertmanager

Alertmanager 负责接收 Prometheus 的告警,并根据配置的规则进行通知。可以通过修改 prometheus-kube-prometheus-alertmanager 的 ConfigMap 来配置告警规则。

实战避坑经验总结

  • 网络问题:确保集群内部网络互通,CNI 插件配置正确。
  • 资源限制:合理设置 Pod 的资源限制 (CPU/Memory),防止资源耗尽。
  • 版本兼容性:注意各个组件的版本兼容性,例如 Kubernetes 版本、Ingress Controller 版本、Prometheus Operator 版本等。
  • 监控覆盖率:确保监控覆盖到所有关键指标,例如 CPU 使用率、内存使用率、磁盘 IO、网络流量、应用响应时间等。
  • 告警阈值:合理设置告警阈值,避免误报和漏报。 对于企业级应用来说,经常使用的宝塔面板也是一种快速部署和管理服务器的方式,但需要注意安全配置。

通过本文,你应该能够成功搭建一个企业级的 K8s 集群,并使用 Ingress 暴露微服务,最后集成 Prometheus 实现监控告警。记住,实践是检验真理的唯一标准,多动手尝试才能真正掌握这些技术。

K8s 实战:从零搭建企业级微服务平台(Ingress + Prometheus)

转载请注明出处: 程序员老猫

本文的链接地址: http://m.acea1.store/blog/041220.SHTML

本文最后 发布于2026-04-08 09:58:48,已经过了19天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 拖延症晚期 4 天前
    写得真不错,正好解决了我在 K8s 集群搭建时遇到的网络问题,感谢!
  • 芒果布丁 12 小时前
    大佬,问下 Calico 网络插件有什么需要注意的地方吗?我部署完 Pod 总是 Pending。