Kubernetes1.27容器化部署Prometheus

GitHub链接

https://github.com/prometheus-operator/kube-prometheus

根据自己的k8s版本选择对应的版本

# git设置代理
git config --global http.proxy IP地址:端口

# 1.27对应的版本为release-0.13
git clone -b release-0.13 https://github.com/prometheus-operator/kube-prometheus.git

cd kube-prometheus/

修改镜像地址

cd manifests

# 可以通过如下命令来查看
ls | xargs -I {} grep -iH "image:" {}

# alertmanager-alertmanager.yaml
quay.io/prometheus/alertmanager:v0.26.0
swr.cn-north-4.myhuaweicloud.com/ctl456/alertmanager:v0.26.0

# blackboxExporter-deployment.yaml
quay.io/prometheus/blackbox-exporter:v0.24.0
swr.cn-north-4.myhuaweicloud.com/ctl456/blackbox-exporter:v0.24.0

jimmidyson/configmap-reload:v0.5.0
swr.cn-north-4.myhuaweicloud.com/ctl456/configmap-reload:v0.5.0

quay.io/brancz/kube-rbac-proxy:v0.14.2
swr.cn-north-4.myhuaweicloud.com/ctl456/kube-rbac-proxy:v0.14.2

# grafana-deployment.yaml
grafana/grafana:9.5.3
swr.cn-north-4.myhuaweicloud.com/ctl456/grafana:9.5.3

# kubeStateMetrics-deployment.yaml
registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2
swr.cn-north-4.myhuaweicloud.com/ctl456/kube-state-metrics:v2.9.2

quay.io/brancz/kube-rbac-proxy:v0.14.2
swr.cn-north-4.myhuaweicloud.com/ctl456/kube-rbac-proxy:v0.14.2

# nodeExporter-daemonset.yaml
quay.io/prometheus/node-exporter:v1.6.1
swr.cn-north-4.myhuaweicloud.com/ctl456/node-exporter:v1.6.1

quay.io/brancz/kube-rbac-proxy:v0.14.2
swr.cn-north-4.myhuaweicloud.com/ctl456/kube-rbac-proxy:v0.14.2

# prometheusAdapter-deployment.yaml
registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.11.1
swr.cn-north-4.myhuaweicloud.com/ctl456/prometheus-adapter:v0.11.1

# prometheusOperator-deployment.yaml
quay.io/prometheus-operator/prometheus-operator:v0.67.1
swr.cn-north-4.myhuaweicloud.com/ctl456/prometheus-operator:v0.67.1

quay.io/brancz/kube-rbac-proxy:v0.14.2
swr.cn-north-4.myhuaweicloud.com/ctl456/kube-rbac-proxy:v0.14.2

# prometheus-prometheus.yaml
quay.io/prometheus/prometheus:v2.46.0
swr.cn-north-4.myhuaweicloud.com/ctl456/prometheus:v2.46.0

部署命令

kubectl apply --server-side -f manifests/setup
kubectl wait \
	--for condition=Established \
	--all CustomResourceDefinition \
	--namespace=monitoring
kubectl apply -f manifests/
# 查看是否全部运行
kubectl get svc,pod -n monitoring

# 修改type为NodePort
kubectl edit svc grafana -n monitoring

# 删除规则
kubectl -n monitoring delete networkpolicy --all


# grafana默认账号密码
admin
admin

对Etcd集群进行监控(云原生监控)

Etcd的Metrics接口需要https协议访问

# 先获取证书文件目录
grep -E "key-file|cert-file" /etc/kubernetes/manifests/etcd.yaml

curl -s --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://IP地址:2379/metrics -k | tail -1

创建Etcd Service

vim etcd-svc.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: etcd-prom
  name: etcd-prom
  namespace: kube-system
spec:
  ports:
  - name: https-metrics
    port: 2379
    protocol: TCP
    targetPort: 2379
  selector: # 添加标签选择器
    component: etcd # 容器etcd的标签
  type: ClusterIP
---
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
  labels:
    app: etcd-prom
    kubernetes.io/service-name: etcd-prom
  name: etcd-prom
  namespace: kube-system
addressType: IPv4
ports:
  - name: https-metrics
    port: 2379
    protocol: TCP
endpoints:
  - addresses:
    - "YOUR_ETCD_IP01" # Etcd集群的IP地址
    - "YOUR_ETCD_IP02"
    - "YOUR_ETCD_IP03"
kubectl apply -f etcd-svc.yaml
kubectl get svc -n kube-system etcd-prom

#通过curl测试访问
curl -s --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key https://CLUSTER-IP:2379/metrics -k | tail -1

在这里插入图片描述

创建Etcd证书的Secret

# 创建Etcd证书的Secret
kubectl create secret generic etcd-ssl --from-file=/etc/kubernetes/pki/etcd/ca.crt --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key -n monitoring

# 将证书挂载到容器里
kubectl edit prometheus k8s -n monitoring

在这里插入图片描述

# 检查是否挂载成功
kubectl exec -n monitoring prometheus-k8s-0 -c prometheus -- ls /etc/prometheus/secrets/etcd-ssl/

在这里插入图片描述

创建Etcd ServiceMonitor

vim servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd
  namespace: monitoring
  labels:
    app: etcd
spec:
  jobLabel: k8s-app
  endpoints:
    - interval: 30s
      port: https-metrics  # 这个port对应 Service.spec.ports.name
      scheme: https
      tlsConfig:
        caFile: /etc/prometheus/secrets/etcd-ssl/ca.crt #证书路径
        certFile: /etc/prometheus/secrets/etcd-ssl/server.crt
        keyFile: /etc/prometheus/secrets/etcd-ssl/server.key
        insecureSkipVerify: true  # 关闭证书校验
  selector:
    matchLabels:
      app: etcd-prom  # 跟Service的lables保持一致
  namespaceSelector:
    matchNames:
    - kube-system
kubectl create -f servicemonitor.yaml

grafana导入模板

在这里插入图片描述在这里插入图片描述

成功截图

在这里插入图片描述
在这里插入图片描述

对MySQL进行监控(非云原生监控)

部署mysql

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - protocol: TCP
      port: 3306
      targetPort: 3306
  selector:
    app: wordpress
    tier: mysql
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
    tier: mysql
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
        - image: swr.cn-north-4.myhuaweicloud.com/ctl456/mysql:5.6
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: changeme
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: tz-config
              mountPath: /etc/localtime
      volumes:
        - name: tz-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
            type: File
# 查看服务是否启动
kubectl get svc,pod

创建用户和权限

kubectl exec -it mysqlpod名称 -- bash
CREATE USER 'exporter'@'%' IDENTIFIED BY 'exporter';
GRANT PROCESS,REPLICATION CLIENT,SELECT ON *.* TO 'exporter'@'%';

配置Exporter

vim mysql-exporter.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-exporter
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: mysql-exporter
  template:
    metadata:
      labels:
        k8s-app: mysql-exporter
    spec:
      containers:
      - name: mysql-exporter
        image: registry.cn-beijing.aliyuncs.com/dotbalo/mysqld-exporter 
        env:
         - name: DATA_SOURCE_NAME
           value: "exporter:exporter@(wordpress-mysql:3306)/" # 用户名:密码@(数据库地址:端口)
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9104
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-exporter
  namespace: monitoring
  labels:
    k8s-app: mysql-exporter
spec:
  type: ClusterIP
  selector:
    k8s-app: mysql-exporter
  ports:
  - name: api
    port: 9104
    protocol: TCP
kubectl apply -f mysql-exporter.yaml

配置ServiceMonitor

vim mysql-sm.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter
  namespace: monitoring
  labels:
    k8s-app: mysql-exporter
    namespace: monitoring
spec:
  jobLabel: k8s-app
  endpoints:
  - port: api
    interval: 30s
    scheme: http
  selector:
    matchLabels:
      k8s-app: mysql-exporter
  namespaceSelector:
    matchNames:
    - monitoring

grafana导入模板

6239

成功截图

在这里插入图片描述在这里插入图片描述

静态配置

创建一个空文件

touch prometheus-additional.yaml

创建secret

kubectl create secret generic additional-config --from-file=prometheus-additional.yaml -n monitoring

编辑Prometheus的配置

kubectl edit prometheus -n monitoring
additionalScrapeConfigs:
    key: prometheus-additional.yaml
    name: additional-config
    optional: true

在这里插入图片描述

编辑prometheus-additional.yaml

vim prometheus-additional.yaml
- job_name: "blackbox"
  metrics_path: /probe
  params:
    module: [http_2xx]
  static_configs:
    - targets:
      - https://www.baidu.com
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: blackbox-exporter:19115
# 更新配置
kubectl create secret generic additional-config --from-file=prometheus-additional.yaml --dry-run=client -o yaml | kubectl replace -f - -n monitoring

grafana导入模板

13659

成功截图

在这里插入图片描述
在这里插入图片描述

监控Windows(外部)主机

下载Windows_exporter并安装

GitHub链接:https://github.com/prometheus-community/windows_exporter/releases
在这里插入图片描述

编辑prometheus-additional.yaml

vim prometheus-additional.yaml
- job_name: "WindowsServerMonitor"
  static_configs:
    - targets:
      - "192.168.1.5:9182" # windowsIP地址
      labels:
        server_type: "windows"
  relabel_configs:
    - source_labels: [__address__]
      target_label: instance
# 更新配置
kubectl create secret generic additional-config --from-file=prometheus-additional.yaml --dry-run=client -o yaml | kubectl replace -f - -n monitoring

grafana导入模板

12566

成功截图

在这里插入图片描述
在这里插入图片描述

Alertmanager告警

Alertmanager邮件通告

cd kube-prometheus/manifests/
vim alertmanager-secret.yaml
# global配置
smtp_from: "xxx@163.com" # 163邮箱地址
smtp_smarthost: "smtp.163.com:465" # 163邮箱SMTP服务器地址
smtp_hello: "163.com"
smtp_auth_username: "xxx@163.com" # 163邮箱地址
smtp_auth_password: "xxxxxx" # 授权码
smtp_require_tls: false

# receivers配置
"email_configs":
- to: "xxxxx" # 收件人邮箱地址
  send_resolved: true

在这里插入图片描述
在这里插入图片描述

# 使配置生效
kubectl replace -f alertmanager-secret.yaml
<think>好的,我现在需要详细阐述DeepSeek-R1的本地集群化部署过程。首先,我需要了解DeepSeek-R1是什么。根据之前的回答,它可能是一个基于深度学习的智能搜索或推荐系统,支持大规模数据处理和高并发请求,适合企业级应用。接下来,我需要思考如何进行本地集群化部署,这可能涉及多个步骤,如环境准备、资源规划、软件安装、配置、测试验证等。 首先,用户可能想知道部署前的准备工作,比如硬件和软件要求。我需要列出必要的服务器配置,如CPU、内存、存储,以及网络要求,比如内网互通、防火墙设置。操作系统方面,可能推荐Linux发行版如CentOS或Ubuntu,并需要安装Docker、Kubernetes容器化工具,以及依赖的库如Python、CUDA等。 然后是资源规划,这部分可能需要考虑节点角色分配,比如管理节点、计算节点、存储节点。资源配额如CPU、内存、GPU的分配,以及存储规划,如分布式存储系统如Ceph或GlusterFS的应用。 接下来是安装与配置步骤。可能包括获取安装包,部署管理节点,配置网络和存储,添加计算节点,设置高可用和负载均衡,以及安全配置如SSL证书和访问控制。 部署后的测试验证需要功能测试、性能测试、压力测试和监控告警的设置,确保集群稳定运行。此外,维护与升级部分需要考虑日常监控、日志管理、备份恢复和版本升级的步骤。 我需要确保每个步骤都详细且逻辑清晰,避免遗漏关键点。例如,在安装管理节点时,可能需要使用Kubernetes进行容器编排,配置数据库和缓存系统。网络配置部分需要说明如何设置Service网络和Pod网络,确保节点间通信。 同时,要注意可能遇到的问题,比如依赖项冲突、网络延迟、资源不足等,在注意事项中提醒用户。例如,不同节点的时间同步,使用NTP服务;硬件兼容性问题;详细的日志记录等。 最后,需要建议用户参考官方文档,因为具体步骤可能因版本不同而有所变化。总结整个流程,确保用户能够按照步骤一步步完成部署,并在遇到问题时知道如何排查。 现在需要将这些思考整理成一个结构化的回答,分步骤详细说明,使用户能够理解并实施DeepSeek-R1的本地集群化部署。</think>以下是DeepSeek-R1本地集群化部署的详细流程,分为核心步骤与关键注意事项,帮助您高效完成部署: --- ### **一、部署前准备** #### **1. 环境要求** - **硬件配置**: - **管理节点**:4核CPU/16GB内存/200GB SSD(建议至少2节点实现高可用)。 - **计算节点**:根据业务负载选择,推荐16核CPU/64GB内存/2TB NVMe SSD,配备NVIDIA A100/A30等GPU(需支持CUDA 11.8+)。 - **存储节点**:多节点组成分布式存储,单节点建议10TB HDD,带宽≥10Gbps。 - **网络要求**: - 节点间内网延迟<1ms,建议万兆网络。 - 开放端口:6443(K8s API)、2379-2380(etcd)、10250(kubelet)、30000-32767(NodePort服务)。 - **操作系统**: - CentOS 7.9+/Ubuntu 20.04 LTS,禁用Swap并配置SELinux策略。 - 内核版本≥5.4,建议开启IO优化参数。 #### **2. 依赖安装** - **容器化工具**: ```bash # 安装Docker 24.0+ & NVIDIA Container Toolkit curl -sSL https://get.docker.com | sh distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list apt-get update && apt-get install -y nvidia-container-toolkit ``` - **Kubernetes集群**: 使用kubeadm快速部署K8s 1.27+集群,配置Calico网络插件及NVIDIA Device Plugin。 - **存储系统**: 部署Ceph集群(至少3节点),创建RBD池供PVC动态供给。 --- ### **二、集群部署流程** #### **1. 部署管理平面** - **安装控制组件**: ```bash helm repo add deepseek https://charts.deepseek.com helm install deepseek-r1 deepseek/deepseek-r1 -n deepseek-system \ --set global.clusterMode=true \ --set etcd.cluster.enabled=true \ --set redis.sentinel.enabled=true ``` - **配置高可用**: - 使用Keepalived + HAProxy实现API Server负载均衡。 - 部署Prometheus + Grafana监控栈,配置自定义告警规则。 #### **2. 计算节点接入** - **GPU节点准备**: ```bash # 验证GPU驱动及CUDA nvidia-smi # 应显示GPU状态 kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml ``` - **节点注册**: ```bash kubeadm join <control-plane-endpoint>:6443 --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --node-labels 'node-type=compute,gpu-model=a100' ``` #### **3. 分布式存储集成** - **创建StorageClass**: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ceph-rbd provisioner: rook-ceph.rbd.csi.ceph.com parameters: clusterID: rook-ceph pool: deepseek-data imageFormat: "2" imageFeatures: layering ``` #### **4. 服务配置** - **Ingress配置**: ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: deepseek-ingress annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" spec: tls: - hosts: - deepseek.example.com secretName: deepseek-tls rules: - host: deepseek.example.com http: paths: - path: / pathType: Prefix backend: service: name: deepseek-frontend port: number: 443 ``` --- ### **三、验证与调优** #### **1. 功能验证** - **API连通性测试**: ```bash curl -X POST https://deepseek.example.com/api/v1/healthcheck \ -H "Authorization: Bearer $TOKEN" ``` 预期返回:`{"status": "healthy", "services": {"database": "ok", "gpu_scheduler": "ok"}}` #### **2. 性能压测** - **使用Locust模拟高并发**: ```python from locust import HttpUser, task class DeepSeekUser(HttpUser): @task def query(self): self.client.post("/api/search", json={"query": "test"}, headers={"Authorization": "Bearer $TOKEN"}) ``` 启动命令:`locust -f load_test.py --headless -u 1000 -r 100 --run-time 10m` #### **3. 运维监控** - **自定义Grafana看板**: 监控指标包括:QPS、P99延迟、GPU利用率(`DCGM_FI_DEV_GPU_UTIL`)、显存占用(`DCGM_FI_DEV_FB_USED`)、Kafka消息堆积等。 --- ### **四、常见问题处理** - **GPU资源未识别**: 检查nvidia-device-plugin日志:`kubectl logs -n kube-system nvidia-device-plugin-daemonset-xxxxx` - **存储挂载失败**: 查看RBD镜像状态:`rbd -p deepseek-data ls --format=json` - **API延迟陡增**: 使用`kubectl top pods`检查资源争抢,考虑HPA自动扩缩容配置。 --- 建议结合官方部署手册(如《DeepSeek-R1 Cluster Deployment Guide v2.3》)进行细节调整,确保版本匹配。对于生产环境,建议通过IaC工具(如Terraform)实现声明式部署
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想看一次满天星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值