Deckhouse Virtualization Platform на bare metal

Создайте проект и администратора проекта (в примере используется проект test-project и пользователь test-user@deckhouse.io, измените их, если необходимо):

d8 k create -f - <<EOF
---
apiVersion: deckhouse.io/v1alpha2
kind: Project
metadata:
  name: test-project
spec:
  description: test-project
  projectTemplateName: default
  parameters:
    # Квоты проекта.
    resourceQuota:
      requests:
        cpu: 20
        memory: 20Gi
      limits:
        cpu: 20
        memory: 20Gi
    # Администраторы проекта.
    administrators:
      - subject: User
        name: test-user
---
apiVersion: deckhouse.io/v1
kind: User
metadata:
  name: test-user
spec:
  # e-mail пользователя.
  email: test-user@deckhouse.io
  # это хэш пароля <GENERATED_PASSWORD>, сгенерированного сейчас
  # сгенерируйте свой или используйте этот, но только для тестирования
  # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
  # возможно, захотите изменить
  password: <GENERATED_PASSWORD_HASH>
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: test-project
  name: admin
subjects:
  - kind: User
    name: test-user@deckhouse.io
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  # Роль пользователя.
  name: d8:use:role:admin
  apiGroup: rbac.authorization.k8s.io
EOF
d8 k create -f - <<EOF --- apiVersion: deckhouse.io/v1alpha2 kind: Project metadata: name: test-project spec: description: test-project projectTemplateName: default parameters: # Квоты проекта. resourceQuota: requests: cpu: 20 memory: 20Gi limits: cpu: 20 memory: 20Gi # Администраторы проекта. administrators: - subject: User name: test-user --- apiVersion: deckhouse.io/v1 kind: User metadata: name: test-user spec: # e-mail пользователя. email: test-user@deckhouse.io # это хэш пароля <GENERATED_PASSWORD>, сгенерированного сейчас # сгенерируйте свой или используйте этот, но только для тестирования # echo "<GENERATED_PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0 # возможно, захотите изменить password: <GENERATED_PASSWORD_HASH> --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: test-project name: admin subjects: - kind: User name: test-user@deckhouse.io apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole # Роль пользователя. name: d8:use:role:admin apiGroup: rbac.authorization.k8s.io EOF

Откройте веб-интерфейс генерации файла kubeconfig, для удаленного доступа к API-серверу. Адрес веб-интерфейса формируется в соответствии с шаблоном DNS-имен, указанным в глобальном параметре publicDomainTemplate. Например, если publicDomainTemplate: %s.kube.my, то веб-интерфейс будет доступен по адресу kubeconfig.kube.my.

Введите логин (в примере — test-user@deckhouse.io) и пароль созданного пользователя и получите конфигурационный файл для доступа к кластеру:

На компьютере, имеющем сетевой доступ к развернутому кластеру, создайте файл ~/.kube/config (для Linux/MacOS) или %USERPROFILE%\.kube\config (для Windows) и вставьте в него конфигурацию kubectl, приведенную на вкладке Raw Config.

Вы настроили kubectl на этом компьютере для управления кластером. Дальнейшие команды выполняйте на этом компьютере.

Создайте виртуальную машину:

kubectl create -f - <<EOF
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualImage
metadata:
  name: ubuntu-2204
  namespace: test-project
spec:
  storage: ContainerRegistry
  dataSource:
    type: HTTP
    http:
      url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualDisk
metadata:
  name: disk
  namespace: test-project
spec:
  dataSource:
    objectRef:
      kind: VirtualImage
      name: ubuntu-2204
    type: ObjectRef
  persistentVolumeClaim:
    size: 4G
---
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachine
metadata:
  name: vm
  namespace: test-project
spec:
  virtualMachineClassName: generic
  runPolicy: AlwaysOn
  blockDeviceRefs:
  - kind: VirtualDisk
    name: disk
  cpu:
    cores: 1
  memory:
    size: 1Gi
EOF
kubectl create -f - <<EOF --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualImage metadata: name: ubuntu-2204 namespace: test-project spec: storage: ContainerRegistry dataSource: type: HTTP http: url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualDisk metadata: name: disk namespace: test-project spec: dataSource: objectRef: kind: VirtualImage name: ubuntu-2204 type: ObjectRef persistentVolumeClaim: size: 4G --- apiVersion: virtualization.deckhouse.io/v1alpha2 kind: VirtualMachine metadata: name: vm namespace: test-project spec: virtualMachineClassName: generic runPolicy: AlwaysOn blockDeviceRefs: - kind: VirtualDisk name: disk cpu: cores: 1 memory: size: 1Gi EOF

Выведите список виртуальных машин, чтобы увидеть статус виртуальной машины:

kubectl get vm -o wide
kubectl get vm -o wide

После успешного старта виртуальная машина должна перейти в статус Running.

Пример вывода:

# kubectl get vm -o wide
NAME   PHASE     CORES   COREFRACTION   MEMORY   NEED RESTART   AGENT   MIGRATABLE   NODE           IPADDRESS     AGE
vm     Running   1       100%           1Gi      False          False   True         virtlab-pt-1   10.66.10.19   6m18s

Подключитесь к виртуальной машине, введите логин (в примере — test-user@deckhouse.io) и пароль:

d8 v console -n test-project vm
d8 v console -n test-project vm

Поздравляем! Вы создали виртуальную машину и подключились к ней.