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

浙公网安备 33010602011771号