Mr. Cappuccino的第43杯咖啡——Kubernetes之Pod控制器(二)

news2024/11/16 21:25:27

Kubernetes之Pod控制器

      • Horizontal Pod Autoscaler(HPA)
        • 安装metrics-server
        • 创建Pod
        • 创建HPA
        • 压力测试
      • Job
      • CronJob

Horizontal Pod Autoscaler(HPA)

上篇文章中所说的ReplicaSet和Deployment,我们已经可以通过手动执行kubectl scale命令实现Pod的扩缩容,但是这显然不符合Kubernetes的定位目标–自动化和智能化。Kubernetes期望可以通过监测Pod的使用情况,实现Pod数量的自动调整,于是就产生了HPA这种控制器。

HPA可以获取每个Pod的利用率,然后和HPA中定义的指标进行对比,同时计算出需要伸缩的具体值,最后实现Pod数量的调整。其实HPA和之前的Deployment一样,也属于一种kubernetes资源对象,它通过追踪分析目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数。

安装metrics-server

方式一:

安装git

yum install git -y 

使用git下载metrics-server

git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server

方式二:

wget https://github.com/kubernetes-sigs/metrics-server/archive/v0.3.6.tar.gz

在这里插入图片描述
方式三:

由于网络连接一直被拒绝,所以我这边选择直接翻墙去外网把文件给下载下来,再上传至服务器。(当然,这个问题也是能够解决的,有兴趣的话可以自行百度一下哈哈哈,我暂时偷个懒)

GitHub下载地址

在这里插入图片描述

解压文件

tar -zxvf metrics-server-0.3.6.tar.gz

进入metrics-server-0.3.6/deploy/1.8+目录

cd metrics-server-0.3.6/deploy/1.8+

修改metrics-server-deployment.yaml文件
(为了方便编写,我这边选择删除掉这个文件,再将下面备好的yaml文件拷贝进去)

rm -rf metrics-server-deployment.yaml
vi metrics-server-deployment.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      hostNetwork: true    
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
        imagePullPolicy: Always
        args:
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP        
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp

下图为文件改动点
在这里插入图片描述
安装metrics-server

kubectl apply -f ./

查看metrics-server创建的Pod

kubectl get pods -n kube-system

如果有名称前缀为metrics-server的Pod,则说明安装是成功的

在这里插入图片描述

查看资源使用情况

kubectl top nodes
kubectl top node
kubectl top pod -n kube-system

在这里插入图片描述

创建Pod

kubectl create ns bubble-dev
# 创建Pod(内存需要至少200M)
kubectl run nginx --image=nginx:1.17.9 --requests=cpu=200m -n bubble-dev
# 暴露端口可供外部访问
kubectl expose deployment nginx --type=NodePort --port=80 -n bubble-dev
# 查看命名空间bubble-dev下的deployment、pod和service
kubectl get deploy,pod,svc -n bubble-dev
# 查看命名空间bubble-dev下pod的详细信息
kubectl describe pods -n bubble-dev

在这里插入图片描述
访问192.168.102.160:31793
在这里插入图片描述

创建HPA

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: pc-hpa
  namespace: bubble-dev
spec:
  minReplicas: 1 # 设定pod的最小数量
  maxReplicas: 10 # 设定pod的最大数量
  targetCPUUtilizationPercentage: 2 # cpu使用率,达到2%则开始弹性扩容
  scaleTargetRef: 
    apiVersion: apps/v1
    kind: Deployment # 指定要控制的nginx信息
    name: nginx
vi pc-hpa.yaml
cat pc-hpa.yaml
kubectl create -f pc-hpa.yaml

在这里插入图片描述

查看hpa

kubectl get hpa -n bubble-dev

在这里插入图片描述

压力测试

打开两个新的窗口进行监听变化

窗口一(监听pod变化):

kubectl get pods -n bubble-dev -w

在这里插入图片描述

窗口二(监听CPU变化):

kubectl get hpa -n bubble-dev -w

在这里插入图片描述

模拟压力测试

yum install httpd-tools -y
ab -n 1000000 -c 1000 http://192.168.102.160:31793/

在这里插入图片描述

可以从窗口二看到CPU已经飙升
在这里插入图片描述
可以从窗口一看到Pod在进行扩容
在这里插入图片描述
当流量下来(请求结束)之后,需要等待一段时间,HPA才会进行自动缩容。

在这里插入图片描述

Job

Job主要用于负责批量处理短暂的一次性任务。

Job的特点:

当Job创建的Pod执行成功结束时,Job将记录成功结束的Pod数量;
当成功结束的Pod达到指定的数量时,Job将完成执行;

apiVersion: batch/v1
kind: Job
metadata:
  name: pc-job
  namespace: bubble-dev
spec:
  manualSelector: true
  completions: 4 # 指定job运行成功Pods的次数。默认值: 1
  parallelism: 2 # 指定job在任一时刻并发运行Pods的数量。默认值: 1  
  selector:
    matchLabels:
      app: busybox-pod
  template:
    metadata:
      labels:
        app: busybox-pod
    spec:
      restartPolicy: Never
      containers:
      - name: counter
        image: busybox:1.30
        command: ["bin/sh","-c","for i in 9 8 7 6 5; do echo $i;sleep 5 ;done" ]

上面Job要完成的任务是:循环输入9、8、7、6、5、4、3、2、1,每输入一个就等待3s,总共需要27s。

kubectl create ns bubble-dev
vi pc-job.yaml
cat pc-job.yaml

在这里插入图片描述
另外打开两个窗口分别监听Pod和Job

kubectl get pod -n bubble-dev -w

在这里插入图片描述

kubectl get job -n bubble-dev -w

在这里插入图片描述

执行配置清单

kubectl create -f pc-job.yaml

从监听Job的窗口上可以看到2个Pod并发执行,总共执行了27s,执行完成后又并发执行了2个Pod,直至成功运行完4个Pod。

在这里插入图片描述

监听Pod的窗口

在这里插入图片描述

删除Job

kubectl delete -f pc-job.yaml

在这里插入图片描述

CronJob

CronJob可以在特定的时间点反复去执行Job任务。

打开两个窗口分别监听CronJob和Job

kubectl get job -n bubble-dev -w

在这里插入图片描述

kubectl get cronjob -n bubble-dev -w

在这里插入图片描述

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: pc-cronjob
  namespace: bubble-dev
  labels:
    controller: cronjob
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    metadata:
    spec:
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: counter
            image: busybox:1.30
            command: ["bin/sh","-c","for i in 9 8 7 6 5; do echo $i;sleep 5 ;done" ]
vi pc-cronjob.yaml
cat pc-cronjob.yaml
kubectl create -f pc-cronjob.yaml

在这里插入图片描述

监听Job的窗口

在这里插入图片描述

监听CronJob的窗口

在这里插入图片描述

删除CronJob

kubectl delete -f pc-cronjob.yaml

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shiro1.9学习笔记

文章目录一、Shiro概述1、Shiro简介1.1 介绍1.2 Shiro特点2、Shiro与SpringSecurity的对比3、Shiro基本功能4、Shiro原理4.1 Shiro 架构(外部)4.2 shiro架构(内部)二、Shiro基本使用1、环境准备2、登录认证2.1 登录认证概念2.2 登录认证基本流程2.3 登录认证实例2.4 身份认证源…

WordPress网站伪静态及固定链接设置教程

WordPress网站伪静态及固定链接设置教程-解决404错误问题!搭建好WordPress网站之后我个人建议首先要做的就是设置好固定链接,WordPress的固定链接也就是网站各个页面的链接格式,默认的方式不太符合现代化网站,推荐使用自定义的方案。既然涉及…

良许翻天覆地的2022年

大家好,我是良许,新年快乐呀~ 在我女室友坚持不懈的努力之下,2022年的最后一天我终于被她传染了,阳了~ 此时的我,正顶着37多度的低烧写下这篇年终总结。 2022年,对于大多数人而言,封控是主旋…

Git使用小乌龟克隆与推送代码Gitee--零命令行(组员版本)

目录 上一篇文章(必读!!!) 概述 分支概念(权限分配): 总体操作思想: 操作步骤 一、组员第一天上班(云端仓库代码克隆到本地仓库进行代码编写&#xff…

网日志处理中的应用架构-《大数据时代的IT架构设计》

用户的上网行为中蕴含着大量的客户特征和客户需求信息,这些信息至关重要,这就要求用户的上网日志记录必须被保存,而且还需要进行数据分析挖掘处理,然后根据处理结果定义用户的行为习惯,为电信运营商实现精细化运营提供重要的营销依…

【数据库】Clickhouse 实践之路

文章目录背景Clickhouse简介为什么选择ClickhouseClickhouse特性Clickhouse建设整体架构数据接入层数据存储层数据服务层数据应用层Clickhouse运维管理平台配置文件结构元数据管理自动化运维用户管理集群操作监控与报警Clickhouse应用BI查询引擎核心诉求选型对比集群构建问题及…

基于jeecgboot的flowable流程设计器的几个bug修复

因为今天在用任务监听器的时候,出现几个bug,所以一并修复与处理。 一、建立任务监听器后,删除不了 主要有两个原因,一个是点击删除没反应,实际上是弹出框跑到后面去了,说明还是z-index问题,调整…

.Net Core中使用NEST简单操作Elasticsearch

C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elasticsearch.Net相比之下更为原始直接非常自由。注意:ES的8.X以上的版本有新的包Elastic.Clients.E…

二极管的“几种”应用

不知大家平时有没有留意,二极管的应用范围是非常广的,下面我们来看看我想到几种应用,也可以加深对电路设计的认识: A,特性应用: 由于二极管的种类非常之多,这里这个大类简单罗列下&#xff1a…

SpringCloud Alibaba集成Dubbo实现远程服务间调用

SpringCloud Alibaba集成Dubbo实现远程服务间调用 工程创建 一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等 项目基本结构图如下所示: 二、依赖引入 在以上两个子模块…

数值方法笔记1:数字表示与误差分析

1 有意义数位概念与有意义数位损失1.1 怎么分析误差2 逼近阶 与渐近记法3 误差传播与稳定性1 有意义数位概念与有意义数位损失 整数的二进制表示使用短除法,网上有很多文章,这里就不再过多赘述了。 提一嘴小数的二进制表示。下面列举了一个例子。 在表…

【Spark分布式内存计算框架——Spark SQL】12. External DataSource(下)rdbms 数据

6.7 rdbms 数据 回顾在SparkCore中读取MySQL表的数据通过JdbcRDD来读取的,在SparkSQL模块中提供对应接口,提供三种方式读取数据: 方式一:单分区模式 方式二:多分区模式,可以设置列的名称,作为…

实例三:MATLAB APP design-多项式函数拟合

一、APP 界面设计展示 注:在左侧点击数据导入,选择自己的数据表,如果数据导入成功,在右侧的空白框就会显示数据导入成功。在多项式项数右侧框中输入项数,例如2、3、4等,点击计算按钮,右侧坐标框就会显示函数图像,在平均相对误差下面的空白框显示平均相对误差。

buu [NPUCTF2020]Classical Cipher 1

题目描述: 题目分析: 首先输入密码 {gsv_pvb_rh_zgyzhs} 后,得到:可以得知密码是错误的,再看看密码 {gsv_pvb_rh_zgyzhs} ,排列无序,那么尝试用凯撒与栅栏解密,发现还是解不出&…

Python基础3

目录 1. 函数多返回值 2. 函数多种传参方式 3. 匿名函数 3.1 函数作为参数传递 3.2 lambda匿名函数 4. 文件的读取操作 4.1 open()打开函数 4.2 读操作方法 4.3 文件的写入 4.4 文件的追加 5. 异常的捕获方法 5.1 捕获常规异常 5.2 捕获指定…

Spring Boot + Redis 实现分布式锁

一、业务背景有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。二、分析流程使用 Redis 作为分布式锁,将锁的状态放到 Redis 统一维护&a…

ESP32学习--基于Mircopython-01

目录 第一步-开发环境搭建 第二步:点亮LED灯 第三步:ESP32连接wifi 1. 设置工作模式 第四步:PC机控制ESP32LED灯 课程链接 基础01-ThonnyMicroPythonESP32环境搭建_哔哩哔哩_bilibili 第一步-开发环境搭建 软件安装---固件下载 必须…

流程引擎之Flowable简介

背景Flowable 是一个流行的轻量级的采用 Java 开发的业务流程引擎,通过 Flowable 流程引擎,我们可以部署遵循 BPMN2.0 协议的流程定义(一般为XML文件)文件,并能创建流程实例,查询和访问流程相关的实例与数据…

基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)

我们通常情况下,芯片进入uboot后,会根据设置的bootdelay时间进行倒数计数。这时候在终端按任意键,即可退出autoboot,进入uboot的命令行模式。 官方提供的uboot源码中,为了防止调试串口干扰导致不能进入系统&#xff0c…

Vue3电商项目实战-分类模块5【12-二级类目-结果区-排序组件、13-二级类目-结果区-数据加载、14-二级类目-结果区-进行筛选】

文章目录12-二级类目-结果区-排序组件13-二级类目-结果区-数据加载14-二级类目-结果区-进行筛选12-二级类目-结果区-排序组件 目的:封装排序组件,完成排序切换效果 大致步骤: 定义一个组件 sub-sort,完成基础布局在 sub.vue 组件…