OpenShift – OADP (backup/restore application)

OADP е оператор за backup/restore на приложение в OpenShift. В основата си е пак Velero, но е интегриран в OpenShift.

За целта ще го използвам пак с Minio което имам в лабораторната среда. За демострация ще използвам проект nn-proba01. Както в предишната статия за Velero ще използвам файл с име credentials-velero със съдържание на потребител и парола за достъп до Minio.

Първа стъпка е да се инсталира оператора OADP. От списъкът си избирам този, който е сертифициран от Red Hat. Оставям всичко по-подразбиране. Той ще създаде нов namespace с гръмкото име openshift-adp

Стъпка две, създавам нов secret с име cloud-credentials във въпросният namespace, а съдържанието е гореспоменатият файл за достъп до Minio.

oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero

Стъпка три, създаване на custom resource, който да е за DataProtectionApplications. В него се споменава URL до Minio, региона, bucket-a, и какви плъги да може да използва. Подробности в тяхната документация тук.

apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: velero-sample
  namespace: openshift-adp
spec:
  backupLocations:
    - velero:
        config:
          insecureSkipTLSVerify: 'true'
          profile: default
          region: minio-teo
          s3ForcePathStyle: 'true'
          s3Url: 'http://minio.lab.local:9000'
        credential:
          key: cloud
          name: cloud-credentials
        default: true
        objectStorage:
          bucket: nn-proba01
          prefix: velero
        provider: aws
  configuration:
    restic:
      enable: true
    velero:
      defaultPlugins:
        - openshift
        - aws
        - kubevirt
        - csi
  snapshotLocations:
    - velero:
        config:
          profile: default
          region: minio-teo
        provider: aws

oc create -f dataprotection.yaml

След няколко минутки ще се вдигне контейнер с velero, както и контейнер с restic. На кратко restic е инструмент за backup на PV, който е предоставен от storage, който не поддържа volume snapshots(например NFS или emptydir).

Туй то от към конфигурация, сега малко тестове. Както казах ще създам един проект nn-proba01, в него ще създам един контейнер с postgresql, който има PV 10Gi.

За да се сзъдаде backup или през web console или през oc се създава един CR за backup с такова кратко съдържание:

kind: Backup
apiVersion: velero.io/v1
metadata:
  name: backup
  namespace: openshift-adp
spec:
  defaultVolumesToRestic: true
  includedNamespaces:
    - nn-proba01

Изтривам проекта, изчаквам да ми каже че е изтрит и няма никакъв ресурс и през oc му правя възсвановяване. Разбира за теста беше хубаво да се създаде например една таблица в контейнера за да се покаже, че данните са там. Та тук ще напиша как му вкарах малко данни

$ psql
psql (10.15)
Type "help" for help.
postgres=# CREATE DATABASE dbproba01;
CREATE DATABASE
postgres=# \connect dbproba01;
You are now connected to database "restore_me" as user "postgres".
postgres=# CREATE TABLE data (
id INT PRIMARY KEY,
text VARCHAR
);
postgres=# \dt
List of relations
Schema | Name | Type | Owner
--------+------------+-------+----------
public | data | table | postgres
(1 row)
postgres=# INSERT INTO data VALUES (1,'hello there');
INSERT 0 1
postgres=# SELECT * from data;
id | text
----+-------------
1 | hello there
(1 row)

За възстановяване използвам през velero следните параметъра.

velero restore create --from-backup=backup -n openshift-adp \
--include-namespaces nn-proba01 --exclude-resources replicationcontroller,deploymentconfig,templateinstances.template.openshift.io --restore-volumes=true

Като преди това съм се вписал, разбира се. Добавил съм параметрите за exclude на ресурси, защото контейнера е от шаблона на openshift. Другият вариант е с custome resource за restore, който има следният вид.

apiVersion: velero.io/v1
kind: Restore
metadata:
  name: restore
  namespace: openshift-adp
spec:
  backupName: backup
  excludedResources:
    - nodes
    - events
    - events.events.k8s.io
    - backups.velero.io
    - restores.velero.io
    - resticrepositories.velero.io
    - replicationcontroller
    - deploymentconfig
    - templateinstances.template.openshift.io
  includedNamespaces:
    - nn-proba01
  restorePVs: true

Бърза проверка в новопоявилият се контйнер дали базата е там и данните са там. Всичко е наред.

Backup etcd with Ansible

Имам подготвена среда с инсталиран Openshift 4.6 във VMware среда.

Необходимо бе да измисля начин, с който да правя backup на etcd, след което да го копирам на машината от която е извикан playbook-a. Написах си ansible playbook за целта:

---
- hosts: all
  become: yes
  gather_facts: no

  tasks:

  - debug: msg="{{ lookup('pipe','date') }}"

  - name: Test connection
    ping:

  - name: Create backup files
    shell: "/usr/local/bin/cluster-backup.sh /home/core/backup"

  - name: Copy backup files
    synchronize:
      src: "/home/core/backup"
      dest: "/backup/"
      recursive: yes
      mode: pull

  - name: Find all files that are older than 10 days
    find:
      paths: "/home/core/backup"
      age: 10d
      recurse: yes
    register: filesOlderThan10

  - name: Remove older files than 10 days
    file:
      paths: "/home/core/backup"
      state: absent
    with_items: "{{ filesOlderThan10.files }}"

  - name: Send notification Slack
    slack:
      token: "XXX/YYY/ZZZ"
      msg: 'Backup ETCD on  {{ inventory_hostname }} completed :)'
      channel: '#monitoring'
    delegate_to: localhost

След, което го вкарах в crontab и готово.

Ресет на парола в NetWorker Management Console 9

Предисловие
Наложи ми се да се запозная с нов за мен софтуер за архивиране с гръмкото име „NetWorker“. Изградих си постановка с един виртуален сървър и няколко клиента.
Конзолата за управление на софтуерът бе върху въпросният сървър. Когато имах възможност си играех с него, но в даден момент забравих паролата за конзолата.
В няколко стъпки ще опиша, как я подмених с нова. Всички стъпки ще бъдат изпълнени под Windows OS, посредством Command Prompt.

Потребителско име – „Administrator“,
желана парола – „SuperSecretPassword123!“.

1) Създаване на нова парола(ще е нужна Base64 кодировка).
В notepad се записва желата парола в „чист“ вид(файла се казва mypass.txt и се намира в c:\).
В Command Prompt се изпълнява(като се намирам в c:\):

certutil -encode mypass.txt newpass.txt

По този начин ще се генерира Base64 кодировка на текстът от файла mypass.txt и ще бъде записан във файла newpass.txt

2) Редактиране на authc шаблон.
Шаблона(authc-local-config.json.template) съдържащ данните се намира в „c:\Program Files\EMC NetWorker\nsr\authc-server\scripts“.
В него има два параметъра, които трябва да бъдат променени.
„your_username“ ще стане на „Administrator“, а в „your_encoded_passowrd“ ще се съдържат данните от генерирания файл(newpass.txt) в стъпка 1. Данните са между BEGIN и END на файла.
Файла(authc-local-config.json.template) трябва да бъде преименуван на authc-local-config.json и записан в „c:\Program Files\EMC NetWorker\nsr\authc-server\tomcat\conf“.

3) Рестартиране на услуги и тяхното стартиране.
Отново в cmd се спират услугите.

net stop nsrexecd

Ще отнеме време.
Пуск.

net start nsrd
net start gstd

4) Тест. Отново в cmd.

authc_mgmt -u Administrator -p SuperSecretPassword123! -e find-all-users

По този начин ще се видят всички налични потребители.