kubemark仿真万pod集群方案介绍

kubemark部署仿真万pod集群

kubemark是k8s官方提供的一个性能测试工具,用于模拟大规模k8s集群,可以使用ClusterLoader模拟负载

基本介绍

kubemark中需要两个重要的集群一个是kubemark集群,另一个是external集群
external集群中部署1W个pod,这1W个pod在kubemark集群中显现为1W个节点

目标

测试kube-apiserver,etcd等性能瓶颈

kubemark的工作原理

hollow-node

hollow-node用来模拟真实节点,但是这些节点不会真实运行,只会模拟kubelet的行为,向k8s api-server发送心跳和状态信息。

external集群

k8s集群,用于运行hollow-node pod,这些pod会向kubemark集群注册

kubemark集群

管理节点的k8s集群

安装部署

k8s配置

api-server参数配置

--max-requests-inflight=2000 # 最大同时处理的非突变(mutate)请求数量
--max-mutating-requests-inflight=1000 # 最大处理同时突变的请求数量

etcd参数配置

--kube-api-qps=200 # 每秒允许发送到api-server的请求数量QPS,默认值为50
--kube-api-burst=400 # 允许突发的请求数,可以超过QPS
--quota-backend-bytes=8,589,934,592 # etcd后端存储的数量,默认为2G

kube-controller配置

--kube-api-qps=200
--kube-api-burst=400

kube-scheduler配置

--kube-api-qps=200
--kube-api-burst=400

kubelet配置

maxPods: 110 # 配置最大pod数,如果未配置,默认为110

hollownode配置

以下是hollownode.yaml提供的配置文件,但是部署成功后,在kubemark集群上看到的节点名将是随机的,如果需要确定的名字,可以通过改为statefulset来更改

 apiVersion: apps/v1
 kind: Deployment
 metadata:
 name: hollow-node
 namespace: kubemark
 labels:
     name: hollow-node
 spec:
 replicas: 1 # 副本数控制节点数
 selector:
     matchLabels:
     name: hollow-node
 template:
     metadata:
     labels:
         name: hollow-node
     spec:
     initContainers:
     - name: init-inotify-limit
         image: busybox
         command: ['sysctl', '-w', 'fs.inotify.max_user_instances=200']
         securityContext:
         privileged: true
     volumes:
     - name: kubeconfig-volume
         secret:
         secretName: kubeconfig
     containers:
     - name: hollow-kubelet
         image: supereagle/kubemark:v1.14.3
         imagePullPolicy: IfNotPresent
         ports:
         - containerPort: 4194
         - containerPort: 10250
         - containerPort: 10255
         env:
         - name: CONTENT_TYPE
         valueFrom:
             configMapKeyRef:
             name: node-configmap
             key: content.type
         - name: NODE_NAME
         valueFrom:
             fieldRef:
             fieldPath: metadata.name
         command:
         - /bin/sh
         - -c
         - /kubemark --morph=kubelet --name=$(NODE_NAME) --kubeconfig=/kubeconfig/kubelet.kubeconfig $(CONTENT_TYPE) --alsologtostderr --v=2
         volumeMounts:
         - name: kubeconfig-volume
         mountPath: /kubeconfig
         readOnly: true
         securityContext:
         privileged: true
     - name: hollow-proxy
         image: supereagle/kubemark:v1.14.3
         imagePullPolicy: IfNotPresent
         env:
         - name: CONTENT_TYPE
         valueFrom:
             configMapKeyRef:
             name: node-configmap
             key: content.type
         - name: NODE_NAME
         valueFrom:
             fieldRef:
             fieldPath: metadata.name
         command:
         - /bin/sh
         - -c
         - /kubemark --morph=proxy --name=$(NODE_NAME) --use-real-proxier=false --kubeconfig=/kubeconfig/kubeproxy.kubeconfig $(CONTENT_TYPE) --alsologtostderr --v=2
         volumeMounts:
         - name: kubeconfig-volume
         mountPath: /kubeconfig
         readOnly: true
posted @ 2025-08-17 21:18  LemHou  阅读(23)  评论(0)    收藏  举报