kubemarkテストクラスタの構築
4328 ワード
kubemarkはテストクラスタと性能テストを構築する
Kubemarkは、K 8 sクラスタのパフォーマンステストを行うためのK 8 s公式ツールです.リソースに制限されず、実際のクラスタよりもテスト可能なクラスタの規模が大きいK 8 s cluster(Kubemark cluster)をシミュレートできます.このclusterではmasterは本物のマシンで、すべてのnodesはHollow nodesです.Hollow nodesは実際のK 8 sプログラムを実行していますが、Dockerは呼び出されません.そのため、テストはK 8 s API呼び出しの完全なプロセスを実行しますが、podは本当に作成されません.
Kubermarkは,シミュレーションしたKubemark cluster上でE 2 Eテストを行い,クラスタの性能指標を得た.Kubermark clusterのテストデータは,実際のクラスタとは少し誤差があるが,実際のクラスタのデータを表すことができる.したがって、Kubermarkを借りて、実際のクラスタでE 2 Eテストを直接実行することで、実際のクラスタのパフォーマンステストを行うことができます.
kubemarkアーキテクチャ
kubemark clusterには2つの部分が含まれています.実際のmasterクラスタと一連の「hollow」node、「hollow node」はkubeletの動作をシミュレートしただけで、本当のnodeではなく、podやマウントボリュームを起動しません.一般的にkubemarkテストクラスタを構築するには、実際のクラスタ(external cluster)とkubemark masterが必要です.hollowNodeはpod形式でexternal clusterで実行され、kubemark masterに接続して自分をkubemark masterのnodeとして登録します.
kubemark master構造図:
kubemarkプロセスの構築
構築詳細プロセスリファレンスk 8 s公式ドキュメント
公式に構築されたkubemarkクラスタは依存が多く、特に私たちのシーンに合致していないため、以下は金上雲のクラスタ環境に対してテストクラスタを構築する.
# kubemark namespace
kubectl create ns kubemark
# node-configmap
kubectl create configmap node-configmap -n kubemark --from-literal=content.type="test-cluster"
が作成され、secret # secret kubeconfig
kubectl create secret generic kubeconfig --type=Opaque --namespace=kubemark --from-file=kubelet.kubeconfig={kubeconfig_file_path} --from-file=kubeproxy.kubeconfig={{kubeconfig_file_path}}
が作成され、kubeletおよびkubeproxyサービスを実行し、kubemarkクラスタに接続するように構成されるhollow podが作成される.kubectl apply -f hollow-node.yaml -n kubemark
hollow-node.yaml例内容: apiVersion: v1
kind: ReplicationController
metadata:
name: hollow-node
labels:
name: hollow-node
spec:
replicas: 3
selector:
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: hsxue/kubemark:v1.10.5
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: hsxue/kubemark:v1.10.5
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