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クラスタは依存が多く、特に私たちのシーンに合致していないため、以下は金上雲のクラスタ環境に対してテストクラスタを構築する.
  • まず金山雲プラットフォームを使用して2つの真実なクラスタを構築します.クラスタ仕様は、3 master(2 c 4 g)、2 node(32 c 64 g)であり、1つはkubemarkクラスタとして、もう1つはsupportクラスタと呼ばれるhollow-node podを配置するために使用される.
  • ローカルkubectlを構成してsupportクラスタに接続します.
  • supportクラスタでは、kubemarkクラスタのkubeconfigを取得するリソース
    #   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
  • hollow pod ready後、kubemarkクラスタに入ると、対応するnode登録が成功したことがわかります.