@

概述/理解

VirtualMachineInstanceReplicaSet(vmis)确保指定数量的 VirtualMachineInstance(vmi) 副本在任何时候都在运行。

我们可以这样理解,vmis就是kubernetes(k8s)里面的控制器(DeployMent,ReplicaSet)管理我们pod的副本数,实现扩缩容、回滚等。也可以借助HorizontalPodAutoscaler(hpa)实现弹性伸缩。这里我们就说vmis控制器,在这里的vmis控制器,管理我们vmi虚拟机实例的副本数,也可以实现扩缩容,借助hpa实现弹性伸缩。所有我们的yaml文件写法原理都类似。

使用场景

当需要许多相同的虚拟机,并且不关心在虚拟机终止后任何磁盘状态时。

创建vmis

  1. 编写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
  1. 使用kubectl命令创建vmis
[root@master vm]# kubectl apply -f vmis.yaml
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset created
  1. 查看运行状态
[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
  1. 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

扩缩容

  1. 查看vmis
[root@master vm]# kubectl get -f vmis.yaml
NAME DESIRED CURRENT READY AGE
testreplicaset 3 3 2m52s
  1. 使用scale命令,设置副本数为5
[root@master vm]# kubectl scale vmirs testreplicaset --replicas 5
virtualmachineinstancereplicaset.kubevirt.io/testreplicaset scaled
  1. 查看效果
[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

  1. 使用Horizo​​ntal 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
  1. 创建vmis-hpa
[root@master vm]# kubectl apply -f vmis-hpa.yaml
horizontalpodautoscaler.autoscaling/testreplicaset created
  1. 查看状态
[root@master vm]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
testreplicaset VirtualMachineInstanceReplicaSet/testreplicaset <unknown>/80% 2 5 0 7s

方法2

  1. 使用kubectl autoscale命令
[root@master vm]# kubectl autoscale vmirs testreplicaset --min=2 --max=5

【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩的更多相关文章

  1. 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容

    作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...

  2. 三十三、HPA实现自动扩缩容

    通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...

  3. 构建Docker平台【第四篇】创建服务及扩缩容等操作

    第一步:创建服务 1. 配置 nginx 的 yaml 文件 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-ng ...

  4. Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler

    Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...

  5. 如何根据不同业务场景调节 HPA 扩缩容灵敏度

    背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downs ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

  7. Docker Swarm(七)Scale 扩(缩)容服务

    扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker serv ...

  8. Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制

    本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...

  9. Airbnb的动态kubernetes集群扩缩容

    Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...

随机推荐

  1. Java 中的 ReadWriteLock 是什么?

    读写锁是用来提升并发程序性能的锁分离技术的成果.

  2. kafka指定partiton生产

    kafka发送一个消息的时候需要封装成一个ProducerRecord : public ProducerRecord(String topic, Integer partition, Long ti ...

  3. Spring Bean生命周期回调方法

    参阅官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory ...

  4. 有哪些类型的通知Advice?

    Before - 这些类型的 Advice 在 joinpoint 方法之前执行,并使用 @Before 注解标记进行配置. After Returning - 这些类型的 Advice 在连接点方法 ...

  5. 实验配置cisco单臂路由

    第一步 搭建实验拓扑图 第二步 对路由器做基本配置 为路由器创建名称: 设置进入特权模式 口令:控制台登录密码:vty登录密码 禁用DNS查找: 加密明文密码: 创建一个向访问设备者发出警告的标语&q ...

  6. L298N双H桥集成电路板的双H桥是什么意思?为什么要叫双H桥?L298N工作原理

    H桥是一个典型的直流电机控制电路,因为它的电路形状酷似字母H,故得名与"H桥".4个三极管组成H的4条垂直腿,而电机就是H中的横杠. 控制两个三极管的导通来控制电流方向,从而实现电 ...

  7. (stm32f103学习总结)—stm32定时器中断

    一.定时器介绍 STM32F1的定时器非常多,由2个基本定时器(TIM6.TIM7).4个通 用定时器(TIM2-TIM5)和2个高级定时器(TIM1.TIM8)组成.基本定 时器的功能最为简单,类似 ...

  8. python学习笔记(一)——Python基础

    一.python 基础语法 python 的解释器在启动时会自动加载一个内建的模块,因此我们在使用 print().input()等函数时不用导入其他模块文件. 基本语法: 每条语句结尾没有分号 定义 ...

  9. web app遇到的一些坑及小技能(持续更新...)

    遇到的一些坑 问题:手机端 click 事件会有大约 300ms 的延迟 原因:手机端事件 touchstart --\> touchmove --> touchend or touchc ...

  10. 分享一个自己写的基于canvas的原生js图片爆炸插件

    DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...