【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩
@
概述/理解
VirtualMachineInstanceReplicaSet(vmis)确保指定数量的 VirtualMachineInstance(vmi) 副本在任何时候都在运行。
我们可以这样理解,vmis就是kubernetes(k8s)里面的控制器(DeployMent,ReplicaSet)管理我们pod的副本数,实现扩缩容、回滚等。也可以借助HorizontalPodAutoscaler(hpa)实现弹性伸缩。这里我们就说vmis控制器,在这里的vmis控制器,管理我们vmi虚拟机实例的副本数,也可以实现扩缩容,借助hpa实现弹性伸缩。所有我们的yaml文件写法原理都类似。
使用场景
当需要许多相同的虚拟机,并且不关心在虚拟机终止后任何磁盘状态时。
创建vmis
- 编写vmis的yaml文件
[root@master vm]# cat vmis.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstanceReplicaSet
metadata:
name: testreplicaset
spec:
replicas: 2
selector:
matchLabels:
myvmi: myvmi # 保持一致,选择
template:
metadata:
labels:
myvmi: myvmi # 保持一致,匹配
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
resources:
requests:
memory: 1024M
volumes:
- name: containerdisk
containerDisk:
image: centos7
imagePullPolicy: IfNotPresent
- 使用kubectl命令创建vmis
[root@master vm]# kubectl apply -f vmis.yaml
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset created
- 查看运行状态
[root@master vm]# kubectl get vmis
NAME AGE PHASE IP NODENAME READY
testreplicaset6vm9s 42s Running 10.244.0.139 master False
testreplicaset8dshm 22s Scheduling False
testreplicasetbqxnb 22s Scheduling False
[root@master vm]# kubectl get vmis
NAME AGE PHASE IP NODENAME READY
testreplicaset8dshm 46s Running 10.244.0.141 master False
testreplicasetbqxnb 46s Running 10.244.0.140 master False
[root@master vm]# kubectl get pod
NAME READY STATUS RESTARTS AGE
virt-launcher-testreplicaset8dshm-nz7x2 2/2 Running 0 69s
virt-launcher-testreplicasetbqxnb-ljp2f 2/2 Running 0 70s
- describe 查看详细信息
[root@master vm]# kubectl describe vmirs testreplicaset
Name: testreplicaset
Namespace: default
Labels: <none>
Annotations: kubevirt.io/latest-observed-api-version: v1
kubevirt.io/storage-observed-api-version: v1alpha3
API Version: kubevirt.io/v1
Kind: VirtualMachineInstanceReplicaSet
Metadata:
Creation Timestamp: 2022-05-02T13:50:05Z
Generation: 2
Managed Fields:
API Version: kubevirt.io/v1alpha3
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
f:kubevirt.io/latest-observed-api-version:
f:kubevirt.io/storage-observed-api-version:
f:spec:
f:template:
f:metadata:
f:creationTimestamp:
f:status:
.:
f:labelSelector:
f:replicas:
Manager: Go-http-client
Operation: Update
Time: 2022-05-02T13:50:05Z
API Version: kubevirt.io/v1alpha3
Fields Type: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
...
...
.:
f:memory:
f:volumes:
Manager: kubectl
Operation: Update
Time: 2022-05-02T13:50:05Z
Resource Version: 267261
Self Link: /apis/kubevirt.io/v1/namespaces/default/virtualmachineinstancereplicasets/testreplicaset
UID: 96d17d12-17b5-4df7-940a-fac7c6b820d2
Spec:
Replicas: 2
Selector:
Match Labels:
Myvmi: myvmi
Template:
Metadata:
Creation Timestamp: <nil>
Labels:
Myvmi: myvmi
Spec:
Domain:
Devices:
Disks:
Disk:
Bus: virtio
Name: containerdisk
Resources:
Requests:
Memory: 1024M
Volumes:
Container Disk:
Image: kubevirt/cirros-container-disk-demo
Image Pull Policy: IfNotPresent
Name: containerdisk
Status:
Label Selector: myvmi=myvmi
Replicas: 2
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 5m21s virtualmachinereplicaset-controller Started the virtual machine by creating the new virtual machine instance testreplicaseth6zsl
Normal SuccessfulCreate 5m21s virtualmachinereplicaset-controller Started the virtual machine by creating the new virtual machine instance testreplicasetw75s4
扩缩容
- 查看vmis
[root@master vm]# kubectl get -f vmis.yaml
NAME DESIRED CURRENT READY AGE
testreplicaset 3 3 2m52s
- 使用scale命令,设置副本数为5
[root@master vm]# kubectl scale vmirs testreplicaset --replicas 5
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset scaled
- 查看效果
[root@master vm]# kubectl get vmis
NAME AGE PHASE IP NODENAME READY
testreplicaset98x8d 5m29s Running 10.244.0.146 master False
testreplicasetddqc9 2m24s Running 10.244.0.148 master False
testreplicasetdss8l 5m29s Running 10.244.0.144 master False
testreplicasetmhm6x 5m29s Running 10.244.0.145 master False
testreplicasetv4dzs 2m24s Running 10.244.0.147 master False
[root@master vm]# kubectl get pod
NAME READY STATUS RESTARTS AGE
virt-launcher-testreplicaset98x8d-5p99p 2/2 Running 0 3m15s
virt-launcher-testreplicasetddqc9-6c2m4 2/2 Running 0 10s
virt-launcher-testreplicasetdss8l-9mv56 2/2 Running 0 3m15s
virt-launcher-testreplicasetmhm6x-r76wt 2/2 Running 0 3m15s
virt-launcher-testreplicasetv4dzs-bm4s8 2/2 Running 0 10s
弹性伸缩
方法1
- 使用Horizontal Pod Autoscaler(hpa),创建yaml文件
[root@master vm]# cat vmis-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: null
name: testreplicaset
spec:
maxReplicas: 5
minReplicas: 2
scaleTargetRef:
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstanceReplicaSet
name: testreplicaset
- 创建vmis-hpa
[root@master vm]# kubectl apply -f vmis-hpa.yaml
horizontalpodautoscaler.autoscaling/testreplicaset created
- 查看状态
[root@master vm]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
testreplicaset VirtualMachineInstanceReplicaSet/testreplicaset <unknown>/80% 2 5 0 7s
方法2
- 使用
kubectl autoscale命令
[root@master vm]# kubectl autoscale vmirs testreplicaset --min=2 --max=5
【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩的更多相关文章
- 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容
作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...
- 三十三、HPA实现自动扩缩容
通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...
- 构建Docker平台【第四篇】创建服务及扩缩容等操作
第一步:创建服务 1. 配置 nginx 的 yaml 文件 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-ng ...
- Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...
- 如何根据不同业务场景调节 HPA 扩缩容灵敏度
背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downs ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
- Docker Swarm(七)Scale 扩(缩)容服务
扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker serv ...
- Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制
本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...
- Airbnb的动态kubernetes集群扩缩容
Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...
随机推荐
- 为什么Java中 wait 方法需要在 synchronized 的方法中调用?
另一个棘手的核心 Java 问题,wait 和 notify.它们是在有 synchronized 标记的方法或 synchronized 块中调用的,因为 wait 和 modify 需要监视对其上 ...
- 面试问题之C++语言:从源文件到可执行文件过程
1.预处理: 预处理过程主要处理那些源文件中的以"#"开始的预编译指令.包括:包含头文件.宏替换.条件编译而不进行语法检查. 2.编译: 编译过程就是把预处理的文件进行一系列的词法 ...
- 两个对象值相同(x.equals(y) == true),但却可以有不同的hashcode?
这个得看情况,如果该对象重写了equals方法,那么可能会出现equals相同,但hashcode不同的情况,但假如没有重写equals方法,那么它默认继承是Object的equals方法,根据源码可 ...
- 指出在 spring aop 中 concern 和 cross-cutting concern 的不同之处?
concern 是我们想要在应用程序的特定模块中定义的行为.它可以定义为我们想 要实现的功能. cross-cutting concern 是一个适用于整个应用的行为,这会影响整个应用程序. 例如,日 ...
- vmware克隆Centos虚拟机网卡无法启动问题
快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...
- 深入 x64
本篇原文为 X64 Deep Dive,如果有良好的英文基础的能力,可以点击该链接进行阅读.本文为我个人:寂静的羽夏(wingsummer) 中文翻译,非机翻,著作权归原作者所有. 由于原文十 ...
- BMZCTF 端午节就该吃粽子
端午节就该吃粽子 题目如下让我们访问login.php 然后就一个登录界面查看源码发现index.php 我们直接访问发现没有结果使用伪协议读取 然后我们使用base64解密 <?php err ...
- Numpy非常重要有用的数组合并操作
Numpy非常重要有用的数组合并操作 背景:在给机器学习准备数据的过程中,经常需要进行不同来源的数据合并的操作. 两类场景: 给已有的数据添加多行,比如增添一些样本数据进去: 给已有的数据添加多列,比 ...
- 2022DASCTF X SU 三月春季挑战赛 Calc
查看代码 #coding=utf-8 from flask import Flask,render_template,url_for,render_template_string,redirect,r ...
- python——如何import包目录
文件位置 文件所在位置包括 , 源根目录的位置 该文件位置(也可以叫相对位置). 导入包的时候会从文件位置进行查找,并导入. 导入包 1. 什么是包? pycharm中包的图片 其中文件夹上有个圆点的 ...