【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 ...
随机推荐
- springboot user guide hand book
手册: https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/html/getting-started-first-appli ...
- JDBC的全称是什么?
Java DataBase Connectivity,java数据库连接
- 客户端注册 Watcher 实现 ?
1.调用 getData()/getChildren()/exist()三个 API,传入 Watcher 对象 2.标记请求 request,封装 Watcher 到 WatchRegistrati ...
- 在java web工程中实现登入和安全验证
登入页面的话我们之前做过直接可以拿来用翻一翻之前的博客就可以找到 在这个基础上添加验证功能 代码如下: 1 package security; 2 /** 3 * @author 鐜嬭儨鍗? 4 */ ...
- web workers是什么,为什么我们需要web workers?
请看下面的for循环代码,它将运行超过百万次. function SomeHeavyFunction() { for (i = 0; i < 10000000000000; i++) { x = ...
- servlet中的ServletConfig对象
ServletConfig对象对应web.xml文件中的<servlet>节点.当Tomcat初始化一个Servlet时,会创建ServletConfig对象,并将该Servlet的配置信 ...
- C#和TS/JS的对比学习02:函数与方法
程序本质上,就是由数据和处理数据的方法构成.函数和方法,这两个名词虽然字面不同,但意义上其实没有区别.只是因为它们出现的地方有异,给予了不同的名称,比如在全局环境中,叫函数,在对象或类中,叫方法.而C ...
- flex布局中父容器属性部分演示效果
如图可见flex的属性分为父容器和子容器的属性共12个.关于这些属性具体代表什么意思,网上有很多教程的文章,自觉不能写得比别人更好,所以这里主要写了一些例子关于父容器属性效果的演示,希望可以帮助大家理 ...
- 结合Vue.js的前端压缩图片方案
这是一个很简单的方案.嗯,是真的. 为什么要这么做? 在移动Web蓬勃发展的今天,有太多太多的应用需要让用户在移动Web上传图片文件了,正因如此,我们有些困难必须去攻克: 低网速下上传进度缓慢,用户体 ...
- EMS设置发送连接器和接收连接器邮件大小
任务:通过EMS命令设置发送接收连接器和接收连接器的邮件大小限制值为50MB. 以Exchange管理员身份打开EMS控制台.在PowerShell命令提示符下. 键入以下命令设置接收-连接器的最大邮 ...