现如今,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云课堂吧!

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

零基础攻略!如何使用kubectl和HPA扩展Kubernetes应用程序的更多相关文章

  1. 01 | VIM基础攻略

    启动 vim 后,vim 处于 normal 模式. Step One: "i" -> insert 模式, ESC -> normal 模式: "x&quo ...

  2. 巨蟒python全栈开发数据库攻略1:基础攻略

    1.什么是数据库? 2.数据库分类 3.数据库简单介绍 4.安装数据库 5.修改root密码 6.修改字符集 7.sql介绍 8.简单sql操作

  3. 巨蟒python全栈开发数据库攻略2:基础攻略2

    1.存储引擎表类型 2.整数类型和sql_mode 3.浮点类&字符串类型&日期类型&集合类型&枚举类型 4.数值类型补充 5.完整性约束

  4. 2019阿里云开年Hi购季基础云产品分会场全攻略!

    2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段.3月04日-3月16日的新购满返+5折抢购阶段.3月16日-3 ...

  5. JQuery攻略(一) 基础知识——选择器 与 DOM

    JQuery是功能丰富的Javascript库,可以帮助用户毫不费力地把动态功能应用到网页. JQuery具有许多强大的功能,包括访问部分网页,快速修改网页内容,添加动画,应用AJAX技术等等. 正因 ...

  6. 用C#制作PDF文件全攻略

    用C#制作PDF文件全攻略 目  录 前    言... 3 第一部分 iText的简单应用... 4 第一章 创建一个Document 4 第一步 创建一个Document实例:... 5 第二步 ...

  7. JAVA EE企业级开发四步走完全攻略 [转]

    http://bbs.51cto.com/thread-550558-1.html 本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划, ...

  8. IOS面试攻略

    IOS面试攻略(1.0) 2013-10-13 20:58:09|  分类: IOS面试 |  标签:ios知识点总汇  ios面试  |举报|字号 订阅     来自:伊甸网 @ 看到这个关键字,我 ...

  9. 零基础照样做RNA-seq差异分析

    零基础照样做RNA-seq差异分析 GCBI知识库2018-08-24 14:43:36 基因表达谱的差异分析是RNA-seq中最常见的应用.你眼中的RNA-seq差异分析或许是酱紫的,对不会编程,不 ...

随机推荐

  1. Linux Shell 基础知识(二)

    1.本文知识结构 2.文件的查询与检索 2.1. cd 目录切换 找到文件/目录位置:cd 切换到上一个工作目录: cd - 切换到home目录: cd or cd ~ 显示当前路径: pwd 更改当 ...

  2. Thinkphp5.0第三篇

    批量插入数据 //新增一条数据的方法 public function add() { /*$user =new UserModel(); $user->id=1; $user->name= ...

  3. FFmpeg(五) 重采样相关函数理解

    一.重采样流程 重采样(解码音频数据之后格式不可以直接播放,需要重采样,类似图像的像素转换) 1.分配上下文 2.设置参数(分为(前几个是)输出格式和(后几个)输入格式,两个相对应的) 可以通过改变样 ...

  4. js对数组、对象的深拷贝、复制

    基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的 基本类型:Number Boolean undefined String Null 引用类型:Object Function js ...

  5. MySQLdb操作数据库

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...

  6. Airport Express UVA - 11374

    In a small city called Iokh, a train service, Airport-Express, takes residents to the airport more q ...

  7. JZOJ 3875 星球联盟

    [问题描述] 在遥远的 S 星系中一共有 N 个星球,编号为 1…N.其中的一些星球决定组成联盟, 以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这 N 个星球间有 M 条太空 ...

  8. Spring基础(二)

    一.使用注解配置Spring 1.1步骤 --配置文件中,指明注解位置 --要用的地方打上注解 --改对象的作用范围(修改掉默认的单例,变多例) --属性的注入(两种) 使用的反射实现 set方法实现 ...

  9. shark恒破解笔记6-摆脱NAG

    1.打开软件后,发现是未注册,然后点击关闭按钮,会弹出窗口 我们的目的就是为了能够去掉这个弹窗. 2.对这个程序进行查壳,没有什么发现 3.载入OD里面,F9运行起来,随后切换到程序主界面点击关闭按钮 ...

  10. phpstorm 设置换行符的格式

    菜单 >  文件 > 设置