kubernetes Metrics-server 安裝
一、Metrics-server安裝:
由於使用自動擴容,得安裝heapster或metrics-server(由於heapster停止更新故用metrics-server):
1、安裝之前需要為kubernetes增加配置項:
1、為/etc/kubernetes/controller-manager增加啟動項:
***
--horizontal-pod-autoscaler-use-rest-clients=true
***
systemctl restart kube-controller-manager
2、為/usr/lib/systemd/system/kube-apiserver.service增加啟動項(也可以修改/etc/kubernetes/apiserver文件增加):
***
--requestheader-client-ca-file ./cert/ca.pem \
--requestheader-allowed-names= \
--requestheader-extra-headers-prefix=X-Remote-Extra- \
--requestheader-group-headers=X-Remote-Group \
--requestheader-username-headers=X-Remote-User \
--proxy-client-cert-file ./cert/kube-proxy-client.pem \
--proxy-client-key-file ./cert/kube-proxy-client-key.pem \
--enable-aggregator-routing=true
***
systemctl daemon-reload
systemctl restart kube-apiserver
2、在kubenetes上安裝Metrics-server:
1、創建:
kubectl create -f metrics-server.yml
2、刪除:
kubectl delete ServiceAccount metrics-server -n kube-system
kubectl delete ClusterRoleBinding metrics-server:system:auth-delegator -n kube-system
kubectl delete RoleBinding metrics-server-auth-reader -n kube-system
kubectl delete ClusterRole system:metrics-server -n kube-system
kubectl delete ClusterRoleBinding system:metrics-server -n kube-system
kubectl delete APIService v1beta1.metrics.k8s.io -n kube-system
kubectl delete Service metrics-server -n kube-system
kubectl delete Deployment metrics-server -n kube-system
注:要修改metrics-server的鏡
3、驗證:
1、創建測試資源:
kubectl create -f nginx.yml
2、創建自動伸縮規則:
kubectl autoscale deployment web --cpu-percent=75 --min=2 --max=10
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
bill-service Deployment/bill-service 0% / 80% 5 10 5 2h
注:TARGETS出現 <unknown> / 80% 說明沒有成功就得看metrics-server的日志和hpa的describe來查找原因了。
3、測試是否生效(使用腳本測):
python pressure-web.py
kubectl get hpa

apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web selector: app: nginx --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: web spec: selector: matchLabels: app: nginx replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx resources: limits: cpu: 100m memory: 100Mi requests: cpu: 50m memory: 50Mi ports: - containerPort: 80 name: web

import requests,time,threading url = "https://www.baidu.com" requests_timeout = 2 def get_response_time(url,count,ring): start_time = time.time() try: req_obj = requests.get(url,timeout=requests_timeout) except requests.exceptions.ReadTimeout as e: status = False else: status = True end_time = time.time() requests_time = end_time-start_time if status and (req_obj.status_code == requests.codes.ok) : requests_status = "OK" else: requests_status = "NO" print("第%s輪,第%s連接,請求用時(s):%s,返回狀態:%s"%(ring,count,requests_time,requests_status)) if __name__ == "__main__": '''在規定超時時間內,11秒內處理不了100個請求,請求就會累積,一直拖垮''' ring = 1 while True: for count in range(100): t = threading.Thread(target=get_response_time,args=(url,count,ring)) time.sleep(0.01) t.start() time.sleep(10) ring += 1 print("第%s輪開始"%ring)