Смотрим список дополнений AMI Linux:
sudo amazon-linux-extras list
Устанавливаем с расширений php7.2:
sudo amazon-linux-extras install php7.2
Смотрим список дополнений AMI Linux:
sudo amazon-linux-extras list
Устанавливаем с расширений php7.2:
sudo amazon-linux-extras install php7.2
По умолчанию в CentOS используется MariaDB, для установки MySQL нужно добавить репозиторий:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
Смотрим список репозиториев:
sudo yum repolist
Устанавливаем:
sudo yum install mysql-community-server
Скачиваем последнюю версию для 64-х битной архитектуры:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
Устанавливаем:
sudo yum install ./google-chrome-stable_current_*.rpm
Запуск в консоли:
google-chrome &
При попытке задать пароль пользователю mysql, возникает следующая ошибка:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
Эта ошибка появляется, если ваш пароль не соответствует следующим требованиям, для "validate_password.policy" в режиме "MEDIUM" это:
1. Задать пароль, который соответствует требованиям безопасности к паролям.
2. Или понизить уровень требования безопасности пароля:
Если вам подходит второй вариант, то логинимся в mysql и смотрим текущее значение:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.00 sec)
И понижаем уровень:
SET GLOBAL validate_password.policy=LOW;
Останавливаем сервис mysqld и запускаем со следующими ключами:
sudo mysqld --skip-grant-tables --user=mysql &
Логинимся уже без пароля:
mysql -u root
И выполняем:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_NEW_ROOT_PASSWORD'; \q;
Теперь службу mysqld запущенную в фоне нужно остановить. Смотрим ID процесса:
sudo ps aux | grep mysql
Убиваем процесс:
sudo kill 12345
И запускаем сервис mysqld:
sudo systemctl start mysqld
Пример манифеста для создания конфигмапа, деплоймента и сервиса для RabbitMQ
apiVersion: v1 kind: ConfigMap metadata: name: rabbitmq-config namespace: staging labels: app: rabbitmq data: RABBITMQ_DEFAULT_USER: "user" RABBITMQ_DEFAULT_PASS: "password" RABBITMQ_DEFAULT_VHOST: "vhost" --- apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq namespace: staging labels: app: rabbitmq-app spec: replicas: 1 selector: matchLabels: app: rabbitmq-app strategy: type: RollingUpdate progressDeadlineSeconds: 300 template: metadata: labels: app: rabbitmq-app spec: containers: - image: rabbitmq:3 name: rabbitmq imagePullPolicy: "IfNotPresent" envFrom: - configMapRef: name: rabbitmq-config ports: - containerPort: 5672 volumeMounts: - mountPath: /var/lib/rabbitmq subPath: data/rabbitmq name: persistent-storage volumes: - name: persistent-storage persistentVolumeClaim: claimName: persistent-storage --- apiVersion: v1 kind: Service metadata: name: rabbitmq-svc namespace: staging spec: ports: - port: 5672 targetPort: 5672 selector: app: rabbitmq-app
Пример манифеста для создания деплоймента и сервиса для PostgreSQL
apiVersion: apps/v1 kind: Deployment metadata: name: postgres namespace: staging labels: app: postgres-app spec: replicas: 1 selector: matchLabels: app: postgres-app strategy: type: RollingUpdate progressDeadlineSeconds: 300 template: metadata: labels: app: postgres-app spec: containers: - image: postgres:11 name: postgres imagePullPolicy: "IfNotPresent" ports: - containerPort: 5432 volumeMounts: - mountPath: /var/lib/postgresql/data subPath: data/postgres/data name: persistent-storage volumes: - name: persistent-storage persistentVolumeClaim: claimName: persistent-storage --- apiVersion: v1 kind: Service metadata: name: postgres-svc namespace: staging spec: ports: - port: 5432 targetPort: 5432 selector: app: postgres-app
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: persistent-storage namespace: staging spec: accessModes: - ReadOnlyMany volumeMode: Filesystem resources: requests: storage: 30Gi storageClassName: standard
Создаем PVC:
kubectl create -f pvc.yml
Проверяем:
kubectl get pvc -n staging NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistent-storage Bound pvc-bd856312-9be4-11e9-bb1d-42010a9c01f3 30Gi ROX standard 17s
Пример того, как используя плагин Libvirt Slaves Plugin для Jenkins'а подключить воркеров OSX запущенных на QEMU/Virsh, которые могут работать On-demend.
Этап настройки MacOS как Jenkins как такового упущена.
Первое что нужно, это установить Libvirt Slaves плагин. Переходим в конфигурацию Jenkins'а и находим "Управление плагинами"
Во вкладке "Доступные" ищем Libvirt Slaves и устанавливаем.
После чего в настройках Jenkins'а в самом низу появится блок "Cloud". Тут необходимо подключить наш гипервизор. В данном примере используется QEMU, который работает на удаленном сервере.
Поэтому для начала необходимо на Jenkins сервере установить "libvirt" пакет.
Для Ubuntu:
apt install apt install libvirt
Так же закрытый SSH ключ пользователя "jenkins" добавляем в "authorized_keys" пользователя "root" на гипервизоре.
Добавляем наш гипервизор в Jenkins'е
И проверяем "Test connection"
Так же в "Расширенные" можно указать нестандартный SSH порт и выбрать SSH ключ.
Параметр "Concurrent Slaves Capacity" задаем максимальное количество запущенных виртуальных машин на гипервизоре одновременно, "0" — неограниченное количество, но с этой переменной может возникнуть баг, который так и не пофиксили. Может виртуальная машина не запускаться, из-за ошибки что вы достигли максимального количества виртуалок, хотя вы его не привешали, для запуска нужно открыть настройки и поменять значение на любое другое и применить.
Теперь можем добавлять "Node"
Сразу после создания узла, список виртуальных машин у меня был пуст, хотя на гипервизоре было запущенно 4 виртуальных машины.
Мне помогло следующее, сразу сохранить данный узел и открыть его на редактирование.
Так как MacOS использует OVMF файлы, то мы не сможем использовать "Snapshot", мой способ для "revert" будет ниже.
В данной конфигурации Slave будет использоваться только при использовании лейбла.
Параметр "Availability" задает доступность агента, если задать только по запросу, то агент будет выключать виртуальную машину, и при необходимости будет сам ее запускать.
Переменную "VM_NAME" я использую для "обнуления" виртуальной машины после каждой сборки. Для этого, на гипервизоре создадим скрипт со следующим содержимым:
#!/bin/bash VM_NAME="$1" VM_PATH="/var/lib/kvm/vm_images" VIRSH="/usr/bin/virsh" sleep 30 $VIRSH define $VM_PATH/$VM_NAME/$VM_NAME.xml $VIRSH snapshot-delete --domain $VM_NAME --metadata pure_system rm $VM_PATH/$VM_NAME/mac_hdd.pure_system $VIRSH destroy $VM_NAME $VIRSH snapshot-create-as --domain $VM_NAME --name pure_system --disk-only $VIRSH start $VM_NAME
Для работы скрипта нужен один аргумент, это имя виртуальной машины. Это же имя у меня соответствует путям к образам виртуальных машин.
В XML файле в качестве диска должен быть указан оригинальный образ диска, а не снапшот. Тем самым при "define" мы переключаемся на него. Затем удаляем снапшот с именем "pure_system" и удаляем его диск. Если снапшота на момент запуска скрипта не было, ничего страшного, в конце скрипта он создастся. После удаления снапшота выключается виртуальная машина, создается снапшот и запускается виртуальная машина со снапшота. Тем самым все изменения будут проходить в снапшоте, и при каждом запуске скрипта будет создаваться новой на основе оригинального диска, в данном примере это "mac_hdd.img"
Так как состояние виртуальной машины будет всегда сбрасываться, то будем лог сборки и ipa файл будем архивировать в артефакты. И последним пунктом обращаемся со сборщика на гипервизор на запуск скрипта в фоне на "обнуление" виртуальной машины. Для этого SSH ключ сборщика должен быть добавлен на гипервизор.
stage ('iOS. Make artifacts') { steps { echo "Making Artifacts..." } post { always { archiveArtifacts artifacts: "ios_build/*.ipa", onlyIfSuccessful: false archiveArtifacts artifacts: "/Users/admin/Library/Logs/gym/*.log", onlyIfSuccessful: false sh "rm -rf $WORKSPACE/ios_build" } } } stage ('Revert VM image') { steps { script { sh "ssh -i /Users/admin/.ssh/kvm_server [email protected] \"nohup /scripts/kvm_image_revert.sh $VM_NAME > /dev/null 2>&1 &\"" } } }
Fio
Random read/write performance
fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Random read performance
fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread
Random write performance
fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite
(On MacOS we must use posixaio ioengine. If you are on running some different flavour of Unix just replace –ioengine=posixaio with eg. –ioengine=libaio for Ubuntu)