精华内容
下载资源
问答
  • k8s弹性伸缩

    2020-06-15 20:02:03
    本课程主要包含k8s集群的安装,k8s各 种资源详细介绍和使用,k8s各种扩展组件的部署和使用,k8s核心功能弹性伸缩演示,k8s持久化存储,k8s代码自动发布,让你真正的能够让你的业务在k8s中落地运行!
  • 5: k8s弹性伸缩 k8s弹性伸缩,需要附加插件heapster监控 使用heapster监控 heapster通过apiserver查询节点信息 heapster向node节点cadvisor获取监控数据 heapster将数据写入influxdb数据库中 grafana冲数据库中取出...

    7. k8s弹性伸缩

    k8s弹性伸缩,需要附加插件heapster监控

    • 使用heapster监控
      • heapster通过apiserver查询节点信息
      • heapster向node节点cadvisor获取监控数据
      • heapster将数据写入influxdb数据库中
      • grafana冲数据库中取出数据进行出图
      • dashboard调用grafana的图进行展示

    7.1 安装heapster监控

    7.1.1 上传并导入镜像,打标签

    ls *.tar.gz
    for n in `ls *.tar.gz`;do docker load -i $n ;done
    
    docker tag docker.io/kubernetes/heapster_grafana:v2.6.0 10.0.0.11:5000/heapster_grafana:v2.6.0
    docker tag  docker.io/kubernetes/heapster_influxdb:v0.5 10.0.0.11:5000/heapster_influxdb:v0.5
    docker tag docker.io/kubernetes/heapster:canary 10.0.0.11:5000/heapster:canary
    

    7.1.2 master节点上传heapster配置文件

    修改配置文件:
    #heapster-controller.yaml
        spec:
          nodeName: 10.0.0.13
          containers:
          - name: heapster
            image: 10.0.0.11:5000/heapster:canary
            imagePullPolicy: IfNotPresent
            
    #influxdb-grafana-controller.yaml
        spec:
          nodeName: 10.0.0.13
          containers:
    
    全部创建
    kubectl create -f .
    
    [root@k8s-master monitor]# kubectl get pod -n kube-system 
    NAME                                           READY     STATUS    RESTARTS   AGE
    heapster-mnd99                                 1/1       Running   0          17s
    influxdb-grafana-p2vhh                         2/2       Running   0          17s
    kube-dns-32943122-3jv34                        4/4       Running   4          5h
    kubernetes-dashboard-latest-3467346521-jlx3v   1/1       Running   1          3h
    

    7.1.3 打开dashboard验证是否监控

    [root@k8s-master monitor]# systemctl restart kube-apiserver.service
    在这里插入图片描述

    7.2 弹性伸缩

    7.2.1 修改rc的配置文件

    [root@k8s-master deployment]# cat k8s_deploy.yml 
    apiVersion: extensions/v1beta1          #扩展版的
    kind: Deployment                #资源类型
    metadata:                               #资源属性
      name: nginx-deployment        #资源的名称
    spec:
      replicas: 3                   #副本数
      minReadySeconds: 60   #滚动升级间隔
      template:
        metadata:           #模板
          labels:
            app: nginx              #容器的标签
        spec:
          containers:
          - name: nginx             #容器的名称
            image: 10.0.0.11:5000/nginx:1.13        #容器所使用的镜像
            ports:
            - containerPort: 80             #容器对外开放的端口
            resources:                      #资源限制
              limits:                       #最大
                cpu: 100m           #cpu时间片
              requests:                     #最小
                cpu: 100m
    
    创建deployment资源        
    kubectl create  -f k8s_deploy.yaml
    
    创建service资源	
    kubectl expose deployment nginx-deployment --port=80 --target-port=80 --type=NodePort
    
    --port:指定service端口
    --target-port:指定容器端口
    --type:指定的服务类型,默认clusterip
    

    7.2.2 创建弹性伸缩规则

    创建hpa资源	
    [root@k8s-master deployment]# kubectl autoscale deployment nginx-deployment --max=10 --min=1 --cpu-percent=5
    deployment "nginx-deployment" autoscaled
    
    --max:最多扩容到多少台
    --min:最少缩容到多少台
    --cpu-percent:cpu使用率达到百分之十进行扩容
    

    在这里插入图片描述

    7.2.3 压力测试

    [root@k8s-master deployment]# yum install httpd-tools.x86_64 
    
    [root@k8s-node-2 ~]# ab -n 1000000 -c 20 http://10.0.0.12:16410/index.html
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7.2.4 导出hpa配置

    kubectl get horizontalpodautoscaler --output=yaml
    在这里插入图片描述

    展开全文
  • k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对应用进行扩容,提升pod的副本数来应对大量的流量,当负载小...

    k8s弹性伸缩概念以及测试用例

    本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f

    弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对应用进行扩容,提升pod的副本数来应对大量的流量,当负载小的时候可以对应用进行缩容,以避免资源浪费。也可以让应用自动的进行扩容和缩容,这一功能有用。例如当微博出现了一个话题时,这个时候人们都去访问,此时他的服务器将无法处理大量的流量访问,这个时候就需要扩容,而当这个话题不在新鲜时,人们的访问流量也就是降下来了,那么就需要对服务器进行缩容处理,来自动适应流量需求。

    scale命令:扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量

    # 语法
    kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME)
    # 将名为foo中的pod副本数设置为3。
    kubectl scale --replicas=3 rs/foo
    kubectl scale deploy/nginx --replicas=30
    # 将由“foo.yaml”配置文件中指定的资源对象和名称标识的Pod资源副本设为3
    kubectl scale --replicas=3 -f foo.yaml
    # 如果当前副本数为2,则将其扩展至3。
    kubectl scale --current-replicas=2 --replicas=3 deployment/mysql
    # 设置多个RC中Pod副本数量
    kubectl scale --replicas=5 rc/foo rc/bar rc/baz

    k8s提供了scale和autoscale来进行扩容和缩容。

    1320926-20190909181524667-517629446.png
    现在对go-deployment进行扩容,结果如图

    1320926-20190909181544717-1630625175.png

    当访问量减少了就进行缩容
    1320926-20190909181602153-475968462.png
    现在我不想手动的进行扩容和缩容了,我想实现让它当访问流量大的时候自动扩容,当访问流量小的时候自动缩容。这个时候autoscale出现了,利用他我们就可以实现自动扩容和缩容。

    # 语法
    kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags]
    # 使用 Deployment “foo”设定,使用默认的自动伸缩策略,指定目标CPU使用率,使其Pod数量在2到10之间
    kubectl autoscale deployment foo --min=2 --max=10
    # 使用RC“foo”设定,使其Pod的数量介于1和5之间,CPU使用率维持在80%
    kubectl autoscale rc foo --max=5 --cpu-percent=80

    到目前为止,k8s一共提供了2个不同维度的AutoScaler。如下图:

    1320926-20190909181623817-957871637.png

    k8s把弹性伸缩分为两类:

    • 资源维度:保障集群资源池大小满足整体规划,当集群内的资源不足以支撑产出新的pod时,就会触发边界进行扩容
    • 应用维度:保障应用的负载处在预期的容量规划内

    对应两种伸缩策略:

    • 水平伸缩
      • 集群维度:自动调整资源池规模(新增/删除Worker节点)
      • Pod维度:自动调整Pod的副本集数量
    • 垂直伸缩
      • 集群维度:不支持
      • Pod维度:自动调整应用的资源分配(增大/减少pod的cpu、内存占用)

    其中最为成熟也是最为常用的伸缩策略就是HPA(水平Pod伸缩),所以下面以它为例来重点分析,官方文档在此:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

    缩容扩容的基本流程为三大步骤:

    1.采集监控指标

    2.聚合监控指标,判断是否需要执行缩扩容

    3.执行缩容扩容操作

    HPA水平缩容扩容架构图
    1320926-20190909181648673-1140632238.png

    HPA的监控指标

    根据官方文档的描述,HPA是使用巡检(Control Loop)的机制来采集Pod资源使用情况的,默认采集间隔为15s,可以通过Controller Manager(Master节点上的一个进程)的--horizontal-pod-autoscaler-sync-period参数来手动控制。

    目前HPA默认采集指标的实现是Heapster,它主要采集CPU的使用率;beta版本也支持自定义的监控指标采集,但尚不稳定,不推荐使用

    因此可以简单认为,HPA就是通过CPU的使用率作为监控指标的。

    聚合算法

    采集到CPU指标后,k8s通过下面的公式来判断需要扩容多少个pod

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

    ceil表示向上取整,举个实际例子,假设某个服务运行了4个Pod,当前的CPU使用率为50%,预期的CPU使用率为25%,那么满足预期的实际Pod数量就是4 * (50% / 25%) = 8个,即需要将Pod容量扩大一倍,增加4个Pod来满足需求。

    当然上述的指标并不是绝对精确的,首先,k8s会尽可能的让指标往期望值靠近,而不是完全相等,其次HPA设置了一个容忍度(tolerance)的概念,允许指标在一定范围内偏离期望值,默认是0.1,这就意味着如果你设置调度策略为CPU预期使用率 = 50%,实际的调度策略会是小于45%或者大于55%进行缩扩容,HPA会尽力把指标控制在这个范围内(容忍度可以通过--horizontal-pod-autoscaler-tolerance来调整)

    需要注意的是:

    • 一是k8s做出决策的间隔,它不会连续地执行扩缩容动作,而是存在一定的cd,目前扩容动作的cd为3分钟,缩容则为5分钟
    • 二是k8s针对扩容做了一个最大限制,每次扩容的pod数量不会大于当前副本数量的2倍。

    转载于:https://www.cnblogs.com/jasonboren/p/11493347.html

    展开全文
  • K8S弹性伸缩简谈

    2020-08-11 11:07:24
    k8s 默认提供了多个服务粒度的弹性伸缩组件。主要有 VPA, addon resizer 和 HPA。 此外,各大云厂商也积极贡献提供了多种伸缩组件,例如阿里云提供的 cronHPA。 在服务粒度的伸缩中,依据执行触发时机不同,可分为...

    按照伸缩粒度,分为服务伸缩和节点伸缩

    1. 服务伸缩
      k8s 默认提供了多个服务粒度的弹性伸缩组件。主要有 VPA, addon resizer 和 HPA。
      此外,各大云厂商也积极贡献提供了多种伸缩组件,例如阿里云提供的 cronHPA。
      在服务粒度的伸缩中,依据执行触发时机不同,可分为:立即执行,定时执行和预测性执行
      1.1 立即执行
      立即执行又细分为垂直伸缩和水平伸缩
      1.1.2 垂直伸缩
      k8s 中的垂直伸缩一般是指调整 Pod 的内存和 CPU 配额
      可用工具:k8s 官方 autoscaler 包中有两个类型的垂直伸缩组件:VPA(vertical pod autoscaler) 和 addon resizer:
      addon resizer
      可以根据集群节点数量来动态地调整某个其他 deployment 中的 pod 的配额。
      addon resizer 周期性地查看集群节点数量,然后计算出监控的 pod 需要分配的内存和 CPU,如果 pod 的实际 pod 配额和所需配额超过某个阈值,则会修改 deployment 并触发生成新的 pod。addon resizer 的这种特性决定了它用来伸缩与集群规模密切相关的服务。一般, addon resizer 用来伸缩部署在集群内的 heapster, metrics-server, kube-state-metrics等监控组件。
      VPA
      设置 VPA 后,它能够自动为 pod 设定 request 和 limit 配额值,然后动态地将 pod 调度到合适的节点上去。
      VPA 在 k8s 中定义类型为 VerticalPodAutoscaler 的 CRD,为每个需要开启垂直弹性伸缩功能的 deployment 创建一个 custom resource,然后 VPA 会定期查看对应 pod 的资源使用情况,结合历史数据,自动调整 pod 的配额。
      VPA controller 由三部分组成。
      Recommender:它监视当前和过去的资源消耗,并基于此提供容器的cpu和内存请求的推荐值。
      Updater:它检查哪个托管的pod设置了正确的资源,如果没有,则杀死它们,以便它们的控制器可以用更新后的请求重新创建它们。
      Admission Plugin:它在新pod上设置正确的资源请求(由于Updater的活动,它们的控制器只是创建或重新创建了这些请求)。
      使用 VPA 监控 deployment 时,它并不会去改变 deployment 的配置,而是使用 admission plugin 以类似 pre hook 的方式
      在创建 pod 时动态为其配置配额值。
      使用 VPA 之前需要注意以下问题:
      VPA 默认会从 metrics server 中采集历史数据,因此使用 VPA 之前,需要配置好 metrics server。VPA 也支持从 prometheus 中采集历史数据,不过需要额外的配置。
      VPA 在伸缩调整过程中,是通过重启 pod 来使调整生效的,因此基础架构不同,可能会引起服务闪断,需要具体分析服务是否可接受使用 VPA 扩容有上限,具体受 pod 所在宿主机影响。为 pod 分配的资源无法超过宿主机的大小。如果 recommender 计算出的 pod 所需资源超过节点可用资源,将导致 pod 一直 pending。这点可与通过与 cluster autoscaler 共同使用来部分解决。VPA 目前不应与基于内存和 CPU 监控的水平Pod自动调度器(HPA)一起使用,否则可能产生预期外的行为。
      1.1.3 水平伸缩
      根据观察到的CPU使用率(或使用自定义指标支持,基于某些其他应用程序提供的指标)
      自动缩放 replication 控制器,deployment,副本集或状态集中的 pod 数量。
      Horizontal Pod Autoscaler 是 k8s 内置的水平伸缩控制器
      使用 HPA 一般需要先搭建 metrics server,metrics server的搭建及使用将另起一篇文章专门讲述
      HPA 实现为Kubernetes API资源和控制器。资源决定控制器的行为。控制器定期(默认为 15 秒)调整复制控制器或部署中的副本数量,以使所观察到的平均CPU利用率与用户指定的目标相匹配
      1.2 定时伸缩
      kubernetes 官方并没有提供定时伸缩相关的组件,但是其原理并不难,只需按照设定的时间调用 kubernetes 的 API 即可。
      1.3 预测性伸缩
      目前暂无成熟的技术方案。

    2. 节点伸缩
      节点伸缩分为垂直伸缩、水平伸缩、定时伸缩(目前暂无成熟方案,本文不介绍)
      2.1 垂直伸缩
      与 kubernetes 本身关系不大,其功能主要取决于厂商。例如,厂商是否支持主机的升降配,以及升降配过程中是否需要重启主机等。如果需要重启主机,那么在进行伸缩之前,我们需要先把节点上的 pod 驱逐到其他主机。但是如果我们是由于机器资源不够用而扩容的话,这样会加剧资源不够用的情况,造成更大的 pending 状态的 pod。因此,如果如果厂商不支持不重启就能扩容的话,不建议采用这种方式进行节点扩容。
      2.2 水平伸缩
      CA(Cluster Autoscaler) 是 kubernetes 官方的节点水平伸缩组件。
      它可以在下列条件之一为真时自动调整Kubernetes集群的大小:
      集群中有 pod 由于资源不足而一直 pending
      集群中有些节点在很长一段时间内没有得到充分利用,且其上的 pod 可以被调度到其他节点上。
      cluster autoscaler 虽然是 kubernetes 官方标准,但是由于其对云厂商依赖较深,因此具体使用方法,功能以及限制以云厂商具体实现为准。目前支持以下云厂商: Google Cloud Platform, AWS, AliCloud, Azure, BaiduCloud。
      以 AliCloud 为例,默认单个用户按量付费实例的配额是30台,单个VPC的路由表限额是50条;且每个可用区的同一类型的实例库存容量波动很大,如果短时间内大量购买同一区同一配置的实例,很容易出现库存不足导致扩容失败。建议在伸缩组中配置多种同规格的实例类型,提高节点伸缩成功率。
      实际使用中,一般为 node 建立多个 node group,专门配置几个 group 来启用弹性伸缩应对突发流量进行扩缩容。主要的 group 并不进行扩缩容,来避免扩缩容导致对大范围的服务的影响。
      此外,节点水平伸缩能否成功实施,与调度策略密切相关。kubernetes 在为 pod 选择可分配节点时,
      是采用 LeastRequestedPriority 策略,简单来说就是就是尽可能把资源打散,把 pod 分配到资源利用率低的节点。这样会倒是有一批利用率较低,但未到缩容阈值的节点,因此会导致无法成功缩容,资源利用率低。因此实际使用时,需要调整 kubernetes 调度策略,来达到最优的结果。

    参考文章:https://segmentfault.com/a/1190000021545907

    展开全文
  • 访问k8s中应用的方式: 第一种:NodePort类型(该种方式必须在svc配置文件中声明是nodeport类型) type:NodePort ports: -port:80 targetPort:80 此时有两种访问方式: 1、woker1节点的ip+servcie...

    访问k8s中应用的方式:

      第一种:NodePort类型(该种方式必须在svc配置文件中声明是nodeport类型)

      type:NodePort

        ports:

         -port:80

         targetPort:80

       此时有两种访问方式:

        1、woker1节点的ip+servcie映射的端口

    http://192.168.1.6:32123/

       2、 利用上一节dashboard的反向代理修改后的url访问

             http://192.168.1.5:8080/ui   访问成功后跳转到

             http://192.168.1.5:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/

              查看所有命名空间的资源,nginx的命名空间为default,services的名字是nginx,根据这两个字段修改拼接

             http://192.168.1.5:8080/api/v1/proxy/namespaces/default/services/nginx/

    kubectl get all --all-namespaces 

      可见用反向代理的方式同样可以访问。 

     


     第二种:ClusterIP类型

        可以在svc生成文件中指定,若不指定就是默认该类型。

        例部署dashboard中的svc,没有声明是type,其就是ClusterIP类型

         访问方式就是反向代理方式

     

    [root@master1 dashboard]# cat dashboard-svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: kubernetes-dashboard
      namespace: kube-system
      labels:
        k8s-app: kubernetes-dashboard
        kubernetes.io/cluster-service: "true"
    spec:
      selector:
        k8s-app: kubernetes-dashboard
      ports:
      - port: 80
        targetPort: 9090

      查看namespace和service的名字 

    kubectl get all --namespace=kube-system

      namespace=kube-system       services=kubernetes-dashboard

        拼接url:  http://192.168.1.5:8080/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard/

    展开全文
  • kubernetes dashboard是kubernetes官方提供的web管理界面,通过dashboard可以很方便地查看集群的...docker pull registry.cn-hangzhou.aliyuncs.com/kubeapps/k8s-gcr-kubernetes-dashboard-amd64:v1.4.1 docker tag re.
  • 通过设置k8s中的dns服务可以直接解析service的名字,得到对应service的ip,可以实现服务在集群内部互相访问。 创建dns的rc,注意修改 - --kube-master-url=http://192.168.1.5:8080 执行kubectl create -...
  • rancher k8s 实现pod弹性伸缩

    千次阅读 2019-09-30 16:42:05
    rancher2.2.7部署的k8s ,通过参数配置实现pod弹性伸缩 1、deployment配置资源限制(必须配置,否则hpa启动后target会一直unknown。估计是这里不配置,rancher就不调用metrics-server去采集pod资源信息,这个问题暂时...
  • k8s_弹性伸缩—HPA篇

    2020-05-15 01:06:22
    [root@aghj-11 ~]# cat ansible-install-k8s/hosts [master] # 如果部署单Master,只保留一个Master节点 # 默认Naster节点也部署Node组件 10.1.1.31 node_name=k8s-master1 10.1.1.32 node_name=k8s-master2 10.1....
  • 1、什么是K8s弹性伸缩? 答:Hpa(全称叫做Horizontal Pod Autoscaler),Horizontal Pod Autoscaler的操作对象是Replication Controller、ReplicaSet或者Deployment对应的Pod(k8s中可以控制Pod的是rc、rs、...
  • k8s hpa弹性伸缩 1.Horizontal Pod Autoscaler 自动扩展作为一个长久的议题,一直为人们津津乐道,系统能够根据负载的变化对计算资源的分配进行自动的扩增或者收缩,无疑是一个非常吸引人的特征,它能够最大可能减少...
  • 5: k8s弹性伸缩 k8s弹性伸缩,需要附加插件heapster监控 5.1安装heapster监控 1:上传并导入镜像,打标签 ls *.tar.gz for n in ls *.tar.gz ;do docker load -i $n ;done docker tag docker.io/kubernetes/heapster_...
  • 这节,将学习弹性的将服务部署到多个节点上。 检查 检查部署情况 kubectl get deployments $ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE mynode 1/1 1 1 10m READY 显示当前/所需副本的比率 UP-...
  • 混合云K8s容器化应用弹性伸缩实战.pdf
  • 简介:混合云K8s容器化应用弹性伸缩实战1. 前提条件本最佳实践的软件环境要求如下:应用环境:①容器服务ACK基于专有云V3.10.0版本。②公共云云企业网服务CEN。③公共云弹性伸缩组服务ESS。配置条件:1)使用专有云...
  • 弹性伸缩介绍 自动弹性伸缩(AutoScaling),是Kubernetes的一大功能和亮点。在OpenStack IaaS云计算中...Cluster Autoscaler:处理K8s集群Node节点伸缩,该功能依赖于IaaS云提供商云主机服务和资源监控服务。 Horiz...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,841
精华内容 1,936
关键字:

k8s弹性伸缩