LVM-operator#
LVM-operator — компонент, который позволяет взаимодействовать с пользовательскими ресурсами LVMCluster для развертывания и управления LVM-хранилищами в кластерах DropApp.
LVM-operator использует драйвер TopoLVM CSI Driver на внутреннем сервере для динамического создания физических томов LVM, групп томов и логических томов и привязывает их к PersistentVolumeClaim-ресурсам. Это позволяет приложениям, работающим в кластере, использовать логические тома LVM, поддерживаемые драйвером TopoLVM CSI Driver.
Развертывание LVM-operator#
Предусловия#
Убедитесь, что есть доступ к Kubernetes-кластеру.
Убедитесь, что
kubectlнастроен и может взаимодействовать с кластером.Установите Prometheus.
Развертывание#
Для развертывания LVM-operator выполните шаги:
Создайте namespace
openshift-storageкомандой:kubectl create namespace openshift-storageСгенерируйте сертификаты SSL командой:
openssl genrsa -out ca.key 2048 openssl req -x509 -new -key ca.key -days 3650 -out ca.crt openssl req -new -x509 -key ca.key -out webhook-server-cert.pem -days 365 -config openssl.cnfПример используемого файла
openssl.cnf(имя и содержание файла могут отличаться от приведенного в примере):openssl.cnf
[req] default_bits = 2048 default_md = sha256 distinguished_name = req_distinguished_name x509_extensions = v3_req [req_distinguished_name] countryName = Country Name (2 letter code) countryName_default = US stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = California localityName = Locality Name (eg, city) localityName_default = San Francisco organizationName = Organization Name (eg, company) organizationName_default = Example Corp organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = IT Department commonName = Common Name (e.g. server FQDN or YOUR name) commonName_default = lvms-webhook-service.openshift-storage.svc emailAddress = Email Address emailAddress_default = admin@example.com [v3_req] # Extensions to add to a certificate request # basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = critical, clientAuth, serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = lvms-webhook-service.openshift-storage.svc DNS.2 = vg-manager-metrics-service.openshift-storage.svc [v3_ca] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSignСоздайте три секрета kubernetes:
lvms-operator-webhook-server-cert,lvms-operator-metrics-cert,vg-manager-metrics-certкомандами:kubectl create secret tls lvms-operator-webhook-server-cert --cert=webhook-server-cert.pem --key=ca.key -n openshift-storage kubectl create secret tls lvms-operator-metrics-cert --cert=webhook-server-cert.pem --key=ca.key -n openshift-storage kubectl create secret tls vg-manager-metrics-cert --cert=webhook-server-cert.pem --key=ca.key -n openshift-storageЗадайте
PriorityClass:openshift-user-criticalдля компонента K8SC;dropapp-user-criticalдля компонента K8SU.
Пример команды:
kubectl apply -f - <<EOF apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: openshift-user-critical value: 1000000 globalDefault: false description: "This priority class is for critical user applications." EOFСоздайте манифест
deployment.yamlи и укажите в немimageиPriorityClassName:image: quay.io/lvms_dev/lvms-operator:latest ... priorityClassName: openshift-user-criticalПримените манифест:
kubectl apply -f <path-to-deployment.yaml>После успешного завершения предыдущей команды переключите namespace на
openshift-storage:kubectl config set-context --current --namespace=openshift-storageОткройте информацию о pods и дождитесь, когда все pods запустятся (статус
Running):kubectl get pods -wПосле запуска всех pods создайте экземпляр пользовательского ресурса
LVMCluster(customer resource CR):kubectl create -n openshift-storage -f <path-to-lvm_v1alpha1_lvmcluster.yaml>Пример манифеста:
Пример lvm_v1alpha1_lvmcluster.yaml:
apiVersion: lvm.topolvm.io/v1alpha1 kind: LVMCluster metadata: name: my-lvmcluster spec: storage: deviceClasses: - name: vg1 default: true thinPoolConfig: name: thin-pool-1 sizePercent: 90 overprovisionRatio: 10 fstype: xfsПосле развертывания пользовательского ресурса выполнятся действия:
Создается группа томов Logical Volume Manager (LVM) с именем
vg1, использующая все доступные диски в кластере.В группе томов
vg1создается тонкий пулthin-pool-1размером 90% отvg1;Разворачивается плагин TopoLVM Container Storage Interface (CSI).
Создаются класс хранилища и класс моментальных снимков тома, оба с именем
lvms-vg1. Это облегчает предоставление хранилища для рабочих нагрузок DropApp. Класс хранения настроен на режим привязки томаWaitForFirstConsumer, который используется в многоузловой конфигурации для оптимизации планирования размещения pods. Эта стратегия предусматривает приоритетное распределение pods на nodes с наибольшим количеством доступной емкости хранения.Система LVMS создает два внутренних пользовательских ресурса для поддержки своей функциональности:
LVMVolumeGroup— создается и управляется LVMS для мониторинга отдельных групп томов на нескольких nodes кластера.LVMVolumeGroupNodeStatus— создается Volume Group Manager. Этот пользовательский ресурс используется для мониторинга состояния групп томов на отдельных nodes кластера.
Выполните команду:
kubectl get lvmclusters.lvm.topolvm.io my-lvmclusterи дождитесь статуса
ReadyуLVMCluster:NAME STATUS my-lvmcluster ReadyВыполните команду и дождитесь, когда все pods станут активны:
kubectl get pods -w
После запуска всех pods, LVMS готов управлять логическими томами и делает их доступными для использования в приложениях.