文档章节

零基础攻略!如何使用kubectl和HPA扩展Kubernetes应用程序

RancherLabs
 RancherLabs
发布于 11/07 10:04
字数 2224
阅读 166
收藏 1

现如今,Kubernetes已经完全改变了软件开发方式。Kubernetes作为一个管理容器化工作负载及服务的开源平台,其拥有可移植、可扩展的特性,并促进了声明式配置和自动化,同时它还证明了自己是管理复杂微服务的主要参与者。而Kubernetes之所以能够在业界被广泛采用,究其原因是Kubernetes迎合了以下需求:

  • 企业想要在不断地增长的同时维持低成本

  • DevOps想要一个可以大规模运行应用程序的稳定平台

  • 开发人员希望有一个可靠并且可复制的流程来编写、测试和debug代码

但是,你是否考虑过如何在使用实际需要的资源的同时获得强大的容器编排平台?最佳资源利用的关键是知道需要扩展什么应用程序以及何时需要扩展应用程序。因此,在本文中,我们将讨论和学习如何扩展Kubernetes容器,并且我们将特别关注两类服务:kubectl和Horizontal Pod Autoscaler(HPA)。

kubectl

在绝大部分情况下和Kubernetes交互是通过一个名为kubectl的命令行工具。kubectl主要用于和Kubernetes API进行通信来创建、更新以及删除在Kubernetes内的工作负载。在下文中,我们将提供一些常见的命令,你可以利用它们开始管理Kubernetes。

大部分常见的kubectl命令都提供了要执行的特定操作或动作,比如创建、删除等。这一方法通常涉及解释描述Kubernetes中的对象(pod、服务、资源等)的文件(YAML或JSON)。这些文件可用于模板以及环境中的持续文件,并且帮助保持Kubernetes对声明式配置的关注。命令行所指定的操作将会传递到API Server,然后根据需要与Kubernetes中的后端服务进行通信。下方的表格可以帮助你安装kubectl:

请注意:随着新版本的发布,适用于Windows的kubectl的最佳版本会有所变化。想要找到目前最合适的二进制文件,请访问以下网址:

https://storage.googleapis.com/kubernetes-release/release/stable.txt

并根据需要调整上述URL。

kubectl 句法

kubectl句法如下:

kubectl [command] [TYPE] [NAME] [flags]
  • Command:指你想要执行的动作(创建、删除等)

  • Type:指你要针对其执行命令的资源类型(Pod、Service等)

  • Name:资源对象的名称(区分大小写),如果你不指定一个名称,它会获取所有与你命令匹配的资源信息。

  • Flags:这部分在句法中不是必要的,但是当需要查找指定资源时,十分有用。例如,-namespace可以让你指定一个特定的命名空间,以在其中执行操作。

kubectl操作

以下示例可以帮助你熟悉运行常用的kubectl操作:


kubectl apply - Apply or Update a resource from a file or stdin.
 
# Create a service using the definition in example-service.yaml.
 
kubectl apply -f example-service.yaml
 
kubectl get - List one or more resources.
 
# List all pods in plain-text output format.
 
kubectl get pods
 
# List all pods in plain-text output format and include additional information (such as node name).
 
kubectl describe - Display detailed state of one or more resources, including the uninitialized ones by default.
 
# Display the details of the node with name <node-name>.
 
kubectl describe nodes <node-name>
 
kubectl delete - Delete resources either from a file, stdin, or specifying label selectors, names, resource selectors, or resources.
 
# Delete a pod using the type and name specified in the pod.yaml file.
 
kubectl delete -f pod.yaml
 
# Delete all the pods and services that have the label name=<label-name>.
 
kubectl delete pods,services -l name=<label-name>
 
kubectl logs - Print the logs for a container in a pod.
 
# Return a snapshot of the logs from pod <pod-name>.
 
kubectl logs <pod-name>
 
# Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
 
kubectl logs -f <pod-name>

以上都是kubectl中常用的操作,如果你想了解更多,可以查阅kubectl的官方指南。此外,我们在往期的文章中也有介绍:

你一定会用到的7条kubectl命令

使用Kubectl管理Kubernetes的全解教程

Horizontal Pod Autoscaler(HPA)

Pod水平自动伸缩(HPA)是Kubernetes的一个重要功能,它可以让你配置集群以自动伸缩正在运行的服务。HPA实现为一种Kubernetes API资源和controller。资源决定controller的行为,controller会定期调整replication controller或部署中的副本数量,使观察到的平均CPU利用率与用户指定的目标相匹配。

同时,HPA实现为控制回路,其周期由controller manager的–horizontal-pod-autoscaler-sync-period标志控制(默认值为30秒)。

在每个周期期间,controller manager 会根据每个HPA定义中指定的指标来查询资源利用率。Controller manager会从资源指标API(针对per-pod资源指标)或自定义指标API(针对所有其他指标)中获得指标。

  • 针对per-pod资源指标(如CPU),controller会从资源指标API中为HPA定位的每个Pod获取指标。然后,如果设置了目标利用率值,则controller将会把利用率值计算为每个pod中容器的同等资源请求的百分比。如果设置了目标原始值,则直接使用原始指标值。然后,controller将所有目标pod的利用率或原始值(取决于指定的目标类型)取平均值,并产生一个用于伸缩所需副本数量的比率。

  • 针对per-pod自定义指标,controller的功能类似于per-pod资源指标,但它适用于原始值,而非利用率值。

  • 对于对象指标,将会获取单个指标(该指标描述了所讨论的对象),并将其与目标值进行比较,以产生用于伸缩所需副本数量的比率。

HPA controller将会通过两种不同的方式获取指标:direct Heapster access和REST client access。当使用direct Heapster access时,HPA将会通过API server的服务代理子资源直接查询Heapster。请注意,Heapster需要部署在集群上并在kube-system命名空间中运行。

HPA的工作流程包含以下四个步骤,如图所示:

  1. 在设置默认30秒间隔期间,HPA会持续检查你所配置的指标值

  2. 如果达到指定阈值,则HPA尝试增加pod的数量

  3. HPA主要更新在部署中或replication controller中的副本数量

  4. 然后,部署/replication controller将会添加任何额外所需的pod

当你推出HPA时请考虑以下因素:

  • 默认的HPA检查间隔是30秒,这个默认值可以通过controller manager的— horizontal-pod-autoscaler-sync-period标志进行配置。

  • 默认的HPA相关指标容差为10%。

  • 在上一次扩展事件之后,HPA将会等待3分钟,以使指标稳定下来。这一等待事件同样可以通过— horizontal-pod-autoscaler-upscale-delay标志进行配置。

  • 从上一次缩小事件开始,HPA将会等待5分钟,以避免autoscaler抖动。同样可以通过— horizontal-pod-autoscaler-downscale-delay标志进行配置。

  • 与replication controller相比,HPA最适合与部署对象或Pod指标配合使用,不适用于使用直接操作的replication controller的滚动更新。当你进行部署时,需要根据部署对象来管理底层副本集的大小。

  • 当HPA与自定义指标(如Pod指标或对象指标)一起使用时,你需要决定何时进行伸缩。由于Kubernetes支持多种指标,因此你可以同时使用多种指标来决定伸缩的时间。请注意,Kubernetes会依照次序来考虑每个指标。更多示例请查阅: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale

结 论

在本文中,我们讨论了两种扩展Kubernetes应用程序的主要工具,两者都是所有Kubernetes服务的关键组件。我们看到了如何安装并且使用不同的功能,如应用、获取、删除、描述以及kubectl的日志等。同时,我们回顾并了解有关Horizontal Pod Autoscaler的信息,例如它是如何工作的以及它对任意Kubernetes服务的重要性。在扩展微服务应用程序时,kubectl和HPA都是Kubernetes的重要功能。

在上个月发布的Rancher 2.3中,已经集成了HPA功能,可以在Rancher中通过UI使用。目前,Rancher 2.3也已经stable,如果想要更全面地了解Rancher 2.3关注我们下周三晚上的Rancher K8S云课堂吧!

欢迎添加小助手(wx:rancher2),进官方技术群,了解更多Kubernetes使用攻略

© 著作权归作者所有

RancherLabs
粉丝 96
博文 262
码字总数 568538
作品 0
深圳
程序员
私信 提问
K8S集群基于heapster的HPA测试

本文将介绍基于heapster获取metric的HPA配置。在开始之前,有必要先了解一下K8S的HPA特性。 1、HPA全称Horizontal Pod Autoscaling,即pod的水平自动扩展。 自动扩展主要分为两种,其一为水平...

ylw6006
2018/05/08
0
0
在Kubernetes集群中部署Heapster

背景 公司的容器云平台需要新增应用的自动扩缩容的功能,以便能够更加智能化的对应用进行管理。 Kubernetes官方提供了HPA(Horizontal Pod Autoscaling)资源对象。要让我们部署的应用做到自...

店家小二
2018/12/14
0
0
综评:5个方面看刚刚发布的Kubernetes 1.12

Kubernetes项目在过去几年中发展迅速,并且作为容器编排和管理解决方案的领导者而备受尊重。有了这个地位,Kubernetes开发者有责任提供经过充分测试,易于维护,高性能和可扩展的API和工具。...

店家小二
2018/12/12
0
0
Kubernetes Autoscaling是如何工作的?

Kubernetes Autoscaling是如何工作的?这是最近我们经常被问到的一个问题。 所以本文将从Kubernetes Autoscaling功能的工作原理以及缩放集群时可以提供的优势等方面进行解释。 什么是Autosca...

好雨云帮
2018/05/07
45
0
Kubernetes 弹性伸缩全场景解读(五) - 定时伸缩组件发布与开源

作者 阿里云容器技术专家刘中巍(莫源) 导读:Kubernetes弹性伸缩系列文章为读者一一解析了各个弹性伸缩组件的相关原理和用法。本篇文章中,阿里云容器技术专家莫源将为你带来定时伸缩组件 ...

阿里巴巴云原生
08/30
26
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
19分钟前
5
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
8
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
10
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
12
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部