pod 自动扩容

25 pod 自动扩展和缩减
HPA  Horizontal Pod Autoscaling (pod水平自动伸缩)

基本原理:
  HPA监控分析 RC、Deployment 控制的pod的负载变化 来调整副本的数量
  监控:CPU负载(Heapster)、自定义监控的负载

以容器的方式安装:heapster influxdb  grafana 三个插件:

cd heapster/

vi heapster.yaml
vi influxdb.yaml
vi grafana.yaml

kubectl create -f .
kubectl get pods -n kube-system -o wide    
查看pod建立在哪个节点上 然后到那个节点去拉取相应版本的包,并更名tag 为 k8s.gcr.io/xxx:v1xxx

下载
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.5.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v5.0.4

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4

打tag
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4 k8s.gcr.io/heapster-amd64:v1.5.4

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.5.2 k8s.gcr.io/heapster-influxdb-amd64:v1.5.2

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v5.0.4 k8s.gcr.io/heapster-grafana-amd64:v5.0.4


kubectl create -f .
或者:
kubectl create -f heapster.yaml
kubectl create -f influxdb.yaml
kubectl create -f grafana.yaml


查看报错日志:
kubectl logs -f heapster-7ff8d6bf9f-mq2vn -n kube-system

无监控pod负载权限,从原admin-account.yaml中拿取一段,如下:
修改处:
name: heapster-admin
name: heapster

vi heapster.yaml    加入ClousterRole 权限绑定

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: heapster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: heapster
  namespace: kube-system


kubectl delete -f heapster.yaml
kubectl create -f heapster.yaml

kubectl logs -f heapster-7ff8d6bf9f-lkj22 -n kube-system

kubectl get pods -n kube-system -o wide

dashboard 管理界面查看图形界面监控数据:

hpa-demo.yaml

---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: hpa-demo
  labels:
    app: hpa
spec:
  replicas: 1
  revisionHistoryLimit: 15   #最小数量历史版本为 15个
  minReadySeconds: 5         #5秒钟后更新
  strategy:              
    type: RollingUpdate      #滚动更新
    rollingUpdate:
      maxSurge: 1            #更新中 比原pod数最多多1个出来
      maxUnavailable: 1      #更新中 最多允许1个pod不能提供服务
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        resources:
          requests:
            cpu: 100m
        ports:
        - containerPort: 80

kubectl create -f hpa-demo.yaml
kubectl get deployment
kubectl get pods

vi /etc/kubernetes/manifests/kube-controller-manager.yaml
- --horizontal-pod-autoscaler-use-rest-clients=false

创建自动扩容的资源对象:
kubectl autoscale deployment hpa-demo --min=1 --max=10 --cpu-percent=5

kubectl delete -f hpa-demo.yaml

kubectl get hpa
kubectl describe hpa hpa-demo

测试自动扩容:
kubectl run -i --tty test-hpa --image=busybox /bin/sh


panic: runtime error: invalid memory address or nil pointer dereference


kubectl 命令进入容器

kubectl get pods   #查看所有正在运行的pod
NAME                            READY     STATUS    RESTARTS   AGE
nginx-56b8c64cb4-t97vb          1/1       Running   3          1d
<2>
kubectl exec -it nginx-56b8c64cb4-t97vb /bin/bash      #假如当前pod只有一个容器,运行以下命令即可
root@nginx-56b8c64cb4-t97vb:/# ps -ef


kubectl exec -it test-hpa-54bfcf5b7b-fhnvc /bin/sh  

写个死循环做压力测试:
while true; do wget -q -O- http://10.244.1.89; done

kubectl get hpa
kubectl describe hpa hpa-demo

kubectl delete deployment test-hpa




得到yaml文件 格式内容:
kubectl get hpa hpa-demo -o yaml

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  annotations:
    autoscaling.alpha.kubernetes.io/conditions: '[{"type":"AbleToScale","status":"True","lastTransitionTime":"2019-11-07T11:07:02Z","reason":"SucceededGetScale","message":"the
      HPA controller was able to get the target''s current scale"},{"type":"ScalingActive","status":"False","lastTransitionTime":"2019-11-07T11:07:02Z","reason":"FailedGetResourceMetric","message":"the
      HPA was unable to compute the replica count: missing request for cpu on container
      nginx in pod default/nginx-deploy-75675f5897-gmttv"}]'
  creationTimestamp: 2019-11-07T10:48:43Z
  name: hpa-demo
  namespace: default
  resourceVersion: "1365696"
  selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/hpa-demo
  uid: 2ab4536f-014c-11ea-8413-000c29c20a27
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: hpa-demo
  targetCPUUtilizationPercentage: 5
status:
  currentReplicas: 1
  desiredReplicas: 0



简化后:
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: hpa-demo
  targetCPUUtilizationPercentage: 5


kubectl delete -f hpa hpa-demo
kubectl delete -f hpa-demo.yaml
kubectl delete deployment test-hpa


vi hpa-demo.yaml

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
  namespace: default
spec:
  maxReplicas: 10
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: hpa-demo
  targetCPUUtilizationPercentage: 5


kubectl delete -f hpa-demo.yaml

kubectl create -f hpa-demo.yaml

kubectl get pods
kubectl get hpa

posted @ 2019-11-07 20:21  walkersss  阅读(833)  评论(0编辑  收藏  举报