亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Kubevirt 虛機 CPU 綁定

2023-09-25 03:14:00
206
0

1、Kubevirt 虛機 CPU 綁定配置

1.1 為 QEMU 模擬器分配獨立 CPU 配置 

在 KVM 虛擬機中,KVM 負責 CPU 和內存的虛擬化,不能模擬其他設備,對于 IO 設備(網卡、磁盤)的模擬,必須用到 QEMU 模擬器,但 QEMU 在模擬 IO 操作任務時,也要消耗 CPU 資源。因為 kubevirt 中 KVM 和 QEMU 默認跑在同一個 pod 中,所以他們會使用相同的 vCPU, 這樣對 VMI 的性能會有影響。為了提供更好的性能,kubevirt 又額外為 QEMU 分配了一個 cpu ,這樣模擬器和 VMI 所使用的 vCPU 相對獨立。

開啟這個功能需要在 VMI 的 yaml 配置文件 spec.domain.cpu 中添加 isolateEmulatorThread: true,并且需要和 dedicatedCpuPlacement: true 一起用。

apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
spec:
  domain:
    cpu:
      dedicatedCpuPlacement: true
      isolateEmulatorThread: true
    resources:
      limits:
        cpu: 2
        memory: 2Gi

1.2 為支持CPU綁定的 node 節點添加標簽

在 yaml 配置文件里做了配置還不夠,要想能調度到 node上,還要給支持 CPU 綁定的 node 手動添加標簽 cpumanager=true 

# 手動添加標簽
kubectl label node [node_name] cpumanager=true
# 查看標簽
kubectl describe nodes

1.3 配置 Kubevirt 識別支持 CPU 綁定的 node 

為了讓添加了 CPU manager 標簽的 node 節點能被自動識別,還需要在 kubevirt-config 的 config map feature-gates下添加 CPUManager,或者編輯已存在的 kubevirt-config:

kubectl edit configmap kubevirt-config -n kubevirt
# 舉例:
apiVersion: v1
kind: ConfigMap
metadata:
  name: kubevirt-config
  namespace: kubevirt
  labels:
    kubevirt.io: ""
data:
  feature-gates: "DataVolumes,CPUManager"

1.4 Kubevirt 中使用 Sidecar 容器

Kubevirt 有時用 Sidecar 容器(伴生容器)來為 VMI 掛載磁盤,要想使用 Sidecar 伴生容器,kubevirt 需要在 kubevirt-config 的 ConfigMap feature-gates下添加 Sidecar 配置。

... data: feature-gates: "DataVolumes,CPUManager,Sidecar"

伴生容器默認的資源是:CPU:200m, Memory:64M

因為 CPU 資源默認沒有配成整數,所以 CPU manager 不會對伴生容器的 CPU 做綁定。

二、驗證

2.1 編輯 VMI 的 yaml 配置文件

# vim vmi-cpu-pin-vm.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
metadata:
  name: vmi-cpu-pin
spec:
  terminationGracePeriodSeconds: 5
  domain:
    cpu:
      sockets: 2
      cores: 1
      threads: 1
      dedicatedCpuPlacement: true
      isolateEmulatorThread: true
    resources:
      requests:
        memory: 1024M
    devices:
      disks:
      - name: containerdisk
        disk:
          bus: virtio
  volumes:
    - name: containerdisk
      containerDisk:
        image: harbor.ctyun.dev:1443/kv-os/centos7-genericcloud:v1907 

Kubevirt 虛機的 vCPU 數是用戶設置的 spec.domain.cpu (sockets, cores, threads) 或 spec.domain.resources.[requests/limits].cpu 的值。 

如果 spec.domain.cpu 設置了,vCPU 數是 sockets * cores * threads,如果 spec.domain.cpu 沒設置,vCPU 數則取 spec.domain.resources.requests.cpu 或 spec.domain.resources.limits.cpu 的值。

提示:

(1)spec.domain.cpu 和 spec.domain.resources.[requests/limits].cpu 不需要同時設置;

(2)如果設置了spec.domain.resources.[requests/limits].cpu,spec.domain.resources.requests.cpu 和 spec.domain.resources.limits.cpu 的值必須一致;

(3)對于多 CPU 的情況,建議使用 spec.domain.cpu.sockets 代替 spec.domain.cpu.cores,性能會更好。

2.2 創建 VMI

# 創建
[ecf@server19 kubevirt]$ kubectl create -f vmi-cpu-pin.yaml 
virtualmachineinstance.kubevirt.io/vmi-cpu-pin created

# 查看
[ecf@server19 kubevirt]$ kubectl get vmi
NAME          AGE   PHASE     IP               NODENAME
dcache        8d    Running   10.244.0.44/24   server19
testvm        10d   Running   10.244.0.17      server19
vmi-cpu-pin   23s   Running   10.244.0.210     server19

2.3 進入 libvirt 容器查看 CPU 綁定情況

[ecf@server19 kubevirt]$ docker ps -a |grep vmi-cpu-pin
96e316cafadc  a937ac91ab35  "/usr/bin/container-…"  50 seconds ago  Up 44 seconds  k8s_volumecontainerdisk_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0
6576d9f09468  c6672d186608   "/usr/bin/virt-launc…"  50 seconds ago  Up 50 seconds  k8s_compute_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0
c822eda00e62  k8s.gcr.io/pause:3.1  "/pause"  51 seconds ago   Up 50 seconds  k8s_POD_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0

# 進入容器
[ecf@server19 kubevirt]$ docker exec -it -u root k8s_compute_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0 /bin/bash
[root@vmi-cpu-pin /]# virsh list
 Id   Name                  State
-------------------------------------
 1    default_vmi-cpu-pin   running

# libvirt 容器內查看虛機 xml 文件
[root@vmi-cpu-pin /]# virsh dumpxml 1 |more
<domain type='kvm' id='1'>
  <name>default_vmi-cpu-pin</name>
  <uuid>b0a47815-bc43-4c45-bd43-0a1bb9441b62</uuid>
  <metadata>
    <kubevirt xmlns="//kubevirt.io">
      <uid>1307155b-05eb-4685-8a59-2eb39d1934aa</uid>
      <graceperiod>
        <deletionGracePeriodSeconds>5</deletionGracePeriodSeconds>
      </graceperiod>
    </kubevirt>
  </metadata>
  <memory unit='KiB'>1000448</memory>
  <currentMemory unit='KiB'>1000448</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='1'/>
    <emulatorpin cpuset='23'/>
  </cputune>

2.4 查看 VMI 的 QoS 類

[ecf@server19 kubevirt]$ kubectl describe vmi vmi-cpu-pin
Name:         vmi-cpu-pin
Namespace:    default
Labels:       kubevirt.io/nodeName=server19
Annotations:  kubevirt.io/latest-observed-api-version: v1alpha3
              kubevirt.io/storage-observed-api-version: v1alpha3
API Version:  kubevirt.io/v1alpha3
Kind:         VirtualMachineInstance

......
  Node Name:         server19
  Phase:             Running
  Qos Class:         Guaranteed
Events:              <none>
0條評論
作者已關閉評論
鄭****杰
2文章數
0粉絲數
鄭****杰
2 文章 | 0 粉絲
鄭****杰
2文章數
0粉絲數
鄭****杰
2 文章 | 0 粉絲
原創

Kubevirt 虛機 CPU 綁定

2023-09-25 03:14:00
206
0

1、Kubevirt 虛機 CPU 綁定配置

1.1 為 QEMU 模擬器分配獨立 CPU 配置 

在 KVM 虛擬機中,KVM 負責 CPU 和內存的虛擬化,不能模擬其他設備,對于 IO 設備(網卡、磁盤)的模擬,必須用到 QEMU 模擬器,但 QEMU 在模擬 IO 操作任務時,也要消耗 CPU 資源。因為 kubevirt 中 KVM 和 QEMU 默認跑在同一個 pod 中,所以他們會使用相同的 vCPU, 這樣對 VMI 的性能會有影響。為了提供更好的性能,kubevirt 又額外為 QEMU 分配了一個 cpu ,這樣模擬器和 VMI 所使用的 vCPU 相對獨立。

開啟這個功能需要在 VMI 的 yaml 配置文件 spec.domain.cpu 中添加 isolateEmulatorThread: true,并且需要和 dedicatedCpuPlacement: true 一起用。

apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
spec:
  domain:
    cpu:
      dedicatedCpuPlacement: true
      isolateEmulatorThread: true
    resources:
      limits:
        cpu: 2
        memory: 2Gi

1.2 為支持CPU綁定的 node 節點添加標簽

在 yaml 配置文件里做了配置還不夠,要想能調度到 node上,還要給支持 CPU 綁定的 node 手動添加標簽 cpumanager=true 

# 手動添加標簽
kubectl label node [node_name] cpumanager=true
# 查看標簽
kubectl describe nodes

1.3 配置 Kubevirt 識別支持 CPU 綁定的 node 

為了讓添加了 CPU manager 標簽的 node 節點能被自動識別,還需要在 kubevirt-config 的 config map feature-gates下添加 CPUManager,或者編輯已存在的 kubevirt-config:

kubectl edit configmap kubevirt-config -n kubevirt
# 舉例:
apiVersion: v1
kind: ConfigMap
metadata:
  name: kubevirt-config
  namespace: kubevirt
  labels:
    kubevirt.io: ""
data:
  feature-gates: "DataVolumes,CPUManager"

1.4 Kubevirt 中使用 Sidecar 容器

Kubevirt 有時用 Sidecar 容器(伴生容器)來為 VMI 掛載磁盤,要想使用 Sidecar 伴生容器,kubevirt 需要在 kubevirt-config 的 ConfigMap feature-gates下添加 Sidecar 配置。

... data: feature-gates: "DataVolumes,CPUManager,Sidecar"

伴生容器默認的資源是:CPU:200m, Memory:64M

因為 CPU 資源默認沒有配成整數,所以 CPU manager 不會對伴生容器的 CPU 做綁定。

二、驗證

2.1 編輯 VMI 的 yaml 配置文件

# vim vmi-cpu-pin-vm.yaml
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstance
metadata:
  name: vmi-cpu-pin
spec:
  terminationGracePeriodSeconds: 5
  domain:
    cpu:
      sockets: 2
      cores: 1
      threads: 1
      dedicatedCpuPlacement: true
      isolateEmulatorThread: true
    resources:
      requests:
        memory: 1024M
    devices:
      disks:
      - name: containerdisk
        disk:
          bus: virtio
  volumes:
    - name: containerdisk
      containerDisk:
        image: harbor.ctyun.dev:1443/kv-os/centos7-genericcloud:v1907 

Kubevirt 虛機的 vCPU 數是用戶設置的 spec.domain.cpu (sockets, cores, threads) 或 spec.domain.resources.[requests/limits].cpu 的值。 

如果 spec.domain.cpu 設置了,vCPU 數是 sockets * cores * threads,如果 spec.domain.cpu 沒設置,vCPU 數則取 spec.domain.resources.requests.cpu 或 spec.domain.resources.limits.cpu 的值。

提示:

(1)spec.domain.cpu 和 spec.domain.resources.[requests/limits].cpu 不需要同時設置;

(2)如果設置了spec.domain.resources.[requests/limits].cpu,spec.domain.resources.requests.cpu 和 spec.domain.resources.limits.cpu 的值必須一致;

(3)對于多 CPU 的情況,建議使用 spec.domain.cpu.sockets 代替 spec.domain.cpu.cores,性能會更好。

2.2 創建 VMI

# 創建
[ecf@server19 kubevirt]$ kubectl create -f vmi-cpu-pin.yaml 
virtualmachineinstance.kubevirt.io/vmi-cpu-pin created

# 查看
[ecf@server19 kubevirt]$ kubectl get vmi
NAME          AGE   PHASE     IP               NODENAME
dcache        8d    Running   10.244.0.44/24   server19
testvm        10d   Running   10.244.0.17      server19
vmi-cpu-pin   23s   Running   10.244.0.210     server19

2.3 進入 libvirt 容器查看 CPU 綁定情況

[ecf@server19 kubevirt]$ docker ps -a |grep vmi-cpu-pin
96e316cafadc  a937ac91ab35  "/usr/bin/container-…"  50 seconds ago  Up 44 seconds  k8s_volumecontainerdisk_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0
6576d9f09468  c6672d186608   "/usr/bin/virt-launc…"  50 seconds ago  Up 50 seconds  k8s_compute_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0
c822eda00e62  k8s.gcr.io/pause:3.1  "/pause"  51 seconds ago   Up 50 seconds  k8s_POD_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0

# 進入容器
[ecf@server19 kubevirt]$ docker exec -it -u root k8s_compute_virt-launcher-vmi-cpu-pin-mgq6r_default_038ba55f-ced5-4d91-ad82-dbd7fcdc6475_0 /bin/bash
[root@vmi-cpu-pin /]# virsh list
 Id   Name                  State
-------------------------------------
 1    default_vmi-cpu-pin   running

# libvirt 容器內查看虛機 xml 文件
[root@vmi-cpu-pin /]# virsh dumpxml 1 |more
<domain type='kvm' id='1'>
  <name>default_vmi-cpu-pin</name>
  <uuid>b0a47815-bc43-4c45-bd43-0a1bb9441b62</uuid>
  <metadata>
    <kubevirt xmlns="//kubevirt.io">
      <uid>1307155b-05eb-4685-8a59-2eb39d1934aa</uid>
      <graceperiod>
        <deletionGracePeriodSeconds>5</deletionGracePeriodSeconds>
      </graceperiod>
    </kubevirt>
  </metadata>
  <memory unit='KiB'>1000448</memory>
  <currentMemory unit='KiB'>1000448</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <iothreads>1</iothreads>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='1'/>
    <emulatorpin cpuset='23'/>
  </cputune>

2.4 查看 VMI 的 QoS 類

[ecf@server19 kubevirt]$ kubectl describe vmi vmi-cpu-pin
Name:         vmi-cpu-pin
Namespace:    default
Labels:       kubevirt.io/nodeName=server19
Annotations:  kubevirt.io/latest-observed-api-version: v1alpha3
              kubevirt.io/storage-observed-api-version: v1alpha3
API Version:  kubevirt.io/v1alpha3
Kind:         VirtualMachineInstance

......
  Node Name:         server19
  Phase:             Running
  Qos Class:         Guaranteed
Events:              <none>
文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0