1、創建 metrics-server 使用的證書
vim metrics-server-csr.json { "CN": "aggregator", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", "OU": "System" } ] }
cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \ -ca-key=/etc/kubernetes/ssl/ca-key.pem \ -config=/opt/ssl/config.json \ -profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server
將生成的證書拷貝到所有node和master節點
cp metrics-server*.pem /etc/kubernetess/ssl/
scp metrics-server*.pem 192.168.1.8:/etc/kubernetess/ssl/
2、修改 kubernetes 控制平面組件的配置以支持 metrics-server
kube-apiserver
添加如下配置參數:
--requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem \ --requestheader-extra-headers-prefix=X-Remote-Extra- \ --requestheader-group-headers=X-Remote-Group \ --requestheader-username-headers=X-Remote-User \ --proxy-client-cert-file=/etc/kubernetes/ssl/metrics-server.pem \ --proxy-client-key-file=/etc/kubernetes/ssl/metrics-server-key.pem \ --runtime-config=api/all=true \
注意:requestheader-client-ca-file 指定的 CA 證書,必須具有 client auth and server auth
kube-controller-manager
添加如下配置參數:
--horizontal-pod-autoscaler-use-rest-clients=true
用於配置 HPA 控制器使用 REST 客戶端獲取 metrics 數據
3、修改插件配置文件
# git clone https://github.com/kubernetes-incubator/metrics-server
# cd metrics-server/deploy/1.8+
# vim metrics-server-deployment.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: metrics-server namespace: kube-system labels: k8s-app: metrics-server spec: selector: matchLabels: k8s-app: metrics-server template: metadata: name: metrics-server labels: k8s-app: metrics-server spec: serviceAccountName: metrics-server volumes: # mount in tmp so we can safely use from-scratch images and/or read-only containers - name: tmp-dir emptyDir: {} containers: - name: metrics-server image: mirrorgooglecontainers/metrics-server-amd64:v0.3.1 imagePullPolicy: Always command: - /metrics-server - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP volumeMounts: - name: tmp-dir mountPath: /tmp
注釋:1、metrics默認使用hostname來通信的,而且coredns中已經添加了宿主機的/etc/resolv.conf,
所以只需要添加一個內部的dns服務器或者在pod的deployment的yaml手動添加主機解析記錄,再或者改變參數為InternalIP,直接用ip來連接
2、kubelet-insecure-tls: 跳過驗證kubelet的ca證書,暫時開啟。(不推薦用於生產環境)
4、修改完成之后開始部署
# kubectl apply .
# kubectl get pods -n kube-system | grep metrics
# kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
5、驗證是否成功
# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% es-60 377m 18% 5915Mi 76% es-61 267m 13% 5479Mi 70%
注意: 內存單位 Mi=1024*1024字節 M=1000*1000字節
CPU單位 1核=1000m 即250m=1/4核
# kubectl top pod --all-namespaces
參考資料: https://github.com/kubernetes-incubator/metrics-server/issues/97
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。