Bare metal machine controllers#
Bare metal machine controller один из набора инструментов для управления инфраструктурой bare metal с использованием DropApp Plus, реализует исполнительный механизм DropApp Cluster API.
Cluster API предоставляет декларативные API в стиле DropApp Plus для создания, настройки и управления кластерами. API является общим для нескольких облачных поставщиков. Baremetal machine controller один из поставщиков Cluster API и позволяет пользователям развертывать кластер на основе Cluster API поверх инфраструктуры bare metal.
Cluster API - подпроект DropApp Plus, ориентированный на предоставление декларативных API и инструментов для упрощения подготовки, обновления и эксплуатации нескольких кластеров DropApp Plus.
Ресурс машины определяется проектом Machine API Operator. Машина включает поле providerSpec, которое содержит данные, относящиеся к данному поставщику Cluster API.
machine-api-operator управляет жизненным циклом CRD, контроллеров и объектов RBAC специального назначения, которые расширяют Kubernetes API. Это позволяет передавать желаемое состояние машин в кластере декларативным способом.
BareMetalMachineProviderSpec#
image - включает в себя два подполя, url и checksum, состоящие из URL-адреса образа и URL-адреса контрольной суммы для этого образа.
userData - включает в себя два подполя, name и namespace, ссылающиеся на секрет, содержащий пользовательские данные в кодировке base64, которые должны быть записаны на диск конфигурации на подготовленном BareMetalHost.
hostSelector - задает критерии для сопоставления меток на объектах BareMetalHost. Это может быть использовано для ограничения набора доступных объектов BareMetalHost, выбранных для данной машины.
Пример настройки машины:
Пример манифеста
apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
annotations:
metal3.io/BareMetalHost: metal3/master-0
creationTimestamp: "2019-05-13T13:00:51Z"
finalizers:
- machine.cluster.k8s.io
generateName: baremetal-machine-
generation: 2
name: centos
namespace: metal3
resourceVersion: "1112"
selfLink: /apis/cluster.k8s.io/v1alpha1/namespaces/metal3/machines/centos
uid: 22acee54-757f-11e9-8091-280d3563c053
spec:
metadata:
creationTimestamp: null
providerSpec:
value:
apiVersion: baremetal.cluster.k8s.io/v1alpha1
image:
checksum: http://NNN.NN.N.N/images/CentOS-7-x86_64-GenericCloud-1901.qcow2.md5sum
url: http://NNN.NN.N.N/images/CentOS-7-x86_64-GenericCloud-1901.qcow2
kind: BareMetalMachineProviderSpec
userData:
name: centos-user-data
namespace: metal3
hostSelector:
matchLabels:
key1: value1
matchExpressions:
key: key2
operator: in
values: {'abc', '123', 'value2'}
versions:
kubelet: ""
Где NNN.NN.N.N – актуальный IP адрес.
Пример секрета userData:
apiVersion: v1
data:
userData: BASE64_ENCODED_USER_DATA
kind: Secret
metadata:
annotations:
creationTimestamp: 2019-05-13T13:00:51Z
name: centos-user-data
namespace: metal3
resourceVersion: "1108"
selfLink: /api/v1/namespaces/metal3/secrets/centos-user-data
uid: 22792b3e-757f-11e9-8091-280d3563c053
type: Opaque
Поле hostSelector имеет два возможных необязательных подполя:
matchLabels- пары меток ключ/значение, которые должны точно совпадать;matchExpressions- набор выражений, которые должны принимать значениеtrueдля меток наBareMetalHost.
Допустимые операторы включают:
! - Ключ не существует. Значения игнорируются;
= - Ключ равен указанному значению. Должно быть указано только одно значение;
== - Ключ равен указанному значению. Должно быть указано только одно значение;
в - Значение является членом набора возможных значений;
!= - Ключ не равен указанному значению. Должно быть указано только одно значение;
notin - Значение не является членом указанного набора значений;
exists - Ключ существует. Значения игнорируются;
gt - Значение больше указанного. Значение должно быть целым числом;
lt - Значение меньше указанного. Значение должно быть целым числом.
Пример: BareMetalHost только с ключом key1, установленным в value1, и ключом key2, установленным в value2:
spec:
providerSpec:
value:
hostSelector:
matchLabels:
key1: value1
key2: value2
Масштабирование MachineSet#
Для автоматической масштабируемости MachineSet до количества совпадающих BareMetalHosts, пометьте MachineSet ключом metal3.io/autoscale-to-hosts и любым значением.
При согласовании MachineSet контроллер подсчитает все узлы BareMetalHosts, которые:
либо соответствуют спецификации MachineSet
Spec.Template.Spec.ProviderSpec.HostSelectorи имеют значениеConsumerRef, равноеnil;либо имеют значение
ConsumerRef, которое ссылается на машину, являющуюся частью MachineSet.