本操作用于创建包含CPU、内存、操作系统、网络配置、云硬盘等基础资源的云原生云主机,为客户提供可靠、安全、灵活、高效的计算环境。
根据客户实际业务需求,规划云主机配置项。各配置项的具体说明及格式如下:
CPU:
spec: template: spec: domain: cpu: cores: <CPU核数>
内存:
spec: template: spec: domain: resources: requests: memory: <内存大小>G
存储:
持久卷声明(PVC):
spec: template: spec: volumes: - name: <数据卷名称> persistentVolumeClaim: claimName: <PVC名称>
云硬盘( DV,DataVolume):在云主机创建时,指定的DV会同步创建一个PVC供云主机使用。在云主机删除时,该PVC也会同步销毁:
spec: template: spec: volumes: - name: <数据卷名称> dataVolume: name: <DV名称>
云硬盘模板( DV,DataVolume):在云主机创建时,DV模板会同步创建一个DV供云主机使用。在云主机删除时,该DV连同PVC也会同步销毁。在下述示例中,该DV模板定义的数据来源为另一个PVC,但是也支持http等多种来源:
spec: dataVolumeTemplates: - metadata: name: <DV模板名称> spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: <PVC容量>Gi storageClassName: <存储类名称> source: pvc: namespace: default name: <PVC名称>
警告:
在同一命名空间下,请确保各DV和DV模板的名称均不重复,
系统盘:
spec: template: spec: domain: devices: disks: - disk: bus: virtio name: <系统盘名称>
启动顺序:
spec: template: spec: domain: devices: disks: - bootOrder: 1 cdrom: bus: <第一启动盘类型> name: <第一启动盘名称> - bootOrder: 2 disk: bus: <第二启动盘类型> name: <第二启动盘名称>
网络:
使用Pod默认网络:
spec: template: spec: networks: - name: default pod: {}
使用集群第二网络kube-ovn:
当承载云原生云主机运行的是安全容器集群(即已安装安全容器服务云产品)时,可在创建云主机时,使用安全容器服务云产品默认安装的kube-ovn。在配置下述内容前,请确保已安装Multus服务,且在安全容器服务的命名空间下已配置NetworkAttachmentDefinition资源:
spec: template: spec: networks: - name: default multus: default: true networkName: secure-container/kube-ovn
当使用集群第二网络kube-ovn时,接口设置仅支持bridge模式。此外,集群第二网络kube-ovn需配合固定IP地址使用,否则会由于kube-ovn的内置IPAM分配问题,导致云主机在重启后会网络异常(其中,mac_address请自动生成,不可复用已使用的mac地址):
spec: template: metadata: annotations: ovn.kubernetes.io/ip_address: <固定IP地址> ovn.kubernetes.io/mac_address: 00:00:00:63:D5:F9
接口:
masquerade模式(默认):
spec: template: spec: domain: devices: interfaces: - masquerade: {} name: default
bridge模式:
spec: template: spec: domain: devices: interfaces: - bridge: {} name: default
警告:
- 当使用集群第二网络kube-ovn时,仅支持bridge模式。
- 当使用Pod默认网络对接bridge模式时,请在KubeVirt提供的permitBridgeInterfaceOnPodNetwork配置项中禁用该关联,否则云主机将无法成功创建。
* 密钥/密码注入:
spec:
template:
spec:
domain:
devices:
disks:
- disk:
bus: virtio
name: cloudinitdisk
volumes:
- cloudInitNoCloud:
userData: |
#cloud-config
disable_root: false
ssh_pwauth: true
ssh_authorized_keys:
- '<SSH密钥>'
users:
- name: escore
gecos: ES Core User
sudo: ALL=(ALL) NOPASSWD:ALL
passwd: <SSH密码>
shell: /bin/bash
home: /home/escore
lock_passwd: false
ssh_pwauth: true
name: cloudinitdisk
通过Yaml,创建云主机。
下文将分别列举几个Linux和Windows操作系统云主机的Yaml文件格式供参考。
Linux云主机
使用默认Pod网络,并通过存有镜像文件的PVC启动:
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: <云主机名称> spec: running: true template: metadata: labels: kubevirt.io/domain: <云主机名称> spec: domain: cpu: cores: <CPU核数> devices: disks: - disk: bus: virtio name: boot-disk interfaces: - masquerade: {} name: default machine: type: q35 resources: requests: memory: <内存大小>G networks: - name: default pod: {} volumes: - name: <数据卷名称> persistentVolumeClaim: claimName: <PVC名称>
使用集群第二网络,并设置为固定IP地址,且通过运硬盘模板定义的运硬盘启动,此外另配置 cloudInitNoCloud 卷用于注入密码与秘钥:
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: <云主机名称> spec: running: true template: metadata: annotations: ovn.kubernetes.io/ip_address: 10.16.1.110 ovn.kubernetes.io/mac_address: 00:00:00:63:D5:F9 labels: kubevirt.io/domain: <云主机名称> spec: domain: cpu: cores: <CPU核数> devices: disks: - disk: bus: virtio name: boot-disk - disk: bus: virtio name: cloudinitdisk interfaces: - bridge: {} name: default machine: type: q35 resources: requests: memory: <内存大小>G networks: - name: default multus: default: true networkName: secure-container/kube-ovn volumes: - name: <数据卷名称> dataVolume: name: <DV名称> - cloudInitNoCloud: userData: | #cloud-config disable_root: false ssh_pwauth: true ssh_authorized_keys: - '<SSH密钥>' users: - name: escore gecos: ES Core User sudo: ALL=(ALL) NOPASSWD:ALL passwd: <SSH密码> shell: /bin/bash home: /home/escore lock_passwd: false ssh_pwauth: true name: cloudinitdisk dataVolumeTemplates: - metadata: name: centos-dv spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: <PVC容量>Gi storageClassName: <存储类名称> source: pvc: namespace: default name: <PVC名称>
Windows云主机
iso启动:
通过Yaml,创建持久卷声明(PVC)。Yaml文件格式如下:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <PVC名称> spec: accessModes: - ReadWriteOnce resources: requests: storage: <PVC容量>Gi storageClassName: <存储类名称>
通过Yaml,创建云主机。Yaml文件格式如下(其中, hub.example.io/production/virtio-container-disk 为包含Windows云主机所需驱动的一个容器盘。):
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: <云主机名称> spec: running: true template: metadata: labels: kubevirt.io/domain: <云主机名称> spec: domain: cpu: cores: <CPU核数> devices: disks: - bootOrder: 1 cdrom: bus: sata name: cdromiso - disk: bus: virtio name: harddrive - cdrom: bus: sata name: virtiocontainerdisk interfaces: - masquerade: {} name: default machine: type: q35 resources: requests: memory: <内存大小>G networks: - name: default pod: {} volumes: - name: <数据卷名称> persistentVolumeClaim: claimName: <PVC名称> - name: <数据卷名称> persistentVolumeClaim: claimName: <PVC名称> - containerDisk: image: hub.example.io/production/virtio-container-disk name: virtiocontainerdisk
raw启动:
apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachine metadata: name: win2k19-boot-dv spec: running: true template: metadata: labels: kubevirt.io/domain: win2k19-boot-dv spec: domain: cpu: cores: <CPU核数> devices: disks: - disk: bus: virtio name: boot-disk interfaces: - masquerade: {} name: default machine: type: q35 resources: requests: memory: <内存大小>G networks: - name: default pod: {} volumes: - name: <数据卷名称> dataVolume: name: <DV名称> dataVolumeTemplates: - metadata: name: win2k19-dv spec: pvc: accessModes: - ReadWriteOnce resources: requests: storage: <PVC容量>Gi storageClassName: <存储类名称> source: pvc: namespace: default name: <PVC名称>