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)