• k8s系列---hpa扩容


    centos-master:172.16.100.60

    centos-minion:172.16.100.62

    k8s,etcd,docker等都是采用yum装的,部署参考的k8s权威指南和一个视频,视频在百度网盘里,忘记具体步骤了,安装不难,关键在于第一次接触,改的文件记不住下次在写个安装的步骤吧

    首先安装heapster  我安装的是1.2.0的版本

    个人感觉只要几个yaml文件就行了,里面其他东西干嘛用的,没用到嘛

    [root@centos-master influxdb]# pwd
    /usr/src/heapster-1.2.0/deploy/kube-config/influxdb
    [root@centos-master influxdb]# ls
    grafana-deploment.yaml  heapster-deployment.yaml  influxdb-deployment.yaml
    grafana-service.yaml    heapster-service.yaml     influxdb-service.yaml
    

      

    [root@centos-master influxdb]# cat heapster-deployment.yaml 
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: heapster
      namespace: kube-system
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: heapster
        spec:
          containers:
          - name: heapster
            image: docker.io/ist0ne/heapster-amd64:latest
            imagePullPolicy: IfNotPresent
            command:
            - /heapster
            - --source=kubernetes:http://172.16.100.60:8080?inClusterConfig=false
            - --sink=influxdb:http://10.254.129.95:8086
    

      关于--source和--sink

    刚下载完的是这样的,具体代表什么可以查一下,100.60是集群的master,129.95是个啥?我忘了好像是某个kubectl get svc里面的某个地址,因为svc我删过,找不到原来的IP了

            - --source=kubernetes:https://kubernetes.default
            - --sink=influxdb:http://monitoring-influxdb:8086
    

      

    [root@centos-master influxdb]# cat heapster-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: Heapster
      name: heapster
      namespace: kube-system
    spec:
      ports:
      - port: 80
        targetPort: 8082
      selector:
        k8s-app: heapster
    

      

    [root@centos-master influxdb]# cat grafana-deploment.yaml 
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: monitoring-grafana
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: grafana
        spec:
          containers:
          - name: grafana
            image: docker.io/ist0ne/heapster-grafana-amd64:latest
            ports:
              - containerPort: 3000
                protocol: TCP
            volumeMounts:
            - mountPath: /var
              name: grafana-storage
            env:
            - name: INFLUXDB_HOST
              value: monitoring-influxdb
            - name: GRAFANA_PORT
              value: "3000"
            - name: GF_AUTH_BASIC_ENABLED
              value: "false"
            - name: GF_AUTH_ANONYMOUS_ENABLED
              value: "true"
            - name: GF_AUTH_ANONYMOUS_ORG_ROLE
              value: Admin
            - name: GF_SERVER_ROOT_URL
              value: /api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/
          volumes:
          - name: grafana-storage
            emptyDir: {}
    

      

    [root@centos-master influxdb]# cat grafana-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        kubernetes.io/cluster-service: 'true'
        kubernetes.io/name: monitoring-grafana
      name: monitoring-grafana
      namespace: kube-system
    spec:
      # In a production setup, we recommend accessing Grafana through an external Loadbalancer
      # or through a public IP. 
      # type: LoadBalancer
      ports:
      - port: 80
        targetPort: 3000
      selector:
        name: influxGrafana
    

      

    [root@centos-master influxdb]# cat influxdb-deployment.yaml 
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: monitoring-influxdb
      namespace: kube-system
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            task: monitoring
            k8s-app: influxdb
        spec:
          containers:
          - name: influxdb
            image: docker.io/ist0ne/heapster-influxdb-amd64:v1.1.1
            volumeMounts:
            - mountPath: /data
              name: influxdb-storage
          volumes:
          - name: influxdb-storage
            emptyDir: {}
    

      

    [root@centos-master influxdb]# cat influxdb-service.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels: null
      name: monitoring-influxdb
      namespace: kube-system
    spec:
      ports:
      - name: http
        port: 8083
        targetPort: 8083
      - name: api
        port: 8086
        targetPort: 8086
      selector:
        name: influxGrafana
    

     

    以上是全部的heapster需要的yaml文件

    kubectl create -f ../influxdb

    生成相应的pod和svc

    然后就改创建具体的pod应用了

    [root@centos-master yaml]# cat php-apache-rc.yaml 
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: php-apache
    spec:
      replicas: 1
      template:
        metadata:
          name: php-apache
          labels:
            app: php-apache
        spec:
          containers:
          - name: php-apache
            image: siriuszg/hpa-example
            resources:
              requests:
                cpu: 200m
            ports:
            - containerPort: 80
    

      

    [root@centos-master yaml]# cat php-apache-svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: php-apache
    spec:
      ports:
      - port: 80
      selector:
        app: php-apache
    

      

    [root@centos-master yaml]# cat busybox.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: busybox
    spec: 
      containers:
      - image: busybox
        command:
          - sleep
          - "3600"
        name: busybox
    

      

    [root@centos-master yaml]# cat hpa-php-apache.yaml 
    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: php-apache
    spec:
      scaleTargetRef:
        apiVersion: v1
        kind: ReplicationController
        name: php-apache
      minReplicas: 1
      maxReplicas: 10
      targetCPUUtilizationPercentage: 10
    

      

    注意如果是集群状态,php-apache和busybox可能不是 node的,访问会出问题,要么把他们弄到一个node里要么安装flannel把node都连起来,迟早都要做这一步的。

    kubect create -f 上面的这些文件

    检查heaptser是否成功

    [root@centos-master yaml]# kubectl top node 
    NAME            CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%   
    centos-minion   105m         2%        1368Mi          34%  
    

     

    如果出现上面的代表成功了,不知道为什么我的在这检测不到127.0.0.1的这个node

    没出现的话仔细查看日志,查看node是否起来是否加入到了集群,/var/log/message     或者 kubectl describe hpa php-apache  或者查pod php-apapche的日志看看

    还有一点就是网上都是用的kube-system这个namespace我用的时候总是检测不到,后来去掉了,用的默认的命名空间就是上面的配置,发现可以检测了,不知道原因

    检查hpa

    [root@centos-master yaml]# kubectl get hpa
    NAME         REFERENCE                          TARGET    CURRENT   MINPODS   MAXPODS   AGE
    php-apache   ReplicationController/php-apache   10%       0%        1         10        23h
    [root@centos-master yaml]# kubectl get hpa --namespace=kube-system 
    NAME         REFERENCE                          TARGET    CURRENT     MINPODS   MAXPODS   AGE
    php-apache   ReplicationController/php-apache   50%       <waiting>   1         10        20h
    

     

    会发现默认的hpa是current是能检测到值的,但是之前用的kube-system的一直是 waitng状态

    进入到busybox里进行压力测试

    [root@centos-master ~]# kubectl exec -ti busybox -- sh
    / # while true; do wget -q -O- http://10.254.221.176 > /dev/null ; done
    
    

      

    过十几秒发现pod增加了,而且cpu的current也增大了,但是有个问题,按理来说应该会自动收缩的,但是他只会自动扩容,收缩不成功,当停掉压力测试的时候,还是这么多的pod

    并没有根据cpu的降低而减少pod的数量,奇怪

    [root@centos-master yaml]# kubectl get pods -o wide | grep php-apache
    php-apache-5bcgk     1/1       Running   0          44s       10.0.34.2    127.0.0.1
    php-apache-b4nv5     1/1       Running   0          44s       10.0.16.4    centos-minion
    php-apache-kw1m0     1/1       Running   0          44s       10.0.34.17   127.0.0.1
    php-apache-vz2rx     1/1       Running   0          3h        10.0.16.3    centos-minion
    [root@centos-master yaml]# kubectl get hpa
    NAME         REFERENCE                          TARGET    CURRENT   MINPODS   MAXPODS   AGE
    php-apache   ReplicationController/php-apache   10%       25%       1         10        23h
    [root@centos-master yaml]# 
    

      

  • 相关阅读:
    HTTP/2之服务器推送(Server Push)最佳实践
    相似人群画像算法
    Linux也有后悔药,五种方案快速恢复你的系统
    IPv6原理、应用与实践
    护航者,腾讯云: 2017年度游戏行业DDoS态势报告—回溯与前瞻
    放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?
    Unity引擎与C#脚本简介
    腾讯云Redis混合存储版重磅推出,万字长文助你破解缓存难题!
    拒绝平庸,以程序员的名义定义新桌面!
    腾讯云EMR大数据实时OLAP分析案例解析
  • 原文地址:https://www.cnblogs.com/dribs/p/9116399.html
Copyright © 2020-2023  润新知