Show last authors
1 = Kubevirt Запуск виртуальных машин в кластере Kubernetes =
2
3 Kubevirt позволяет разработчикам легко контейнеризировать приложения и использовать Kubernetes для запуска виртуальных машин. Узнайте больше о Kubevirt и о том, как он используется[[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/KubeVirt-Kubernetes-Virtual-Machines-780x470.png||alt="Kubevirt виртуальные машины kubernetes"]]
4
5 Kubevirt виртуальные машины kubernetes
6
7 Кажется, что мы прошли полный круг, поскольку Kubernetes повзрослел и значительно расширился за последние несколько лет, чтобы делать некоторые действительно удивительные вещи. Одна из удивительных вещей, которые вы можете делать сейчас с Kubernetes, — это запускать виртуальные машины. Kubevirt делает это возможным. В этой статье давайте рассмотрим Kubevirt и эту функциональность.
8
9 Оглавление
10
11 == Что такое Кубевирт? ==
12
13 Давайте поговорим о [[Kubevirt>>url:https://kubevirt.io/]] и о том, что это такое. Kubevirt — это решение с открытым исходным кодом, которое позволяет кластерам Kubernetes запускать и управлять виртуальными машинами, включая Linux и Windows, а также собственными рабочими нагрузками контейнеров Kubernetes (pods) и позволяет разработчикам быстро контейнеризировать приложения. Предприятия ищут способы стандартизации своей инфраструктуры и использования согласованного инструментария. Использование [[Kubernetes для контейнеров и виртуальных машин>>url:https://www.virtualizationhowto.com/2022/06/rancher-kubevirt-with-harvester-virtual-machines-with-kubernetes/]] помогает в этом.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Kubevirt-allows-you-to-run-virtual-machines-in-your-Kubernetes-cluster.png~|~|alt="Kubevirt позволяет запускать виртуальные машины в кластере Kubernetes"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Kubevirt-allows-you-to-run-virtual-machines-in-your-Kubernetes-cluster.png]]
14
15 Kubevirt позволяет запускать виртуальные машины в кластере Kubernetes
16
17 Kubevirt предоставляет API виртуализации, позволяя API Kubernetes [[управлять как контейнерами, так и несколькими виртуальными машинами>>url:https://www.virtualizationhowto.com/2023/02/migrate-unifi-controller-from-a-virtual-machine-to-a-docker-container/]] , предоставляя единую унифицированную платформу разработки для обоих. Kubevirt является частью облачного вычислительного фонда и имеет много участников из сообщества.
18
19 == Почему разработчикам может быть интересно использовать Kubevirt? ==
20
21 Для команд разработчиков, переходящих на инфраструктуру Kubernetes и [[облачные вычисления>>url:https://www.virtualizationhowto.com/2014/03/cloud-computing-matured/]] , особенно тех, у кого есть существующие рабочие нагрузки на основе виртуальных машин (ВМ) с гостевыми установками операционной системы, которые нелегко контейнеризировать. KubeVirt заполняет пробел между традиционными конфигурациями ВМ и современными контейнеризированными средами для рабочих процессов разработки и производства. С Kubevirt вам больше не нужна отдельная [[среда гипервизора для запуска рабочих нагрузок виртуальных машин>>url:https://www.virtualizationhowto.com/2024/01/virtual-machine-platform-vs-hyper-v-vs-windows-hypervisor-platform/]] . Он также позволяет взаимодействовать с вашими ресурсами Kubernetes с помощью стандартных инструментов, таких как  **kubectl.**
22
23 Технология Kubevirt обеспечивает более плавный и быстрый переход для команд с рабочими процессами на основе виртуальных машин для быстрой контейнеризации виртуализированных рабочих нагрузок. Она позволяет командам использовать существующие [[виртуальные машины VM для приложений, пока они работают>>url:https://www.virtualizationhowto.com/2011/09/linux-network-connection-not-working-virtual-machine-esxi/]] над стратегией развертывания приложений, находящихся в архитектурах на основе контейнеров.
24
25 == Архитектура Кубеврита ==
26
27 Пользователи, взаимодействующие со службами виртуализации, общаются через API виртуализации для организации желаемых экземпляров виртуальных машин (VMI). С Kubevirt Kubernetes отвечает за управление планированием, сетевым взаимодействием и хранением данных для ваших виртуальных машин.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Layers-of-the-Kubevirt-stack.png~|~|alt="Слои стека kubevirt"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Layers-of-the-Kubevirt-stack.png]]
28
29 Слои стека kubevirt
30
31 Ниже представлена ​​упрощенная схема, показывающая основы того, как дополнительные контроллеры и демоны взаимодействуют с Kubernetes и где хранятся дополнительные типы. Архитектура Kubevirt интегрируется с существующими кластерами Kubernetes, используя оставшиеся виртуализированные компоненты. Эта интеграция становится возможной благодаря Kubevirt Operator и Custom Resource Definitions (CRD), которые расширяют возможности Kubernetes.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Simplified-diagram-of-the-Kubevirt-architecture.png~|~|alt="Упрощенная схема архитектуры kubevirt"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Simplified-diagram-of-the-Kubevirt-architecture.png]]
32
33 Упрощенная схема архитектуры kubevirt
34
35 == Как можно использовать Кубевирт? ==
36
37 Существует несколько дистрибутивов Kubernetes, которые вы можете использовать для тестирования Kubevirt и предоставления отзывов о решениях. Обратите внимание на следующие руководства по быстрому старту, предоставленные Kubevirt.io:
38
39 * [[KubeVirt на killercoda>>url:https://killercoda.com/kubevirt]]
40 * [[KubeVirt — это миникуб.>>url:https://kubevirt.io/quickstart_minikube/]]
41 * [[KubeVirt на вид>>url:https://kubevirt.io/quickstart_kind/]]
42 * [[KubeVirt о облачных провайдерах>>url:https://kubevirt.io/quickstart_cloud/]]
43
44 == Rancher Harvester: легкий Кубевирт ==
45
46 Кроме того, если вам нужно выделенное решение для простого тестирования Kubevirt, Rancher Harvester — это решение с открытым исходным кодом, содержащее все пакеты, необходимые для запуска программного обеспечения Kubevirt, которое позволяет вам устанавливать Harvester на физических серверах или вложенных виртуальных машинах. Оно обеспечивает управление виртуальными машинами, а также запуск собственных модулей Kubernetes и извлечение образов контейнеров из реестра контейнеров.
47
48 Используя Kubevirt с Harvester, вы можете запускать свои виртуальные машины с конструкциями масштабируемости, безопасности, rbac и производительности для вашей рабочей среды, так же, как вы можете это делать с вашими контейнерными pod. Вы можете ознакомиться с проектом Harvester и документацией здесь:  [[Harvester – гиперконвергентная инфраструктура с открытым исходным кодом (harvesterhci.io)>>url:https://harvesterhci.io/]] . Вы также можете ознакомиться с официальными репозиториями и релизами здесь:  [[GitHub – harvester/harvester: программное обеспечение гиперконвергентной инфраструктуры с открытым исходным кодом (HCI)>>url:https://github.com/harvester/harvester]] .
49
50 Ниже я загрузил ISO-образ Harvester и создал новый кластер Harvester на ваших узлах.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Create-a-new-Harvester-cluster.png~|~|alt="Создать новый кластер харвестера"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Create-a-new-Harvester-cluster.png]]
51
52 Создать новый кластер харвестера
53
54 После установки Rancher Harvester и ожидания готовности кластера Harvester и IP-адреса управления.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Harvester-cluster-ready-to-go.png~|~|alt="Кластерный агрегат готов к работе"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Harvester-cluster-ready-to-go.png]]
55
56 Кластерный агрегат готов к работе
57
58 Вход в Harvester.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Logging-into-Harvester.png~|~|alt="Вход в комбайн"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Logging-into-Harvester.png]]
59
60 Вход в комбайн
61
62 Ниже я создал новую виртуальную машину Ubuntu 22.04 и загрузил VM для установки с помощью Kubevirt в Harvester. Очень круто! Опыт управления в Harvester отличный.[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Installing-a-virtual-machine-using-Kubevirt-and-Harvester.png~|~|alt="Установка виртуальной машины с помощью kubevirt и harvester"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/Installing-a-virtual-machine-using-Kubevirt-and-Harvester.png]]
63
64 Установка виртуальной машины с помощью kubevirt и harvester
65
66 == Конфигурация файла YAML для виртуальной машины Kubevirt ==
67
68 Одной из действительно крутых вещей в использовании Kubevirt для создания виртуальных машин является возможность описывать их в файле YAML. Создавая виртуальную машину Ubuntu 22.04 LTS в Harvester, я использовал следующий код YAML для манифеста виртуальной машины в качестве примера в приведенной выше демонстрации:
69
70 {{{apiVersion: kubevirt.io/v1
71 kind: VirtualMachine
72 metadata:
73 annotations:
74 harvesterhci.io/vmRunStrategy: RerunOnFailure
75 harvesterhci.io/volumeClaimTemplates: >-
76 [{"metadata":{"name":"ubuntu-01-disk-0-fhsec","annotations":{"harvesterhci.io/imageId":"default/image-675pg"}},"spec":{"accessModes":["ReadWriteMany"],"resources":{"requests":{"storage":"20Gi"}},"volumeMode":"Block","storageClassName":"longhorn-image-675pg"}}]
77 kubevirt.io/latest-observed-api-version: v1
78 kubevirt.io/storage-observed-api-version: v1alpha3
79 network.harvesterhci.io/ips: '[]'
80 creationTimestamp: '2024-01-21T14:45:14Z'
81 finalizers:
82 - harvesterhci.io/VMController.UnsetOwnerOfPVCs
83 generation: 2
84 labels:
85 harvesterhci.io/creator: harvester
86 harvesterhci.io/os: ubuntu
87 managedFields:
88 - apiVersion: kubevirt.io/v1alpha3
89 fieldsType: FieldsV1
90 fieldsV1:
91 f:metadata:
92 f:annotations:
93 f:kubevirt.io/latest-observed-api-version: {}
94 f:kubevirt.io/storage-observed-api-version: {}
95 manager: Go-http-client
96 operation: Update
97 time: '2024-01-21T14:45:15Z'
98 - apiVersion: kubevirt.io/v1
99 fieldsType: FieldsV1
100 fieldsV1:
101 f:metadata:
102 f:annotations:
103 .: {}
104 f:harvesterhci.io/vmRunStrategy: {}
105 f:harvesterhci.io/volumeClaimTemplates: {}
106 f:network.harvesterhci.io/ips: {}
107 f:finalizers:
108 .: {}
109 v:"harvesterhci.io/VMController.UnsetOwnerOfPVCs": {}
110 f:labels:
111 .: {}
112 f:harvesterhci.io/creator: {}
113 f:harvesterhci.io/os: {}
114 f:spec:
115 .: {}
116 f:runStrategy: {}
117 f:template:
118 .: {}
119 f:metadata:
120 .: {}
121 f:annotations:
122 .: {}
123 f:harvesterhci.io/sshNames: {}
124 f:labels:
125 .: {}
126 f:harvesterhci.io/vmName: {}
127 f:spec:
128 .: {}
129 f:accessCredentials: {}
130 f:affinity: {}
131 f:domain:
132 .: {}
133 f:cpu:
134 .: {}
135 f:cores: {}
136 f:sockets: {}
137 f:threads: {}
138 f:devices:
139 .: {}
140 f:disks: {}
141 f:inputs: {}
142 f:interfaces: {}
143 f:features:
144 .: {}
145 f:acpi:
146 .: {}
147 f:enabled: {}
148 f:machine:
149 .: {}
150 f:type: {}
151 f:resources:
152 .: {}
153 f:limits:
154 .: {}
155 f:cpu: {}
156 f:memory: {}
157 f:evictionStrategy: {}
158 f:hostname: {}
159 f:networks: {}
160 f:terminationGracePeriodSeconds: {}
161 f:volumes: {}
162 manager: harvester
163 operation: Update
164 time: '2024-01-21T14:45:36Z'
165 - apiVersion: kubevirt.io/v1alpha3
166 fieldsType: FieldsV1
167 fieldsV1:
168 f:status:
169 .: {}
170 f:conditions: {}
171 f:created: {}
172 f:printableStatus: {}
173 f:ready: {}
174 f:volumeSnapshotStatuses: {}
175 manager: Go-http-client
176 operation: Update
177 subresource: status
178 time: '2024-01-21T15:03:12Z'
179 name: ubuntu-01
180 namespace: default
181 resourceVersion: '538511'
182 uid: 3e3f0426-a70b-427b-8aba-113b3fa2a5e7
183 spec:
184 runStrategy: RerunOnFailure
185 template:
186 metadata:
187 annotations:
188 harvesterhci.io/sshNames: '[]'
189 creationTimestamp: null
190 labels:
191 harvesterhci.io/vmName: ubuntu-01
192 spec:
193 affinity: {}
194 domain:
195 cpu:
196 cores: 2
197 sockets: 1
198 threads: 1
199 devices:
200 disks:
201 - bootOrder: 1
202 cdrom:
203 bus: sata
204 name: disk-0
205 - disk:
206 bus: virtio
207 name: cloudinitdisk
208 inputs:
209 - bus: usb
210 name: tablet
211 type: tablet
212 interfaces:
213 - macAddress: 52:54:00:de:68:02
214 masquerade: {}
215 model: virtio
216 name: default
217 features:
218 acpi:
219 enabled: true
220 machine:
221 type: q35
222 memory:
223 guest: 1948Mi
224 resources:
225 limits:
226 cpu: '2'
227 memory: 2Gi
228 requests:
229 cpu: 125m
230 memory: 1365Mi
231 evictionStrategy: LiveMigrate
232 hostname: ubuntu-01
233 networks:
234 - name: default
235 pod: {}
236 terminationGracePeriodSeconds: 120
237 volumes:
238 - name: disk-0
239 persistentVolumeClaim:
240 claimName: ubuntu-01-disk-0-fhsec
241 - cloudInitNoCloud:
242 networkDataSecretRef:
243 name: ubuntu-01-ixwie
244 secretRef:
245 name: ubuntu-01-ixwie
246 name: cloudinitdisk
247 status:
248 conditions:
249 - lastProbeTime: null
250 lastTransitionTime: '2024-01-21T15:03:09Z'
251 status: 'True'
252 type: Ready
253 - lastProbeTime: null
254 lastTransitionTime: null
255 status: 'True'
256 type: LiveMigratable
257 created: true
258 printableStatus: Running
259 ready: true
260 volumeSnapshotStatuses:
261 - enabled: false
262 name: disk-0
263 reason: 2 matching VolumeSnapshotClasses for longhorn-image-675pg
264 - enabled: false
265 name: cloudinitdisk
266 reason: Snapshot is not supported for this volumeSource type [cloudinitdisk]
267 }}}
268
269 == Использование интерфейса командной строки virtctl ==
270
271 Вы также можете взаимодействовать с вашими виртуальными машинами Kubevirt с помощью инструмента командной строки virtctl. Вам может потребоваться установить virtctl. Однако при работе с Harvester он устанавливается по умолчанию.
272
273 Обратите внимание на следующие команды:
274
275 * **addvolume ** – добавить том к работающей виртуальной машине
276 * автодополнение – сгенерировать скрипт автодополнения для указанной оболочки
277 * **консоль ** – подключиться к консоли экземпляра виртуальной машины
278 * **expose ** – предоставить экземпляр виртуальной машины, виртуальную машину или набор реплик экземпляра виртуальной машины в качестве новой службы
279 * **fslist ** – возвращает полный список файловых систем, доступных на гостевой машине
280 * **guestfs ** – запустить оболочку в модуле libguestfs
281 * **guestosinfo ** – возвращает информацию гостевого агента об операционной системе
282 * **помощь ** – помощь по любой команде
283 * **image** -upload – загрузить образ виртуальной машины в DataVolume/PersistentVolumeClaim
284 * **память** – **дамп ** – дамп памяти работающей виртуальной машины в указанный pvc
285 * **migrate ** – перенести виртуальную машину
286 * **миграция** – **отмена ** – отмена миграции виртуальной машины
287 * **пауза ** – приостановка виртуальной машины
288 * **разрешено** – **устройства ** – список разрешенных устройств для vmis
289 * **порт** – **переслать ** – переслать [[локальные порты>>url:https://www.virtualizationhowto.com/2012/10/local-port-printers-network-printers-windows-7/]] на виртуальную машину или экземпляр виртуальной машины
290 * **removevolume ** – удалить том из работающей виртуальной машины
291 * **перезапуск ** – перезапуск виртуальной машины
292 * **scp**  – файлы scp из/в экземпляр виртуальной машины
293 * **[[soft>>url:https://www.virtualizationhowto.com/2015/05/windows-server-technical-preview-2-soft-reboot/]]**[[ – **reboot**>>url:https://www.virtualizationhowto.com/2015/05/windows-server-technical-preview-2-soft-reboot/]]** ** – мягкая перезагрузка экземпляра виртуальной машины
294 * s **s** h – открыть SSH-соединение с экземпляром виртуальной машины
295 * **запуск ** – запуск виртуальной машины
296 * **остановить ** – остановить виртуальную машину
297 * **unpause ** – снять с паузы виртуальную машину
298 * **usbredir ** – перенаправить USB-устройство на экземпляр виртуальной машины
299 * **userlist ** – возвращает полный список вошедших в систему пользователей на гостевой машине
300 * **версия ** – распечатать информацию о версии клиента и сервера
301 * **vnc ** – открыть vnc-соединение с экземпляром виртуальной машины[[~[~[image:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/The-virtctl-command-line-tool-to-work-with-Kubevirt.png~|~|alt="Инструмент командной строки virtctl для работы с kubevirt"~]~]>>url:https://www.virtualizationhowto.com/wp-content/uploads/2024/01/The-virtctl-command-line-tool-to-work-with-Kubevirt.png]]
302
303 Инструмент командной строки virtctl для работы с kubevirt
304
305 == Подводя итоги, можно сказать, что Kubevirt — отличный инструмент в экосистеме Kubernetes. ==
306
307 В этом вводном блоге о Kubevirt мы увидели, что это интересный и мощный инструмент при запуске сред Kubernetes. Он позволяет компании использовать мощь современных приложений в подах Kubernetes и виртуальных машинах поверх кластерного узла Kubernetes для всех своих потребностей в виртуализации. Это делает Kubernetes не только средой для контейнеров, но и для виртуальных машин.
308
309 Поскольку он использует API Kubernetes, разработчики и инженеры DevOps могут использовать мощные API Kubernetes для автоматизации многих аспектов среды, включая политики, и применять эти же конечные точки API для автоматизации операций своих виртуальных машин. Поскольку запуск Kubernetes становится все более интересным и используется организациями по всему миру, мне интересно, сколько из них заинтересованы в переходе от традиционных гипервизоров к использованию Kubernetes для всего. Если вы уже перенесли виртуальные машины в Kubernetes, какие результаты вы увидели и с какими проблемами столкнулись? Используете ли вы это или заинтересованы в использовании этого в ядре или на периферии? Есть ли какая-то функция, которой вам не хватает между Kubevirt и традиционными продуктами гипервизоров? Дайте мне знать в комментариях или на форумах.