kubemark仿真萬pod集群方案介紹
kubemark部署仿真萬pod集群
kubemark是k8s官方提供的一個性能測試工具,用于模擬大規(guī)模k8s集群,可以使用ClusterLoader模擬負(fù)載
基本介紹
kubemark中需要兩個重要的集群一個是kubemark集群,另一個是external集群
external集群中部署1W個pod,這1W個pod在kubemark集群中顯現(xiàn)為1W個節(jié)點
目標(biāo)
測試kube-apiserver,etcd等性能瓶頸
kubemark的工作原理
hollow-node
hollow-node用來模擬真實節(jié)點,但是這些節(jié)點不會真實運行,只會模擬kubelet的行為,向k8s api-server發(fā)送心跳和狀態(tài)信息。
external集群
k8s集群,用于運行hollow-node pod,這些pod會向kubemark集群注冊
kubemark集群
管理節(jié)點的k8s集群
安裝部署
k8s配置
api-server參數(shù)配置
--max-requests-inflight=2000 # 最大同時處理的非突變(mutate)請求數(shù)量
--max-mutating-requests-inflight=1000 # 最大處理同時突變的請求數(shù)量
etcd參數(shù)配置
--kube-api-qps=200 # 每秒允許發(fā)送到api-server的請求數(shù)量QPS,默認(rèn)值為50
--kube-api-burst=400 # 允許突發(fā)的請求數(shù),可以超過QPS
--quota-backend-bytes=8,589,934,592 # etcd后端存儲的數(shù)量,默認(rèn)為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數(shù),如果未配置,默認(rèn)為110
hollownode配置
以下是hollownode.yaml提供的配置文件,但是部署成功后,在kubemark集群上看到的節(jié)點名將是隨機(jī)的,如果需要確定的名字,可以通過改為statefulset來更改
apiVersion: apps/v1
kind: Deployment
metadata:
name: hollow-node
namespace: kubemark
labels:
name: hollow-node
spec:
replicas: 1 # 副本數(shù)控制節(jié)點數(shù)
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

浙公網(wǎng)安備 33010602011771號