在 k8s 的使用中,我們會遇到這樣乙個場景,現有集群只有幾個節點,但是我想模擬測試大規模集群時,集群的壓力效能會表現如何呢?這裡就需要用到 kubemark 了。
kubemark 是 k8s 官方給出的效能測試工具,能夠不受任何資源限制,模擬出乙個大規模 k8s 集群。其主要架構如圖所示:
我使用的版本是 v1.14.6
make quick-release
編譯出的二進位制儲存在_output
目錄下。
注意,在編譯過程中,需要 pull 一些映象,可能需要翻牆,建議提前 pull 下來。主要用到的映象有:然後進入到- k8s.gcr.io/kube-cross:v1.12.5-1
- k8s.gcr.io/debian-base-amd64:v1.0.0
- k8s.gcr.io/debian-iptables-amd64:v11.0.2
$kube_src/cluster/images/kubemark
目錄下,將編譯得到的 kubemark 二進位制複製到該目錄下,並執行以下命令打映象。
docker build -t kubemark:latest .
在 k8s 原始碼中,test/kubemark/
目錄下包含了在本地啟動 kubemark master 的指令碼,但是我在測試過程中,遇見了茫茫多的問題(應該是小弟才疏學淺,搞不定),因此採用另一種方案,通過 kubeadm 或者 kubespary 部署乙個單節點的 k8s 集群作為 kubemark master 節點。
這裡有個坑,就是需要將節點名稱改為 xx-master,這樣在後面跑 e2e 測試時,才會把該節點識別為master節點。具體原始碼如下,其他版本是否有這個問題,我暫時未去查詢。
// 在 e2e 原始碼中,呼叫了pkg/util/system/system_utils.go 下面的方法判斷是否為master節點
func ismasternode(nodename string) bool
if len(nodename) >= 10
return false
}
此處需要注意的是,kubemark 集群部署時,不需要特定的網路外掛程式,即 flannel 或 calico 之類的元件都不需要安裝部署。若部署成功後,通過在部署完成後,kubectl get node
檢視節點的狀態是notready
,則需要將/etc/kubernetes/kubelet.env
檔案中的kubelet_network_plugin=" --network-plugin=cni ..."
注釋掉,然後systemctl restart kubelet
即可。
kubectl get po -a
檢視pod狀態,可能會存在一些 "0/1" 狀態的pod,則需要做以下操作
刪除 daemonset 資源(包括 kube-proxy),
刪除 deployment:autoscaler;
刪除 namespace:ingress-nginx
如果還有其他的非 running 狀態pod,則需要做額外處理,直至所有pod 都處於running
狀態。
最後需要將 kubemark master 節點設定為unschedule
在外部集群中,需要載入以下映象,用於kubemark 測試
需要準備以下檔案:
使用以下命令,建立 hollow-node 的pod
kubectl create ns kubemark
kubectl create cm node-configmap -n kubemark --from-litera=content.type="" --from-file=kernel.monitor="kernel-monitor.json"
kubectl create secret generic kubeconfig --type=opaque --namespace=kubemark \
--from-file=kubelet.kubeconfig=kubemark.kubeconfig \
--from-file=kubeproxy.kubeconfig=kubemark.kubeconfig \
--from-file=npd.kubeconfig=kubemark.kubeconfig \
--from-file=heapster.kubeconfig=kubemark.kubeconfig \
--from-file=cluster_autoscaler.kubeconfig=kubemark.kubeconfig \
--from-file=dns.kubeconfig=kubemark.kubeconfig
當 external cluster 中,所有 hollow node 的pod 處於 running 狀態後,在 kubemark master 節點執行kubectl get node,則會出現對應的 hollow node。
e2e 測試需要獲取 etcd 的 metrics 資料,但是在原始碼中通過curl http://localhost:2379/metrics
獲取的,而我們部署的 kubemark 集群中 etcd 的訪問需要證書認證,因此還需要修改原始碼。
}修改完後,編譯 e2e.test
make what="test/e2e/e2e.test"
然後執行以下命令進行 e2e 測試。
$kuberoot/_output/bin/e2e.test --kube-master=*** --host= --ginkgo.focus=":performance]" --provider=local --kubeconfig=/var/run/kubernetes/admin.kubeconfig --num-nodes=1 --v=3 --ginkgo.failfast --e2e-output-dir=***x --report-dir=***
Python 使用記錄(累計記錄)
2 pandas 設定 3 pandas 操作 4 笛卡爾積 1 列表轉字串list1 department of biology str1 join list1 print str1 department of biology2 從列表中刪除元素 要刪除的元素的型別必須與列表中的元素的型別相同 l...
fiddler使用記錄
fiddler 抓不到ie瀏覽器 或者ie核心瀏覽器 的請求包 1 ie的 去掉,這樣會使用fiddler的 去掉 之後一般就可以抓到ie的包了。很常見!另外,此時基於ie核心的瀏覽器可能還不行,比如我用的115br,瀏覽器關掉重啟下就可以了。a 檢查是否配置了某些filter過濾規則 很常見!b ...
xshell securecrt使用記錄
xshell為何滑鼠雙擊時會觸發換行,當選中一段文字時也會換行?在linux下,ctrl c是發個中斷訊號的意思,ctrl c操作會觸發xshell換行.所以,可能是出發了ctrl c導致了xshell換行.windows下,有一些應用程式定義了一些ctrl c的快捷鍵對映,比如有道詞典 當雙擊選中...