【kubernetes】资源调度综合篇,HPA自动扩/缩容等功能

一、标签和选择器

1、标签

  • 命令行操作
# 查看标签
kubectl get [资源类型] [资源名] --show-labels

# 修改标签
kubectl label [资源类型] [资源名] [标签名]=[标签值] --overwrite

# 创建标签
kubectl label [资源类型] [资源名] [标签名]=[标签值]
  • Yalm文件操作

2、选择器

  • 命令行操作
# 【单条件】选择查看指定标签 type1=app1
kubectl get [资源类型]  -l [标签名1]=[标签值1]

# 【多条件】选择查看指定标签 type1=app1 且 type2=app2
kubectl get [资源类型]  -l [标签名1]=[标签值1],[标签名2]=[标签值2]
kubectl get [资源类型]  -l '[标签名1]=[标签值1],[标签名2] in (标签值2,标签值3,标签值4)'

  • Yalm文件操作

二、Deployment (Deploy)

1、创建

通过deployment创建后,查看其yaml文件配置,拷贝有用配置,创建新的yaml文件进行编辑,在创建

# 命令创建资源deploy-nginx
kubectl create deploy [deploy名] --image=nginx

# 查看其对应的yaml文件
kubectl get deploy [deploy名] -o yaml

# 复制可用配置信息,粘贴到新的new—deploy.yaml文件中
vim ./new-deploy.yaml

# 更改完配置后,在运行生成新的容器
kubectl create/apply -f new-deploy.yaml

2、滚动更新

# 编辑deployment资源
kubectl edit deploy [deploy名]

# 更改pod模板的版本号(由‘1.7.9’改为‘1.9.1’)
# 方法一:更改yaml文件配置后,保存并退出
containers:
- image: nginx:1.9.1 #更改此处
# 方法二:通过命令更改
kubectl set image deployment/[deploy名] nginx=nginx:1.9.1 --record '更新原因'

# 查看滚动是否完成
kubectl rollout status deploy [deploy名]

# 查看详细更新记录,细看最后‘Events’详细滚动更新信息
kubectl describe deploy  [deploy名]

3、回滚

# 查看之前更新的版本
kebectl rollout history deployment/[deploy名]

# 查看Deployment的历史记录以确定要回滚到的版本信息(只是查看,不执行回滚):
kubectl rollout history deployment/[deploy名] --revision=[回滚版本号]

# 回滚到指定版本
kubectl rollout undo deployment/[deploy名] --to-revision=[回滚版本号]

# 回滚到上一个版本
kebectl rollout undo deployment/[deploy名]

# 手动编辑指定版本,保存后更新
kubectl edit deployment <deployment-name>

注意:只所有可以回滚,是因为ymal文件设置了 spec.revisonHistoryLimit的值默认为10,不为0。
如果为0,则无法回滚。

4、扩容缩容

# 将副本扩容/缩容到指定个数(6个)
kubectl scale --replicas=6 deploy [deploy名]

5、暂定/恢复

通过编辑edit资源,每次都会生成一个新版本的re。因此如果可能编辑多次,可以暂定更新

# 暂停更新rs版本
kubectl rollout pause deploy [deploy名]

# 编辑完后,恢复更新rs版本
kubectl rollout resume deploy [deploy名]

三、StatefunSet (STS)

# 创建Linux的一个工具镜像容器,工具用完进行操作,永远不要重启,运行完后自动删除
kubectl run -it --image busybox:1.28.4 dns-test --restart=Nerver --rm /bin/bash

1、创建

通过yaml文件创建,文件内容写法
在这里插入图片描述
注意:开头的两个 ---之间,表示一个文档的开始。它用于将YAML文件分割成多个文档块。每个文档块可以包含一组相关的数据或配置。

2、扩容缩容

# 将副本扩容/缩容到指定个数(6个)
kubectl scale --replicas=6  sts [sts名]

3、镜像更新

目前不支持直接更新image,需要patch来间接实现

# 更新镜像
kubectl patch sts [sts名] --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.9.1"}]'
  • RollingUpdate

【 灰度发布/金丝雀发布】

目标:将项目上线后产生的影响,降到最低。
方案:利用滚动更新中的partition属性,可以实现简易的灰度发布的效果。
例如:我们有5个 pod,如果当前partition 设置为 3,那么此时滚动更新时,只会更新那些序号>=3的 pod。
利用该机制,我们可以通过控制 partition 的值,来决定只更新其中一部分 pod,确认没有问题后,再逐渐增大更新的pod 数量,最终实现全部 pod 更新。

在这里插入图片描述

  • OnDelete
    当设置为OnDelete后,再更改yaml文档配置后,pod不会立刻更新。只有当删除某一个pod后,该pod才会立刻生成并产生更新。
    在这里插入图片描述

4、删除

删除时,需删除两部分内容:StatefulSet 和 Headless Service

(1)删除StatefulSet

# 级联删除,删除时,会将pod一起删除
kubectl delete sts [sts名]

# 非级联删除,删除时,不删除pod
kubectl delete sts [sts名] --cascade=false

(2)删除Headless Service

# 直接删除
kubectl delete service [service名]

5、删除pvc

StatefulSet删除后,PVC还会保留,数据不再便用的话,也符要删除。

kubectl delete pvc [pvc名]

四、DaemonSet (DS)

为每一个匹配的 Node节点,都部署一个守护进程。
DaemonSet 会忽略 Node的unschedulable 状态,有两种方式来指走 Pod, 只运行在指定的 Node 节点上:

  • nodeSelector:只调度到匹配指定label的 Node 上
    在这里插入图片描述

  • nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作

  • podAffinity:调度到满足条件的 Pod 所在的 Node 上

五、HPA自动扩/缩容

Pod 自动扩容:可以根据CPU 使用率、内存使用率或自定义指标(metrics),自动对 Pod 进行扩/缩容pod的数量。

通常用于 Deployment,不适用于无法扩/缩容的对象,如DaemonSet

控制管理器每隔30s(可以通过-horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况。

支持三种metrics类型

  • 预定义metrics(bPod的CPU)以利用率的方式计算
  • 自定义的Pod metrics,以始值(raw value)的方式计算
  • 自定义的object metrics支持两种metrics查询方式:Heapster和自定义的REST API
  • 支持多metrics
    (1)通过服务配置,设定指标
    配置resources.requests.cpu resources.requests.memory 配置cpu,内存的指标。
    在这里插入图片描述
# 1.创建一个 HPA
# cpu占用超过20%,进行扩容,最少pod数量为 2,最多pod数量为 5
kubectl autoscale deploy <deploy名>  --cpu-percent=20  --min=2  --max=5

# 2. 测试:找到对应服务的 service,编写循环测试脚本提升内存与cpu 负载
while true; do wget -q -o- http://<ip:port>> /dev/null ; done

# 3. 获取 HPA 信息比例
kubectl get hpa

(2)自定义指标

  • 控制管理器开启-horizontal-pod-autoscaler-use-rest-clients
  • 控制管理器的-apiserver指向API Server Aggregator
  • 在APIServer Aggregator中注册自定义的metrics APl
  • 37
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值