日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubevirt 存储 网络 监控

發布時間:2024/3/13 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubevirt 存储 网络 监控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、kubevirt 存儲

kubevirt 提供很多種存儲方式,存儲就決定了你使用虛擬機鏡像到底什么內核、什么版本,以下主要講述我看到三種比較常用的形式

虛擬機鏡像(磁盤)是啟動虛擬機必不可少的部分,目前 KubeVirt 中提供多種方式的虛擬機磁盤。

  • cloudInitNoCloud/cloudInitConfigDrive:用于提供 cloud-init 初始化所需要的 user-data,使用 configmap 作為數據源,此時VMI 內部將出現第二塊大約為356KB的第二塊硬盤

dataVolume:虛擬機啟動流程中自動將虛擬機磁盤導入 pvc 的功能,在不使用 DataVolume 的情況下,用戶必須先準備帶有磁盤映像的 PVC,然后再將其分配給 VM 或 VMI。dataVolume 拉取鏡像的來源可以是HTTP、PVC。

PersistentVolumeClaim: PVC 做為后端存儲,適用于數據持久化,即在虛擬機重啟或關機后數據依然存在。PV 類型可以是 block 和 filesystem,為 filesystem 時,將使用 PVC 上的 disk.img,格式為 RAW 格式的文件作為硬盤。block 模式時,使用 block volume 直接作為原始塊設備提供給虛擬機。缺點在于僅支持RAW格式鏡像,若鏡像較大CDI 導入鏡像會比較慢(如果是QCW2 CDI 內部機制qemu.go 會將其進行格式轉換為RAW并導入PVC中),因此降低快速創建 VMI 體驗感

ephemeral、containerDisk: 數據是無法持久化,故在存儲選型上,我們采用 CEPH 作為后端存儲,通過調用Ceph CSI 插件創建 PVC 卷方式管理虛機磁盤設備。Ceph CSI 插件實現了容器存儲編排與Ceph集群交互的接口,它可以為容器應用分配 存儲集群中的存儲空間,同時在選擇 Ceph-CSI 版本需要考慮到當前 K8S 版本、及 CEPH 版本號

  • registryDisk

定義image來創建虛擬機的root disk。 virt-controller會在pod定義中創建registryVolume的container,container中的entry服務負責 將spec.volumes.registryDisk.image轉化為qcow2格式,路徑為pod根目錄。

kubevirt 提供了registryDIsk的基礎鏡像: registry-disk-v1alpha, 根據Dockerfile形式去創建虛擬機鏡像,以下是window鏡像demo Dockerfile

FROM kubevirt/registry-disk-v1alpha COPY Windows---server-2012-datacenter-64bit-cn-syspreped---2018-01-15.qcow2 /disk/windows2012dc.img

這個最終我們構建成鏡像名:windows2012dc:latest , 最終在CRD表現形式是這樣的

kind: VirtualMachineInstance ... spec:domain:devices:disks:- disk:bus: virtioname: registrydiskvolumeName: registryvolume ... - name: registryvolumeregistryDisk:image: windows2012dc:latest
  • PVC

PVC是持久化存儲鏡像的形式,它會被掛在到pod中,且格式必須滿足/disk/*.img,這樣kubevirt才能夠實現虛擬機存儲

  • CDI

CDI是kubevirt自己提供的一種形式, 把registryDisk 轉換為PVC,這個需要消耗時間去講鏡像轉換為PVC持久化存儲下

二、網絡

虛擬機網絡就是pod網絡,virt-launcher pod網絡的網卡不再掛有pod ip,而是作為虛擬機的虛擬網卡的與外部網絡通信的交接物理網卡,virt-launcher實現了簡單的單ip dhcp server,就是需要虛擬機中啟動dhclient,virt-launcher 服務會分配給虛擬機。

kubernetes是Kubevirt 底座,提供了管理容器和虛擬機的混合部署的方式,存儲和網絡也是通過集成到kubernetes中, VMI 使用了POD進行通信。為了實現該目標,KubeVirt 的對網絡做了特殊實現。虛擬機具體的網絡如圖所示, virt-launcher Pod 網絡的網卡不再掛有 Pod IP,而是作為虛擬機的虛擬網卡的與外部網絡通信的交接物理網卡

在當前的場景我們使用經典的大二層網絡模型,用戶在一個地址空間下,VM 使用固定IP,在OpenStack社區,虛擬網絡方案成熟,OVS 基本已經成為網絡虛擬化的標準。所以我門選擇目前靈雀云(alauda) 開源的網絡方案:Kube-OVN,它是基于OVN的Kubernetes網絡組件,提供了大量目前Kubernetes不具備的網絡功能,并在原有基礎上進行增強。通過將OpenStack領域成熟的網絡功能平移到Kubernetes,來應對更加復雜的基礎環境和應用合規性要求

網絡 VLAN underlay

在網絡平面,管理網和 VMI 虛擬機流量分開,其中使用Vlan 模式的 underlay 網絡,容器網絡可以直接通過 vlan 接入物理交換機

虛擬機固定IP

k8s的資源是在運行時才分配ip的,但是筆者希望能夠對虛擬機的ip進行綁定從而實現固定ip的目的。為此,我們首先正常創建虛擬機,在虛擬機運行時k8s會為之分配ip,當檢測到虛擬機的ip后,我們通過替換vmi的配置文件的方式將ip綁定改虛擬機中。但是在實際操作時會報出如下錯誤:

Invalid value: 0x0: must be specified for an update

實際上 Kubernetes API Server是支持樂觀鎖(Optimistic concurrency control)的機制來防止并發寫造成的覆蓋寫問題,因此在修改的body中需要加入metadata.resourceVersion,筆者的做法是首選調用 read_namespaced_virtual_machine方法獲取metadata.resourceVersion,其次再修改body。具體方案可參考:

https://www.codeleading.com/article/27252474726/

三、監控

Kube-handler會去調用當前節點下所有虛擬機的libvirt API,獲取虛擬機的監控指標,并提供metrics 接口,最后通過kubevirt-prometheus-metrics聚合所有節點的kube-handler的指標數據,提供給prometheus使用

?

總結

以上是生活随笔為你收集整理的kubevirt 存储 网络 监控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。