Редакция апрель, 2022
Аннотация
apt-get
и её графическая оболочка synaptic позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новостей мира свободных программ.
Содержание
SCDWriter.exe
;
Предупреждение
.exe
;
Предупреждение
где <файл-образа.iso> — образ диска ISO, аdd
oflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progresssync
/dev/sdX
— устройство, соответствующее flash-диску.
где <файл-образа.iso> — образ диска ISO, аpv
<файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync
/dev/sdX
— устройство, соответствующее flash-диску.
lsblk
или (если такой команды нет): blkid
.
$ lsblk | grep disk
sda 8:0 0 931,5G 0 disk
sdb 8:16 0 931,5G 0 disk
sdc 8:32 1 7,4G 0 disk
flash-диск имеет имя устройства sdc.
# dd oflag=direct if=/iso/alt-server-v-10.0-x86_64.iso of=/dev/sdc bs=1M status=progress; sync
# pv /iso/alt-server-v-10.0-x86_64.iso | dd oflag=direct of=/dev/sdc bs=1M;sync
dd: warning: partial read (524288 bytes); suggest iflag=fullblock
3GiB 0:10:28 [4,61MiB/s] [===================================> ] 72% ETA 0:04:07
Предупреждение
Предупреждение
Предупреждение
eject /dev/sdX
и дождаться ее успешного завершения.
sudo dd if=
alt-server-v-10.0-x86_64.iso
of=/dev/diskX bs=1Msync
alt-server-v-10.0-x86_64.iso
— образ диска ISO, а /dev/diskX — flash-диск.
diskutil list
Предупреждение
Предупреждение
$ du -b alt-server-v-10.0-x86_64.iso | cut -f1
2296233984
$ md5sum alt-server-v-10.0-x86_64.iso
56e7330ee5a4bf3a4238a8f118c3b834 alt-server-v-10.0-x86_64.iso
# head -c 2296233984 /dev/sdd | md5sum
56e7330ee5a4bf3a4238a8f118c3b834
где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.
Предупреждение
Примечание
vncviewer --listen
);
[root@localhost /]#
Примечание
nomodeset
— не использовать modeset-драйверы для видеокарты;
vga=normal
— отключить графический экран загрузки установщика;
xdriver=vesa
— явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;
acpi=off noapic
— отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.
Примечание
Примечание
Примечание
/var
;
/var
. Если результат вас по каким-то причинам не устраивает, прямо сейчас можно его отредактировать.
Примечание
/home
) или с другими операционными системами. С другой стороны, отформатировать можно любой раздел, который вы хотите «очистить» (удалить все данные).
Предупреждение
Примечание
Примечание
Важно
Примечание
Предупреждение
/etc/fstab
).
Примечание
Важно
Важно
Примечание
Важно
Примечание
Важно
Примечание
/home
, то во время загрузки системы будет необходимо ввести пароль для этого раздела, иначе вы не сможете получить доступ в систему под своим именем пользователя.
#apt-get update
#apt-get dist-upgrade
#update-kernel
#apt-get clean
#reboot
Примечание
$ su -
или зарегистрировавшись в системе (например, на второй консоли Ctrl+Alt+F2) под именем root. Про режим суперпользователя можно почитать в главе Режим суперпользователя.
Примечание
Важно
/home
, то для того, чтобы войти в систему под своим именем пользователя, вам потребуется ввести пароль этого раздела и затем нажать Enter.
Важно
Примечание
Примечание
Таблица 24.1. Минимальные требования к серверу управления
Ресурс
|
Минимальное значение
|
---|---|
Оперативная память
|
2 ГБ
|
CPU
|
1 CPU (2 ядра)
|
Диск
|
100 ГБ
|
Сеть
|
2 интерфейса
|
Примечание
/var/lib/one/.one/one_auth
будет создан со случайно сгенерированным паролем. Необходимо поменять этот пароль перед запуском OpenNebula.
# passwd oneadmin
/var/lib/one/.one/one_auth
. Он должен содержать следующее: oneadmin:<пароль>. Например:
$ echo "oneadmin:mypassword" > ~/.one/one_auth
Примечание
# mysql_secure_installation
$mysql -u root -p
Enter password: MariaDB >GRANT ALL PRIVILEGES ON opennebula.* TO 'oneadmin' IDENTIFIED BY '<thepassword>';
Query OK, 0 rows affected (0.003 sec) MariaDB >SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.001 sec) MariaDB >quit
/etc/one/oned.conf
:
#DB = [ BACKEND = "sqlite" ] # Sample configuration for MySQL DB = [ BACKEND = "mysql", SERVER = "localhost", PORT = 0, USER = "oneadmin", PASSWD = "<thepassword>", DB_NAME = "opennebula", CONNECTIONS = 50 ]
#systemctl start opennebula
#systemctl start opennebula-sunstone
$ oneuser show
USER 0 INFORMATION
ID : 0
NAME : oneadmin
GROUP : oneadmin
PASSWORD : 3bc15c8aae3e4124dd409035f32ea2fd6835efc9
AUTH_DRIVER : core
ENABLED : Yes
USER TEMPLATE
TOKEN_PASSWORD="ec21d27e2fe4f9ed08a396cbd47b08b8e0a4ca3c"
VMS USAGE & QUOTAS
VMS USAGE & QUOTAS - RUNNING
DATASTORE USAGE & QUOTAS
NETWORK USAGE & QUOTAS
IMAGE USAGE & QUOTAS
http://<внешний адрес>:9869
. Если все в порядке, будет предложена страница входа.
/var/lib/one/.one/one_auth
):
Примечание
/var/lib/one/.ssh/authorized_keys
на всех машинах.
$ ssh-keyscan <сервер_управления> <узел1> <узел2> <узел3> ... >> /var/lib/one/.ssh/known_hosts
Примечание
ssh-keyscan
необходимо выполнить, как для имён, так и для IP-адресов узлов/сервера управления:
$ ssh-keyscan <IP-узел1> <hostname-узел1> ... >> /var/lib/one/.ssh/known_hosts
Например,
$ ssh-keyscan 192.168.0.185 server 192.168.0.190 host01 >> /var/lib/one/.ssh/known_hosts
/var/lib/one/.ssh
на все узлы. Самый простой способ — установить временный пароль для oneadmin на всех хостах и скопировать каталог с сервера управления:
$scp -rp /var/lib/one/.ssh <узел1>:/var/lib/one/
$scp -rp /var/lib/one/.ssh <узел2>:/var/lib/one/
$scp -rp /var/lib/one/.ssh <узел3>:/var/lib/one/
...
# от сервера управления к самому серверу управления ssh <сервер_управления> exit # от сервера управления к узлу1, обратно на сервер управления и к другим узлам ssh <узел1> ssh <сервер_управления> exit ssh <узел2> exit ssh <узел3> exit exitИ так далее для всех узлов.
/var/lib/one/.ssh/config
на сервере управления и добавления параметра ForwardAgent к хостам гипервизора для пересылки ключа:
$ cat /var/lib/one/.ssh/config
Host host01
User oneadmin
ForwardAgent yes
Host host02
User oneadmin
ForwardAgent yes
Примечание
Примечание
onehost
— это инструмент управления узлами в OpenNebula. Описание всех доступных опций утилиты onehost
можно получить, выполнив команду:
$ man onehost
$ onehost create host01 -im kvm -vm kvm
ID: 1
$ onehost list
ID NAME CLUSTER TVM ALLOCATED_CPU ALLOCATED_MEM STAT
1 host01 default 0 0 / 400 (0%) 0K / 7.6G (0%) on
Примечание
/var/log/one/oned.log
.
$ onehost delete 1
или имени:
$ onehost delete host01
$onehost disable host01
// деактивировать узел $onehost enable host01
// активировать узел $onehost offline host01
// полностью выключить узел
$ onehost show host01
oneuser
— инструмент командной строки для управления пользователями в OpenNebula.
$oneuser list
ID NAME GROUP AUTH VMS MEMORY CPU 1 serveradmin oneadmin server_c 0 / - 0M / 0.0 / - 0 oneadmin oneadmin core - - - $onegroup list
ID NAME USERS VMS MEMORY CPU 1 users 0 0 / - 0M / - 0.0 / - 0 oneadmin 2 - - -
$ oneuser create <user_name> <password>
$ oneuser chgrp <user_name> oneadmin
Что бы удалить пользователя из группы, необходимо переместить его обратно в группу users.
$ oneuser disable <user_name>
Включить отключённого пользователя:
$ oneuser enable <user_name>
Удалить пользователя:
$ oneuser delete <user_name>
onegroup
— инструмент командной строки для управления группами в OpenNebula.
$ onegroup create group_name
ID: 100
Новая группа получила идентификатор 100, чтобы отличать специальные группы от созданных пользователем.
$ onegroup create
--name testgroup \
--admin_user testgroup-admin --admin_password somestr \
--resources TEMPLATE+VM
При выполнении данной команды также будет создан администратор группы.
$ onegroup addadmin <groupid_list> <userid>
onedatastore
— инструмент управления хранилищами в OpenNebula. Описание всех доступных опций утилиты onedatastore
можно получить, выполнив команду:
$ man onedatastore
$ onedatastore list
ID NAME SIZE AVA CLUSTERS IMAGES TYPE DS TM STAT
2 files 104.8G 32% 0 1 fil fs ssh on
1 default 104.8G 32% 0 8 img fs ssh on
0 system - - 0 0 sys - ssh on
Информация о хранилище:
$ onedatastore show default
oneimage
.
Примечание
Примечание
$ oneimage create
-d 1 --name "ALT Workstation ISO" \
--path /var/tmp/alt-workstation-10.0-x86_64.iso --type CDROM
ID: 31
Создать пустой образ диска (тип образа — DATABLOCK, размер 45 ГБ, драйвер qcow2):
$ oneimage create
-d 1 --name "ALT Workstation" \
--type DATABLOCK --size 45G --persistent --driver qcow2
ID: 33
Примечание
NAME = "ALT Workstation" CONTEXT = [ NETWORK = "YES", SSH_PUBLIC_KEY = "$USER[SSH_PUBLIC_KEY]" ] CPU = "1" DISK = [ IMAGE = "ALT Workstation ISO", IMAGE_UNAME = "oneadmin" ] DISK = [ DEV_PREFIX = "vd", IMAGE = "ALT Workstation", IMAGE_UNAME = "oneadmin" ] GRAPHICS = [ LISTEN = "0.0.0.0", TYPE = "SPICE" ] HYPERVISOR = "kvm" INPUTS_ORDER = "" LOGO = "images/logos/alt.png" MEMORY = "1024" MEMORY_UNIT_COST = "MB" NIC = [ NETWORK = "VirtNetwork", NETWORK_UNAME = "oneadmin", SECURITY_GROUPS = "0" ] NIC_DEFAULT = [ MODEL = "virtio" ] OS = [ BOOT = "disk1,disk0" ] SCHED_REQUIREMENTS = "ID=\"0\""
$ onetemplate create template
ID: 22
Примечание
$ onetemplate instantiate 22
VM ID: 9
Примечание
spice://192.168.0.190:5909где 192.168.0.190 — IP-адрес хоста с ВМ, а 9 — идентификатор ВМ (номер порта 5900 + 9).
# apt-get update && apt-get install opennebula-context
# apt-get install systemd-timesyncd
/etc/systemd/network/lan.network
со следующим содержимым:
[Match] Name = * [Network] DHCP = ipv4
# systemctl disable network NetworkManager && systemctl enable systemd-networkd systemd-timesyncd
Примечание
$ onevm terminate 9
Примечание
$oneimage chtype 33 OS
$oneimage nonpersistent 33
Важно
Примечание
# apt-get install opennebula-node-lxd
/usr/share/doc/opennebula-node-lxd-5.10.5/README.opennebula-lxd
Примечание
$ onehost create host03 -im lxd -vm lxd
ID: 3
/etc/one/oned.conf
);
$onezone list
C ID NAME ENDPOINT FED_INDEX * 0 OpenNebula http://localhost:2633/RPC2 -1 $onezone server-add 0 --name opennebula --rpc http://192.168.0.186:2633/RPC2
$onezone show 0
ZONE 0 INFORMATION ID : 0 NAME : OpenNebula ZONE SERVERS ID NAME ENDPOINT 0 opennebula http://192.168.0.186:2633/RPC2 HA & FEDERATION SYNC STATUS ID NAME STATE TERM INDEX COMMIT VOTE FED_INDEX 0 opennebula solo 0 -1 0 -1 -1 ZONE TEMPLATE ENDPOINT="http://localhost:2633/RPC2"
/etc/one/oned.conf
:
FEDERATION = [ MODE = "STANDALONE", ZONE_ID = 0, SERVER_ID = 0, # изменить с -1 на 0 (0 — это ID сервера) MASTER_ONED = "" ]
/etc/one/oned.conf
):
RAFT_LEADER_HOOK = [ COMMAND = "raft/vip.sh", ARGUMENTS = "leader enp0s3 192.168.0.200/24" ] # Executed when a server transits from leader->follower RAFT_FOLLOWER_HOOK = [ COMMAND = "raft/vip.sh", ARGUMENTS = "follower enp0s3 192.168.0.200/24" ]
$ onezone show 0
ZONE 0 INFORMATION
ID : 0
NAME : OpenNebula
ZONE SERVERS
ID NAME ENDPOINT
0 opennebula http://192.168.0.186:2633/RPC2
HA & FEDERATION SYNC STATUS
ID NAME STATE TERM INDEX COMMIT VOTE FED_INDEX
0 opennebula leader 1 5 5 0 -1
ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC
Сервер opennebula стал Leader-сервером, так же ему был присвоен плавающий адрес (Floating IP):
$ ip -o a sh enp0s3
2: enp0s3 inet 192.168.0.186/24 brd 192.168.0.255 scope global enp0s3\ valid_lft forever preferred_lft forever
2: enp0s3 inet 192.168.0.200/24 scope global secondary enp0s3\ valid_lft forever preferred_lft forever
2: enp0s3 inet6 fe80::a00:27ff:fec7:38e6/64 scope link \ valid_lft forever preferred_lft forever
Предупреждение
Предупреждение
/var/lib/one/.one/
:
$onedb backup -u oneadmin -d opennebula -p oneadmin
MySQL dump stored in /var/lib/one/mysql_localhost_opennebula_2021-6-23_13:43:21.sql Use 'onedb restore' or restore the DB using the mysql command: mysql -u user -h server -P port db_name < backup_file $scp /var/lib/one/mysql_localhost_opennebula_2021-6-23_13\:43\:21.sql <ip>:/tmp
$ssh <ip> rm -rf /var/lib/one/.one
$scp -r /var/lib/one/.one/ <ip>:/var/lib/one/
$ onedb restore -f -u oneadmin -p oneadmin -d opennebula /tmp/mysql_localhost_opennebula_2021-6-23_13\:43\:21.sql
MySQL DB opennebula at localhost restored.
$ onezone server-add 0 --name server02 --rpc http://192.168.0.187:2633/RPC2
Проверить зону на Leader-сервере:
$ onezone show 0
ZONE 0 INFORMATION
ID : 0
NAME : OpenNebula
ZONE SERVERS
ID NAME ENDPOINT
0 opennebula http://192.168.0.186:2633/RPC2
1 server02 http://192.168.0.187:2633/RPC2
HA & FEDERATION SYNC STATUS
ID NAME STATE TERM INDEX COMMIT VOTE FED_INDEX
0 opennebula leader 4 22 22 0 -1
1 server02 error - - - - -
ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"
Новый сервер находится в состоянии ошибки, так как OpenNebula на новом сервере не запущена. Следует запомнить идентификатор сервера, в этом случае он равен 1.
/etc/one/oned.conf
, (указать в качестве SERVER_ID значение из предыдущего шага). Включить Raft-обработчики, как это было выполнено на Leader.
$ onezone show 0
ZONE 0 INFORMATION
ID : 0
NAME : OpenNebula
ZONE SERVERS
ID NAME ENDPOINT
0 opennebula http://192.168.0.186:2633/RPC2
1 server02 http://192.168.0.187:2633/RPC2
HA & FEDERATION SYNC STATUS
ID NAME STATE TERM INDEX COMMIT VOTE FED_INDEX
0 opennebula leader 4 28 28 0 -1
1 server02 follower 4 28 28 0 -1
ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2""
Примечание
$ onezone show 0
ZONE 0 INFORMATION
ID : 0
NAME : OpenNebula
ZONE SERVERS
ID NAME ENDPOINT
0 opennebula http://192.168.0.186:2633/RPC2
1 server02 http://192.168.0.187:2633/RPC2
2 server03 http://192.168.0.188:2633/RPC2
HA & FEDERATION SYNC STATUS
ID NAME STATE TERM INDEX COMMIT VOTE FED_INDEX
0 opennebula leader 4 35 35 0 -1
1 server02 follower 4 35 35 0 -1
2 server03 follower 4 35 35 0 -1
ZONE TEMPLATE
ENDPOINT="http://localhost:2633/RPC2"
/var/log/one/oned.log
), как в текущем Leader (если он есть), так и в хосте, который находится в состоянии Error. Все сообщения Raft будут регистрироваться в этом файле.
onezone server-add <zoneid>
параметры:
-n, --name
— имя сервера зоны;
-r, --rpc
— конечная точка RPC сервера зоны;
-v, --verbose
— подробный режим;
--user name
— имя пользователя, используемое для подключения к OpenNebula;
--password password
— пароль для аутентификации в OpenNebula;
--endpoint endpoint
— URL конечной точки интерфейса OpenNebula xmlrpc.
onezone server-del <zoneid> <serverid>
параметры:
-v, --verbose
— подробный режим;
--user name
— имя пользователя, используемое для подключения к OpenNebula;
--password password
— пароль для аутентификации в OpenNebula;
--endpoint endpoint
— URL конечной точки интерфейса OpenNebula xmlrpc.
onezone server-reset <zone_id> <server_id_of_failed_follower>
Содержание
https://<имя-компьютера>:8006
. Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки ОС):
Примечание
# apt-get install pve-manager
Все необходимые компоненты при этом будут установлены автоматически.
Важно
Важно
brctl
для настройки моста, и, если утилита не установлена, то при перезапуске системы сеть станет недоступна.
sleep 500 && reboot
.
#mkdir /etc/net/ifaces/vmbr0
#cp /etc/net/ifaces/enp0s3/* /etc/net/ifaces/vmbr0/
#rm -f /etc/net/ifaces/enp0s3/{i,r}*
#cat
<<EOF > /etc/net/ifaces/vmbr0/options BOOTPROTO=static CONFIG_WIRELESS=no CONFIG_IPV4=yes HOST='enp0s3' ONBOOT=yes TYPE=bri EOF
/etc/net/ifaces/enp0s3/ipv4address
.
HOST
файла /etc/net/ifaces/vmbr0/options
нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели IP-адрес (например, enp0s3), то этот адрес должен быть удален (например, можно закомментировать содержимое файла /etc/net/ifaces/enp0s3/ipv4address
).
# systemctl restart network
Примечание
#apt-get install alterator-fbi
#systemctl start ahttpd
#systemctl start alteratord
Важно
#control sshd-permit-root-login without_password
#systemctl restart sshd
#А после того, как сервер будет добавлен, снова отключить.control sshd-permit-root-login enabled
#systemctl restart sshd
Таблица 35.1. Используемые порты
Порт
|
Функция
|
---|---|
TCP 8006
|
Веб-интерфейс PVE
|
TCP 5900-5999
|
Доступ к консоли VNC
|
TCP 3128
|
Доступ к консоли SPICE
|
TCP 22
|
SSH доступ
|
UDP 5404, 5405
|
Широковещательный CMAN для применения настроек кластера
|
/etc/hosts
:
#echo "192.168.0.186 pve01.test.alt pve01" >> /etc/hosts
#echo "192.168.0.90 pve02.test.alt pve02" >> /etc/hosts
#echo "192.168.0.70 pve03.test.alt pve03" >> /etc/hosts
Примечание
Примечание
/etc/hosts
разрешающимся в 127.0.0.1.
# pvecm create <cluster_name>
#systemctl start pve-cluster
#pvecm create pve-cluster
# pvecm status
Cluster information
-------------------
Name: pve-cluster
Config Version: 1
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Thu Jul 8 14:21:44 2021
Quorum provider: corosync_votequorum
Nodes: 1
Node ID: 0x00000001
Ring ID: 1.d6
Quorate: Yes
Votequorum information
----------------------
Expected votes: 1
Highest expected: 1
Total votes: 1
Quorum: 1
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.0.186 (local)
/etc/pve/corosync.conf
. По мере добавления узлов в кластер файл настройки будет автоматически пополняться информацией об узлах.
# pvecm add <existing_node_in_cluster>
где existing_node_in_cluster
— адрес уже добавленного узла (рекомендуется указывать самый первый).
# pvecm add pve01
где pve01 — имя или ip-адрес «головного» узла.
# pvecm add pve01
Please enter superuser (root) password for 'pve01': ***
Establishing API connection with host 'pve01'
Login succeeded.
Request addition of this node
Join request OK, finishing setup locally
stopping pve-cluster service
backup old database to '/var/lib/pve-cluster/backup/config-1625747072.sql.gz'
waiting for quorum...OK
(re)generate node files
generate new node certificate
merge authorized SSH keys and known hosts
generated new node certificate, restart pveproxy and pvedaemon services
successfully added node 'pve03' to cluster.
/etc/pve/corosync.conf
должен содержать информацию об узлах кластера.
#systemctl start lxc lxc-net lxc-monitord pvedaemon pve-firewall pvestatd pve-ha-lrm pve-ha-crm spiceproxy pveproxy
#systemctl enable corosync lxc lxc-net lxc-monitord pve-cluster pvedaemon pve-firewall pvestatd pve-ha-lrm pve-ha-crm spiceproxy pveproxy pve-guests
pvecm nodes
, чтобы определить идентификатор узла, который следует удалить:
# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 pve01 (local)
2 1 pve02
3 1 pve03
# pvecm delnode pve02
# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 pve01 (local)
3 1 pve03
/etc/pve/priv/
и /etc/pve/nodes/${NAME}/priv/
доступны только root.
/etc/pve/
.
Таблица 36.1. Доступные типы хранилищ
Хранилище
|
PVE тип
|
Уровень
|
Общее (shared)
|
Снимки (snapshots)
|
---|---|---|---|---|
ZFS (локальный)
|
zfspool
|
файл
|
нет
|
да
|
Каталог
|
dir
|
файл
|
нет
|
нет (возможны в формате qcow2)
|
BTRFS
|
btrfs
|
файл
|
нет
|
да
|
NFS
|
nfs
|
файл
|
да
|
нет (возможны в формате qcow2)
|
CIFS
|
cifs
|
файл
|
да
|
нет (возможны в формате qcow2)
|
GlusterFS
|
glusterfs
|
файл
|
да
|
нет (возможны в формате qcow2)
|
CephFS
|
cephfs
|
файл
|
да
|
да
|
LVM
|
lvm
|
блок
|
нет
|
нет
|
LVM-thin
|
lvmthin
|
блок
|
нет
|
да
|
iSCSI/kernel
|
iscsi
|
блок
|
да
|
нет
|
iSCSI/libiscsi
|
iscsidirect
|
блок
|
да
|
нет
|
Ceph/RBD
|
rbd
|
блок
|
да
|
да
|
ZFS over iSCSI
|
zfs
|
блок
|
да
|
да
|
Proxmox Backup
|
pbs
|
файл/блок
|
да
|
-
|
/etc/pve/storage.cfg
. Поскольку этот файл находится в /etc/pve/
, он автоматически распространяется на все узлы кластера. Таким образом, все узлы имеют одинаковую конфигурацию хранилища.
<type>: <STORAGE_ID> <property> <value> <property> <value> ...
/etc/pve/storage.cfg
:
# cat /etc/pve/storage.cfg
dir: local
path /var/lib/vz
content images,rootdir,iso,snippets,vztmpl
maxfiles 0
nfs: nfs-storage
export /export/storage
path /mnt/nfs-vol
server 192.168.0.105
content images,iso,backup,vztmpl
options vers=3,nolock,tcp
/var/lib/vz
и NFS хранилище nfs-storage.
Таблица 36.2. Параметры хранилищ
Свойство
|
Описание
|
---|---|
nodes
|
Список узлов кластера, где хранилище можно использовать/доступно. Можно использовать это свойство, чтобы ограничить доступ к хранилищу.
|
content
|
Хранилище может поддерживать несколько типов содержимого. Это свойство указывает, для чего используется это хранилище.
Доступные опции:
|
shared
|
Пометить хранилище как общее
|
disable
|
Отключить хранилище
|
maxfiles
|
Устарело, следует использовать свойство prune-backups. Максимальное количество файлов резервных копий на ВМ
|
prune-backups
|
Варианты хранения резервных копий
|
format
|
Формат образа по умолчанию (raw|qcow2|vmdk)
|
pvesm
(PVE Storage Manager), позволяет выполнять общие задачи управления хранилищами.
pvesm add <TYPE> <STORAGE_ID> <OPTIONS> pvesm add dir <STORAGE_ID> --path <PATH> pvesm add nfs <STORAGE_ID> --path <PATH> --server <SERVER> --export <EXPORT> pvesm add lvm <STORAGE_ID> --vgname <VGNAME> pvesm add iscsi <STORAGE_ID> --portal <HOST[:PORT]> --target <TARGET>
pvesm set <STORAGE_ID> --disable 1
pvesm set <STORAGE_ID> --disable 0
pvesm set <STORAGE_ID> <OPTIONS> pvesm set <STORAGE_ID> --shared 1 pvesm set local --format qcow2 pvesm set <STORAGE_ID> --content iso
pvesm remove <STORAGE_ID>
pvesm alloc <STORAGE_ID> <VMID> <name> <size> [--format <raw|qcow2>]
pvesm alloc local <VMID> '' 4G
pvesm free <VOLUME_ID>
pvesm status
pvesm list <STORAGE_ID> [--vmid <VMID>]
Таблица 36.3. Структура каталогов
Тип данных
|
Подкаталог
|
---|---|
Образы дисков ВМ
|
images/<VMID>/
|
ISO образы
|
template/iso/
|
Шаблоны контейнеров
|
template/cache/
|
Резервные копии
|
dump/
|
Snippets
|
snippets/
|
/mnt/iso
:
path
для указания каталога. Это должен быть абсолютный путь к файловой системе.
/etc/pve/storage.cfg
):
dir: backup path /mnt/backup content backup prune-backups keep-last=7 shared 0
/mnt/backup/dump/...
.
VM-<VMID>-<NAME>.<FORMAT>где:
# ls /var/lib/vz/images/101
vm-101-disk-0.qcow2 vm-101-disk-1.qcow2
base-<VMID>-<NAME>.<FORMAT>
shared
, который всегда установлен. Кроме того, для настройки NFS используются следующие свойства:
pvesm scan nfs <server>
);
/mnt/pve/<STORAGE_ID>/
);
/etc/pve/storage.cfg
):
nfs: nfs-storage export /export/storage path /mnt/pve/nfs-storage server 192.168.0.105 content images,backup,vztmpl,iso options vers=3,nolock,tcp
Примечание
# systemctl enable --now nfs-client.target
/export/storage
.
pvesm
:
# pvesm add nfs nfs-storage --path /mnt/nfs-vol --server 192.168.0.105 --options vers=3,nolock,tcp --export /export/storage --content images,iso,vztmpl,backup
# pvesm nfsscan <server>
Примечание
Примечание
is_mountpoint
.
/etc/pve/storage.cfg
):
btrfs: btrfs-storage path /mnt/data content rootdir,images nodes pve02 prune-backups keep-all=1
/mnt/data
:
pvesm
:
# pvesm add btrfs btrfs-storage --path /mnt/data/btrfs-storage --is_mountpoint / --content images,rootdir
Примечание
shared
, который всегда установлен. Кроме того, для настройки CIFS используются следующие свойства:
pvesm scan cifs <server>
);
/etc/pve/priv/<STORAGE_ID>.cred
);
/mnt/pve/<STORAGE_ID>/
).
/etc/pve/storage.cfg
):
cifs: newCIFS path /mnt/pve/newCIFS server 192.168.0.105 share smb_data smbversion 2.1
pvesm cifsscan <server> [--username <username>] [--password]
pvesm add cifs <storagename> --server <server> --share <share> [--username <username>] [--password]
Примечание
# pvesm add cifs newCIFS --server 192.168.0.105 --share smb_data --smbversion 2.1
/etc/pve/storage.cfg
):
glusterfs: gluster-01 server 192.168.0.105 server2 192.168.0.110 volume glustervol content images,iso
Примечание
# modprobe zfs
#zfsв файле
/etc/modules-load.d/zfs.conf
.
/etc/pve/storage.cfg
):
zfspool: vmdata pool vmdata content images,rootdir mountpoint /vmdata nodes pve03
zfs
и zpool
.
zpool
create -f -o ashift=12 <pool> <device1> <device2>
zpool
create -f -o ashift=12 <pool> mirror <device1> <device2>
zpool
create -f -o ashift=12 <pool> mirror <device1>
<device2> mirror <device3> <device4>
zpool
create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
zpool
create -f -o ashift=12 <pool> raidz2 <device1>
<device2> <device3> <device4>
zpool
replace -f <pool> <old device> <new device>
zfs
set compression=on <pool>
# pvesm
zfsscan
# zpool
create -f vmdata mirror sdb sdc
# zpool
list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vmdata 17,5G 492K 17,5G - - 0% 0% 1.00x ONLINE -
Просмотреть статус пула:
# zpool
status
pool: vmdata
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
vmdata ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
cstream -t
).
/etc/pve/storage.cfg
):
lvm: vg vgname vg content rootdir,images nodes pve03 shared 0
Примечание
/dev/sdd
:
# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
# vgcreate vg /dev/sdd
Volume group "vg" successfully created
#lvcreate -n lv01 -L 10G vg
Logical volume "lv01" created. #lvcreate -n lv02 -L 5G vg
Logical volume "lv02" created.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdd vg lvm2 a-- <18,00g <3,00g
# vgs
VG #PV #LV #SN Attr VSize VFree
vg 1 2 0 wz--n- <18,00g <3,00g
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv01 vg -wi-a----- 10,00g
lv02 vg -wi-a----- 5,00g
# pvesm lvmscan
vg
# pvesm add lvm myspace --vgname vg --nodes pve03
/etc/pve/storage.cfg
):
lvmthin: vmstore thinpool vmstore vgname vmstore content rootdir,images nodes pve03
Примечание
# lvcreate -L 80G -T -n vmstore vg
# pvesm lvmthinscan vg
vmstore
# pvesm add lvmthin vmstore --thinpool vmstore --vgname vg --nodes pve03
/etc/pve/storage.cfg
):
iscsi: test1-iSCSI portal 192.168.0.105 target iqn.2021-7.local.omv:test content images
Примечание
# systemctl enable --now iscsid
pvesm scan iscsi <HOST[:PORT]>
/etc/pve/storage.cfg
):
rbd: new content images krbd 0 monhost 192.168.0.105 pool rbd username admin
/mnt/pve/<STORAGE_ID>/
);
/etc/pve/storage.cfg
):
cephfs: cephfs-external content backup,images monhost 192.168.0.105 username admin
/etc/pve/priv/storage/<STORAGE-ID>.pw
, доступном только суперпользователю;
proxmox-backup-manager cert info
;
/etc/pve/priv/storage/<STORAGE-ID>.enc
, доступном только суперпользователю;
/etc/pve/storage.cfg
):
pbs: pbs_backup datastore store2 server 192.168.0.123 content backup fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b prune-backups keep-all=1 username root@pam
# pvesm add pbs pbs_backup --server 192.168.0.123 --datastore store2 --username root@pam --fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b --password
Таблица 37.1. Каталоги локального хранилища
Каталог
|
Тип шаблона
|
---|---|
/var/lib/vz/template/iso/
|
ISO-образы
|
/var/lib/vz/template/cache/
|
Шаблоны контейнеров LXC
|
Таблица 37.2. Каталоги общих хранилищ
Каталог
|
Тип шаблона
|
---|---|
/mnt/pve/<storage_name>/template/iso/
|
ISO-образы
|
/mnt/pve/<storage_name>/template/cache/
|
Шаблоны контейнеров LXC
|
# qm set <vmid> -onboot 1
Примечание
Порядок запуска и выключения
всегда будут запускаться после тех, для которых этот параметр установлен . Кроме того, этот параметр может применяться только для ВМ, работающих на одном хосте, а не в масштабе кластера.
qm
qm
— это инструмент для управления ВМ Qemu/KVM в PVE. Утилиту qm
можно использовать для создания/удаления ВМ, для управления работой ВМ (запуск/остановка/приостановка/возобновление), для установки параметров в соответствующем конфигурационном файле, а также для создания виртуальных дисков.
# qm help
qm
:
# qm create 300 -ide0 local-lvm:21 -net0 e1000 -cdrom local:iso/alt-server-10.0-x86_64.iso
# qm start 109
# qm shutdown 109 && qm wait 109
qemu-img
— утилита для манипулирования с образами дисков машин QEMU. qemu-img
позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают. (подробнее см. раздел «Утилита qemu-img»).
qemu-img
:
# qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2
# qemu-img create -f raw test.raw 40G
# qemu-img resize -f raw test.raw 80G
# qemu-img info test.raw
# qm resize <vm_id> <virtual_disk> [+]<size>
Примечание
# qm resize 100 scsi1 80G
/etc/pve/qemu-server/<VMID>.conf
). Как и другие файлы, находящиеся в /etc/pve/
, они автоматически реплицируются на все другие узлы кластера.
Примечание
boot: order=scsi0;scsi7;net0 cores: 1 memory: 512 name: newVM net0: virtio=C6:E4:55:03:79:5A,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 scsi0: local:100/vm-100-disk-0.qcow2,size=32G scsi7: local-iso:iso/alt-server-10.0-x86_64.iso,media=cdrom scsihw: virtio-scsi-pci smbios1: uuid=a4ce5cab-f4df-4bde-a19b-6b9f3ebbaddb sockets: 1 vmgenid: 5581e5d2-df01-4150-9977-fd1c49d83fc3
OPTION: value
qm
для генерации и изменения этих файлов, либо выполнять такие действия в веб-интерфейсе.
bootdisk: scsi0 … parent: snapshot … vmgenid: 5581e5d2-df01-4150-9977-fd1c49d83fc3 [snapshot] bootdisk: scsi0 cores: 1 memory: 512 name: newVM net0: virtio=C6:E4:55:03:79:5A,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 runningmachine: pc-i440fx-4.1 scsi0: local:100/vm-100-disk-0.qcow2,size=32G scsi7: local-iso:iso/alt-server-10.0-x86_64.iso,media=cdrom scsihw: virtio-scsi-pci smbios1: uuid=a4ce5cab-f4df-4bde-a19b-6b9f3ebbaddb snaptime: 1595498248 sockets: 1 vmgenid: 5581e5d2-df01-4150-9977-fd1c49d83fc3 vmstate: local:100/vm-100-state-snapshot.raw
parent
при этом используется для хранения родительских/дочерних отношений между снимками, а snaptime
— это отметка времени создания снимка (эпоха Unix).
pct
для создания контейнера:
#!/bin/bash hostname="pve02" vmid="104" template_path="/var/lib/vz/template/cache" storage="local" description="alt-p10" template="alt-p10-rootfs-systemd-x86_64.tar.xz" ip="192.168.0.93/24" nameserver="8.8.8.8" ram="1024" rootpw="password" rootfs="4" gateway="192.168.0.1" bridge="vmbr0" if="eth0" #### Execute pct create using variable substitution #### pct create $vmid \ $template_path/$template \ -description $description \ -rootfs $rootfs \ -hostname $hostname \ -memory $ram \ -nameserver $nameserver \ -storage $storage \ -password $rootpw \ -net0 name=$if,ip=$ip,gw=$gateway,bridge=$bridge
tty
— открывать соединение с одним из доступных tty-устройств (по умолчанию);
shell
— вызывать оболочку внутри контейнера (без входа в систему);
/dev/console
— подключаться к /dev/console.
Примечание
pct
— утилита управления контейнерами LXC в PVE. Чтобы просмотреть доступные для контейнеров команды PVE, можно выполнить следующую команду:
# pct help
pct set <ct_id> [options]
# pct set 101 –net0 name=eth0,bridge=vmbr0,ip=192.168.0.17/24,gw=192.168.0.1
pct set <ct_id> -memory <int_value>
pct set <ct_id> -rootfs size=<int_value for GB>
pct config <ct_id>
pct unlock <ct_id>
# pct list
VMID Status Lock Name
101 running newLXC
102 stopped pve01
103 stopped LXC2
pct start <ct_id>
pct stop <ct_id>
/etc/pve/lxc
, а файлы конфигураций ВМ — в /etc/pve/qemu-server/
.
pct
. Эти параметры могут быть настроены только путём внесения изменений в файл конфигурации с последующим перезапуском контейнера.
/etc/pve/lxc/101.conf
:
arch: amd64 cmode: shell console: 0 cores: 1 features: nesting=1 hostname: newLXC memory: 512 net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.0.1,hwaddr=C6:B0:3E:85:03:C9,ip=192.168.0.30/24,type=veth ostype: altlinux rootfs: local:101/vm-101-disk-0.raw,size=8G swap: 512 tty: 3 unprivileged: 1
# pct start 102
# pct stop 102
pct enter <ct_id>
[root@pve01 ~]# pct enter 101
[root@newLXC ~]#
exit
.
Предупреждение
Insecure $ENV{ENV} while running with...необходимо закомментировать строку:
"ENV=$HOME/.bashrc"в файле
/root/.bashrc
.
pct exec <ct_id> -- <command>
#pct exec 107 mkdir /home/demouser
#pct exec 107 ls /home
demouser
pct
, добавив --
после идентификатора контейнера:
# pct exec 107 -- df -H /
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
/dev/loop0 8,4G 516M 7,4G 7% /
Примечание
rsync
.
Примечание
qm migrate <vmid> <target> [OPTIONS]
--online
.
pct migrate <ctid> <target> [OPTIONS]
--restart
. Например:
# pct migrate 101 pve02 --restart
$ oneimage show 14
IMAGE 14 INFORMATION
ID : 14
NAME : ALT Linux p9
USER : oneadmin
GROUP : oneadmin
LOCK : None
DATASTORE : default
TYPE : OS
REGISTER TIME : 04/30 11:00:42
PERSISTENT : Yes
SOURCE : /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905
FSTYPE : save_as
SIZE : 12G
STATE : used
RUNNING_VMS : 1
PERMISSIONS
OWNER : um-
GROUP : ---
OTHER : ---
IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="7"
SAVED_VM_ID="46"
SAVE_AS_HOT="YES"
где /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905
— адрес образа жёсткого диска ВМ.
Примечание
onevm disk-saveas <vmid> <diskid> <img_name> [--type type --snapshot snapshot]где
--type <type>
— тип нового образа (по умолчанию raw); --snapshot <snapshot_id>
— снимок диска, который будет использован в качестве источника нового образа (по умолчанию текущее состояние диска).
$ onevm disk-saveas 125 0 test.qcow2
Image ID: 44
Информация об образе диска ВМ:
$ oneimage show 44
MAGE 44 INFORMATION
ID : 44
NAME : test.qcow2
USER : oneadmin
GROUP : oneadmin
LOCK : None
DATASTORE : default
TYPE : OS
REGISTER TIME : 07/12 21:34:42
PERSISTENT : No
SOURCE : /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
FSTYPE : save_as
SIZE : 12G
STATE : rdy
RUNNING_VMS : 0
PERMISSIONS
OWNER : um-
GROUP : ---
OTHER : ---
IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="14"
SAVED_VM_ID="125"
SAVE_AS_HOT="YES"
VIRTUAL MACHINES
Информация о диске:
$ qemu-img info /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
image: /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
file format: qcow2
virtual size: 12 GiB (12884901888 bytes)
disk size: 3.52 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
# qm create 120 --bootdisk scsi0 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm importdisk <vmid> <source> <storage> [OPTIONS]Импорт диска f811a893808a9d8f5bf1c029b3c7e905 в хранилище local, для ВМ с ID 120 (подразумевается, что образ импортируемого диска находится в каталоге, из которого происходит выполнение команды):
# qm importdisk 120 f811a893808a9d8f5bf1c029b3c7e905 local --format qcow2
importing disk 'f811a893808a9d8f5bf1c029b3c7e905' to VM 120 ...
…
Successfully imported disk as 'unused0:local:120/vm-120-disk-0.qcow2'
# qm set 120 --scsi0 local:120/vm-120-disk-0.qcow2
update VM 120: -scsi0 local:120/vm-120-disk-0.qcow2
"C:\Program Files\VMware\VMware Server\vmware-vdiskmanager" -r win7.vmdk -t 0 win7-pve.vmdkгде
win7.vmdk
— файл с образом диска.
win7-pve.vmdk
в каталог с образами ВМ /var/lib/vz/images/VMID
, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);
win7-pve.vmdk
в qemu формат:
# qemu-img convert -f vmdk win7-pve.vmdk -O qcow2 win7-pve.qcow2
/etc/pve/nodes/pve02/qemu-server/VMID.conf
) строку:
unused0: local:100/win7-pve.qcow2где 100 — VMID, а local — хранилище в PVE.
# qemu-img info win7-pve.vmdk
image: win7-pve.vmdk
file format: vmdk
virtual size: 127G (136365211648 bytes)
disk size: 20.7 GiB
cluster_size: 65536
Format specific information:
cid: 3274246794
parent cid: 4294967295
create type: streamOptimized
extents:
[0]:
compressed: true
virtual size: 136365211648
filename: win7-pve.vmdk
cluster size: 65536
format:
В данном случае необходимо создать диск в режиме IDE размером не меньше 127GB.
win7-pve.vmdk
в каталог с образами ВМ /var/lib/vz/images/VMID
, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);
# lvscan
ACTIVE '/dev/sharedsv/vm-101-disk-1' [130,00 GiB] inherit
# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/sharedsv/vm-101-disk-1
# qemu-img info win7-pve.vmdk
win7-pve.vmdk
в каталог с образами ВМ /var/lib/vz/images/VMID
, где VMID — VMID, созданной ВМ;
# rbd map rbd01/vm-100-disk-1
/dev/rbd0
Примечание
# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/rbd0
Примечание
Полное клонирование
(Full Clone
) и Связанная копия
(Linked Clone
);
Примечание
vzdump
.
lzop
). Особенностью этого алгоритма является скоростная распаковка. Следовательно, любая резервная копия, созданная с помощью этого алгоритма, может при необходимости быть развернута за минимальное время.
Zip
, использующей мощный алгоритм Deflate. Упор делается на максимальное сжатие данных, что позволяет сократить место на диске, занимаемое резервными копиями. Главным отличием от LZO является то, что процедуры компрессии/декомпрессии занимают достаточно большое количество времени.
--tmpdir
). Затем контейнер приостанавливается и rsync
копирует измененные файлы. После этого контейнер возобновляет свою работу. Это приводит к минимальному времени простоя, но требует дополнительное пространство для хранения копии контейнера. Когда контейнер находится в локальной файловой системе и хранилищем резервной копии является сервер NFS, необходимо установить --tmpdir
также и на локальную файловую систему, так как это приведет к повышению производительности. Использование локального tmpdir также необходимо, если требуется сделать резервную копию локального контейнера с использованием списков контроля доступа (ACL) в режиме ожидания, если хранилище резервных копий — сервер NFS;
prune-backups
команды vzdump
):
keep-all=<1|0>
) — хранить все резервные копии (если отмечен этот пункт, другие параметры не могут быть установлены);
keep-last=<N>
) — хранить <N> последних резервных копий;
keep-hourly=<N>
) — хранить резервные копии за последние <N> часов (если за один час создается более одной резервной копии, сохраняется только последняя);
keep-daily=<N>
) — хранить резервные копии за последние <N> дней (если за один день создается более одной резервной копии, сохраняется только самая последняя);
keep-weekly=<N>
) — хранить резервные копии за последние <N> недель (если за одну неделю создается более одной резервной копии, сохраняется только самая последняя);
keep-monthly=<N>
) — хранить резервные копии за последние <N> месяцев (если за один месяц создается более одной резервной копии, сохраняется только самая последняя);
keep-yearly=<N>
) — хранить резервные копии за последние <N> лет (если за один год создается более одной резервной копии, сохраняется только самая последняя);
# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
/etc/cron.d/vzdump
.
dump
. Имя файла резервной копии будет иметь вид:
pct restore
— утилита восстановления контейнера;
qmrestore
— утилита восстановления ВМ.
per-restore limit
— максимальный объем полосы пропускания для чтения из архива резервной копии;
per-storage write limit
— максимальный объем полосы пропускания, используемый для записи в конкретное хранилище.
Примечание
0
для параметра bwlimit
. Это может быть полезно, если требуется как можно быстрее восстановить ВМ.
# pvesm set STORAGEID --bwlimit restore=KIBs
/etc/vzdump.conf
. Каждая строка файла имеет следующий формат (пустые строки в файле игнорируются, строки, начинающиеся с символа #, рассматриваются как комментарии и также игнорируются):
OPTION: value
Таблица 42.1. Параметры файла конфигурации
Опция
|
Описание
|
---|---|
bwlimit: integer (0 — N) (default=0)
|
Ограничение пропускной способности ввода/вывода (Кб/с)
|
compress: (0|1|gzip|lzo|zstd) (default=0)
|
Сжатие файла резервной копии
|
dumpdir: string
|
Записать результирующие файлы в указанный каталог
|
exclude-path: string
|
Исключить определенные файлы/каталоги
|
ionice: integer (0 — 8) (default=7)
|
Установить CFQ приоритет ionice
|
lockwait: integer (0 — N) (default=180)
|
Максимальное время ожидания для глобальной блокировки (в минутах)
|
mailnotification: (always|failure) (default=always)
|
Указание, когда следует отправлять отчет по электронной почте
|
mailto: string
|
Разделенный запятыми список адресов электронной почты, на которые будут приходить уведомления
|
maxfiles: integer (1 — N) (default=1)
|
Максимальное количество файлов резервных копий ВМ
|
mode: (snapshot|stop|suspend) (default=snapshot)
|
Режим резервного копирования
|
pigz: integer (default=0)
|
Использует pigz вместо gzip при N>0. N=1 использует половину ядер (uses half of cores), при N>1 N — количество потоков
|
prune-backups
|
Использовать эти параметры хранения вместо параметров из конфигурации хранилища
|
remove: boolean (default=1)
|
Удалить старые резервные копии, если их больше, чем установлено опцией maxfiles
|
script: string
|
Использовать указанный скрипт
|
stdexcludes: boolean (default=1)
|
Исключить временные файлы и файлы журналов
|
stopwait: integer (0 — N) (default=10)
|
Максимальное время ожидания до остановки ВМ (минуты)
|
storage: string
|
Хранить полученный файл в этом хранилище
|
tmpdir: string
|
Хранить временные файлы в указанном каталоге
|
zstd: integer (default = 1)
|
Количество потоков zstd. N = 0 использовать половину доступных ядер, N > 0 использовать N как количество потоков
|
vzdump.conf
:
tmpdir: /mnt/fast_local_disk storage: my_backup_storage mode: snapshot bwlimit: 10000
Примечание
vzdump
по умолчанию пропускает следующие файлы (отключается с помощью опции --stdexcludes 0
):
/tmp/?* /var/tmp/?* /var/run/?*pid
# vzdump 777 --exclude-path /tmp/ --exclude-path '/var/foo*'
# vzdump 777 --exclude-path bar
исключает любые файлы и каталони с именами /bar, /var/bar, /var/foo/bar и т.д.
/etc/vzdump/
) и будут корректно восстановлены.
/var/lib/vz/dump/
):
# vzdump 103
rsync
и режим приостановки для создания снимка (минимальное время простоя):
# vzdump 103 --mode suspend
# vzdump --all --mode suspend --mailto root --mailto admin
/mnt/backup
:
# vzdump 103 --dumpdir /mnt/backup --mode snapshot
# vzdump 101 102 103 --mailto root
# vzdump --mode suspend --exclude 101,102
# pct restore 600 /mnt/backup/vzdump-lxc-104.tar
# qmrestore /mnt/backup/vzdump-qemu-105.vma 601
# vzdump 101 --stdout | pct restore --rootfs 4 300 -
boot: order=scsi0;scsi7;net0 cores: 1 memory: 1024 name: AltK net0: virtio=F6:94:0F:D7:5B:27,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 parent: first scsi0: nfs-storage:109/vm-109-disk-0.qcow2,size=22G scsi7: nfs-storage:iso/alt-kworkstation-10.0-install-x86_64.iso,media=cdrom scsihw: virtio-scsi-pci smbios1: uuid=03974168-9bc8-48ae-8590-d50bc24b93bb sockets: 1 vmgenid: 5e04d1a5-abd1-46e0-8f73-7b382ad1d66d [first] #clear system boot: order=scsi0;scsi7;net0 cores: 1 memory: 1024 name: AltK net0: virtio=F6:94:0F:D7:5B:27,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 runningcpu: kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep runningmachine: pc-i440fx-6.1+pve0 scsi0: nfs-storage:109/vm-109-disk-0.qcow2,size=22G scsi7: nfs-storage:iso/alt-kworkstation-10.0-install-x86_64.iso,media=cdrom scsihw: virtio-scsi-pci smbios1: uuid=03974168-9bc8-48ae-8590-d50bc24b93bb snaptime: 1639399834 sockets: 1 vmgenid: 5e04d1a5-abd1-46e0-8f73-7b382ad1d66d vmstate: nfs-storage:109/vm-109-state-first.raw
parent
используется для хранения родительских/дочерних отношений между снимками, snaptime
— это отметка времени создания снимка (эпоха Unix).
# smartctl -a /dev/sdX
где /dev/sdX
— это путь к одному из локальных дисков.
# smartctl -s on /dev/sdX
/dev/sdX
и /dev/hdX
каждые 30 минут на наличие ошибок и предупреждений, а также отправляет сообщение электронной почты пользователю root в случае обнаружения проблемы (для пользователя root в PVE должен быть введен действительный адрес электронной почты).
# ha-manager status
quorum OK
master pve03 (active, Mon Dec 13 15:46:10 2021)
lrm pve01 (active, Mon Dec 13 15:46:15 2021)
lrm pve02 (active, Mon Dec 13 15:46:06 2021)
lrm pve03 (active, Mon Dec 13 15:46:11 2021)
service ct:105 (pve03, started)
service ct:107 (pve01, started)
restart
и relocate
. Если все попытки окажутся неудачными, HA PVE поместит ресурсы в ошибочное состояние и не будет выполнять для них никаких задач.
adduser
) на всех узлах, на которых пользователю разрешено войти в систему. Пользователь аутентифицируется с помощью своего обычного системного пароля;
/etc/pve/priv/shadow.cfg
). Пароль шифруется с использованием метода хеширования SHA-256. Этот метод аутентификации удобен для небольших (или даже средних) установок, где пользователям не нужен доступ ни к чему, кроме PVE. В этом случае пользователи полностью управляются PVE и могут менять свои пароли через графический интерфейс;
/etc/pve/user.cfg
:
# cat /etc/pve/user.cfg
user:root@pam:1:0::::::
user:test@pve:1:0::::::
user:testuser@pve:1:0::::Just a test::
user:user@pam:1:0::::::
group:admin:user@pam::
group:testgroup:test@pve::
Таблица 45.1. Привилегии используемые в PVE
Привилегия
|
Описание
|
---|---|
Привилегии узла/системы
|
|
Permissions.Modify
|
Изменение прав доступа
|
Sys.PowerMgmt
|
Управление питанием узла (запуск, остановка, сброс, выключение)
|
Sys.Console
|
Консольный доступ к узлу
|
Sys.Syslog
|
Просмотр Syslog
|
Sys.Audit
|
Просмотр состояния/конфигурации узла, конфигурации кластера Corosync и конфигурации HA
|
Sys.Modify
|
Создание/удаление/изменение параметров сети узла
|
Group.Allocate
|
Создание/удаление/изменение групп
|
Pool.Allocate
|
Создание/удаление/изменение пулов
|
Realm.Allocate
|
Создание/удаление/изменение областей аутентификации
|
Realm.AllocateUser
|
Назначение пользователю области аутентификации
|
User.Modify
|
Создание/удаление/изменение пользователя
|
Права, связанные с ВМ
|
|
VM.Allocate
|
Создание/удаление ВМ
|
VM.Migrate
|
Миграция ВМ на альтернативный сервер в кластере
|
VM.PowerMgmt
|
Управление питанием (запуск, остановка, сброс, выключение)
|
VM.Console
|
Консольный доступ к ВМ
|
VM.Monitor
|
Доступ к монитору виртуальной машины (kvm)
|
VM.Backup
|
Резервное копирование/восстановление ВМ
|
VM.Audit
|
Просмотр конфигурации ВМ
|
VM.Clone
|
Добавление/изменение/удаление дисков ВМ
|
VM.Config.Disk
|
Создание/удаление/изменение областей аутентификации
|
VM.Config.CDROM
|
Извлечь/изменить CDROM
|
VM.Config.CPU
|
Изменение настроек процессора
|
VM.Config.Memory
|
Изменение настроек памяти
|
VM.Config.Network
|
Добавление/изменение/удаление сетевых устройств
|
VM.Config.HWType
|
Изменение типа эмуляции
|
VM.Config.Options
|
Изменение любой другой конфигурации ВМ
|
VM.Snapshot
|
Создание/удаление снимков ВМ
|
Права, связанные с хранилищем
|
|
Datastore.Allocate
|
Создание/удаление/изменение хранилища данных
|
Datastore.AllocateSpace
|
Выделить место в хранилище
|
Datastore.AllocateTemplate
|
Размещение/загрузка шаблонов контейнеров и ISO-образов
|
Datastore.Audit
|
Просмотр хранилища данных
|
/nodes/<node>
— доступ к серверам PVE;
/vms
— все ВМ;
/vms/<vmid>
— доступ к определенным ВМ;
/storage/<storeid>
— доступ к хранилищам;
/access/groups
— администрирование групп;
/access/realms/<realmid>
— административный доступ.
# pveum useradd testuser@pve -comment "Just a test"
# pveum passwd testuser@pve
# pveum usermod testuser@pve -enable 0
# pveum groupadd testgroup
# pveum roleadd PVE_Power-only -privs "VM.PowerMgmt VM.Console"
virt-install
, virt-clone
, virsh
и других. Для управления из графической оболочки можно воспользоваться virt-manager
.
Содержание
Примечание
Примечание
#apt-get update
#apt-get install libvirt-kvm virt-install
# systemctl enable --now libvirtd
# gpasswd -a user vmusers
/etc/libvirt/
— каталог с файлами конфигурации libvirt;
/var/lib/libvirt/
— рабочий каталог сервера виртуализации libvirt;
/var/log/libvirt
— файлы журналов libvirt.
qemu-img
— управление образами дисков ВМ. Позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают;
virsh
— консольный интерфейс управления ВМ, виртуальными дисками и виртуальными сетями;
virt-clone
— клонирование ВМ;
virt-convert
— конвертирования ВМ между различными форматами и программно-аппаратными платформами;
virt-image
— создание ВМ по их XML описанию;
virt-install
— создание ВМ с помощью опций командной строки;
virt-xml
— редактирование XML-файлов описаний ВМ.
virsh
— утилита для командной строки, предназначенная для управления ВМ и гипервизорами KVM.
virsh
использует libvirt API и служит альтернативой графическому менеджеру виртуальных машин (virt-manager
).
virsh
можно сохранять состояние ВМ, переносить ВМ между гипервизорами и управлять виртуальными сетями.
virsh
, можно используя команду:
$ virsh help
Таблица 47.1. Утилита командной строки virsh. Команды управления виртуальными машинами
Команда
|
Описание
|
---|---|
help
|
Краткая справка
|
list
|
Просмотр всех ВМ
|
dumpxml
|
Вывести файл конфигурации XML для заданной ВМ
|
create
|
Создать ВМ из файла конфигурации XML и ее запуск
|
start
|
Запустить неактивную ВМ
|
destroy
|
Принудительно остановить работу ВМ
|
define
|
Определяет файл конфигурации XML для заданной ВМ
|
domid
|
Просмотр идентификатора ВМ
|
domuuid
|
Просмотр UUID ВМ
|
dominfo
|
Просмотр сведений о ВМ
|
domname
|
Просмотр имени ВМ
|
domstate
|
Просмотр состояния ВМ
|
quit
|
Закрыть интерактивный терминал
|
reboot
|
Перезагрузить ВМ
|
restore
|
Восстановить сохраненную в файле ВМ
|
resume
|
Возобновить работу приостановленной ВМ
|
save
|
Сохранить состояние ВМ в файл
|
shutdown
|
Корректно завершить работу ВМ
|
suspend
|
Приостановить работу ВМ
|
undefine
|
Удалить все файлы ВМ
|
migrate
|
Перенести ВМ на другой узел
|
Таблица 47.2. Утилита командной строки virsh. Параметры управления ресурсами ВМ и гипервизора
Команда
|
Описание
|
---|---|
setmem
|
Определяет размер выделенной ВМ памяти
|
setmaxmem
|
Ограничивает максимально доступный гипервизору объем памяти
|
setvcpus
|
Изменяет число предоставленных ВМ виртуальных процессоров
|
vcpuinfo
|
Просмотр информации о виртуальных процессорах
|
vcpupin
|
Настройка соответствий виртуальных процессоров
|
domblkstat
|
Просмотр статистики блочных устройств для работающей ВМ
|
domifstat
|
Просмотр статистики сетевых интерфейсов для работающей ВМ
|
attach-device
|
Подключить определенное в XML-файле устройство к ВМ
|
attach-disk
|
Подключить новое дисковое устройство к ВМ
|
attach-interface
|
Подключить новый сетевой интерфейс к ВМ
|
detach-device
|
Отключить устройство от ВМ (принимает те же определения XML, что и attach-device)
|
detach-disk
|
Отключить дисковое устройство от ВМ
|
detach-interface
|
Отключить сетевой интерфейс от ВМ
|
virt-install
— это инструмент для создания ВМ, основанный на командной строке.
virt-install
можно получить, выполнив команду:
$ man virt-install
Таблица 47.3. Параметры команды virt-install
Команда
|
Описание
|
---|---|
-n NAME, --name=NAME
|
Имя новой ВМ. Это имя должно быть уникально внутри одного гипервизора
|
--memory MEMORY
|
Определяет размер выделенной ВМ памяти (в МБ)
|
--vcpus VCPUS
|
Определяет количество виртуальных ЦПУ. Например:
|
--cpu CPU
|
Модель ЦП и его характеристики. Например:
|
--metadata METADATA
|
Метаданные ВМ
|
Метод установки
|
|
--cdrom CDROM
|
Установочный CD-ROM. Может указывать на файл ISO-образа или на устройство чтения CD/DVD-дисков
|
-l LOCATION, --location LOCATION
|
Источник установки, например,
https://host/path
|
--pxe
|
Выполнить загрузку из сети используя протокол PXE
|
--import
|
Пропустить установку ОС, и создать ВМ на основе существующего образа диска
|
--boot BOOT
|
Параметры загрузки ВМ. Например:
|
--os-type=DISTRO_TYPE
|
Оптимизирует настройки ВМ для заданного типа ОС
|
--os-variant=DISTRO_VARIANT
|
Дополнительная оптимизация ВМ для конкретного варианта ОС
|
--disk DISK
|
Настройка пространства хранения данных. Например:
|
-w NETWORK, --network NETWORK
|
Конфигурация сетевого интерфейса ВМ. Например:
|
--graphics GRAPHICS
|
Настройки экрана ВМ. Например:
|
--input INPUT
|
Конфигурация устройства ввода. Например:
|
--hostdev HOSTDEV
|
Конфигурация физических USB/PCI и других устройств хоста для совместного использования ВМ
|
-filesystem FILESYSTEM
|
Передача каталога хоста гостевой системе. Например:
|
Параметры платформы виртуализации
|
|
-v, --hvm
|
Эта ВМ должна быть полностью виртуализированной
|
-p, --paravirt
|
Эта ВМ должна быть паравиртуализированной
|
--container
|
Тип ВМ — контейнер
|
--virt-type VIRT_TYPE
|
Тип гипервизора (kvm, qemu и т.п.)
|
--arch ARCH
|
Имитируемая архитектура процессора
|
--machine MACHINE
|
Имитируемый тип компьютера
|
Прочие параметры
|
|
--autostart
|
Запускать домен автоматически при запуске хоста
|
--transient
|
Создать временный домен
|
--noautoconsole
|
Не подключаться к гостевой консоли автоматически
|
-q, --quiet
|
Подавлять вывод (за исключением ошибок)
|
-d, --debug
|
Вывести отладочные данные
|
virt-install
.
virt-install
поддерживает как графическую установку операционных систем при помощи VNC и Spice, так и текстовую установку через последовательный порт. Гостевая система может быть настроена на использование нескольких дисков, сетевых интерфейсов, аудиоустройств и физических USB- и PCI-устройств.
virt-install
получает минимальный набор файлов для запуска установки и позволяет установщику получить отдельные файлы. Также поддерживается загрузка по сети (PXE) и создание виртуальной машины/контейнера без этапа установки ОС или загрузка по сети предустановленной системы.
virt-install
поддерживает большое число опции, позволяющих создать полностью независимую ВМ, готовую к работе, что хорошо подходит для автоматизации установки ВМ.
qemu-img
— инструмент для манипулирования с образами дисков машин QEMU.
qemu-img [standard options] command [command options]
create
— создание нового образа диска;
check
— проверка образа диска на ошибки;
convert
— конвертация существующего образа диска в другой формат;
info
— получение информации о существующем образе диска;
snapshot
— управляет снимками состояний (snapshot) существующих образов дисков;
commit
— записывает произведенные изменения на существующий образ диска;
rebase
— создает новый базовый образ на основании существующего.
qemu-img
работает со следующими форматами:
qemu-img info
или ls -ls
;
# qemu-img info /var/lib/libvirt/images/alt-server.qcow2
mage: /var/lib/libvirt/images/alt-server.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 3.32 MiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
# qemu-img create -f qcow2 /var/lib/libvirt/images/hdd.qcow2 20G
# qemu-img convert -f raw -O qcow2 disk_hd.img disk_hd.qcow2
virt-manager
предоставляет графический интерфейс для доступа к гипервизорам и ВМ в локальной и удаленных системах. С помощью virt-manager
можно создавать ВМ. Кроме того, virt-manager
выполняет управляющие функции:
Примечание
$где 192.168.0.147 — IP-адрес сервера с libvirt.ssh-keygen -t ed25519
$ssh-copy-id user@192.168.0.147
virsh -c URI
URI
не задан, то libvirt попытается определить наиболее подходящий гипервизор.
URI
может принимать следующие значения:
$ virsh -c qemu:///system list --all
ID Имя Состояние
------------------------------
- alt-server выключен
Примечание
-c qemu:///system
можно добавить:
export LIBVIRT_DEFAULT_URI=qemu:///system
$ virsh -c qemu+ssh://user@192.168.0.147/system
Добро пожаловать в virsh — интерактивный терминал виртуализации.
Введите «help» для получения справки по командам
«quit», чтобы завершить работу и выйти.
virsh #
где:
virt-manager
, выполнив следующую команду:
$ virt-manager -c qemu+ssh://user@192.168.0.147/system
где:
virsh
и virt-install
или из пользовательского интерфейса программы virt-manager.
$ virsh create guest.xml
Domain 'altK' created from guest.xml
dumpxml
:
virsh dumpxml <domain>
guest.xml
:
$ virsh -c qemu:///system dumpxml alt-server > guest.xml
Примечание
--name
, --ram
, хранилище (--disk
, --filesystem
или --nodisks
) и опции установки.
virt-install
, необходимо сначала загрузить ISO-образ той ОС, которая будет устанавливаться.
# virt-install
--connect qemu:///system
--name alt-server \
--os-type=linux \
--os-variant=alt9.1 \
--cdrom /var/lib/libvirt/boot/alt-server-10.0-x86_64.iso \
--graphics vnc\
--disk pool=default,size=20,bus=virtio,format=qcow2 \
--ram 2048 \
--vcpus=2 \
--network network=default \
--hvm \
--virt-type=kvm
где:
--name alt-server
— название ВМ;
--os-type=linux
— тип ОС;
--os-variant=alt.p10
— версия ОС;
--cdrom /var/lib/libvirt/boot/alt-server-10.0-x86_64.iso
— путь к ISO-образу установочного диска ОС;
--graphics vnc
— графическая консоль;
--disk pool=default,size=20,bus=virtio,format=qcow2
— хранилище. ВМ будет создана в пространстве хранения объемом 20 ГБ, которое автоматически выделяется из пула хранилищ default. Образ диска для этой виртуальной машины будет создан в формате qcow2;
--ram 2048
— объем оперативной памяти;
--vcpus=2
— количество процессоров;
--network network=default
— виртуальная сеть default;
--hvm
— полностью виртуализированная система;
--virt-type=kvm
— использовать модуль ядра KVM, который задействует аппаратные возможности виртуализации процессора.
virt-install
оптимизируют ВМ для использования в качестве полностью виртуализированной системы (--hvm
) и указывают, что KVM является базовым гипервизором (--virt-type
) для поддержки новой ВМ. Обе этих опции обеспечивают определенную оптимизацию в процессе создания и установки операционной системы; если эти опции не заданы в явном виде, то вышеуказанные значения применяются по умолчанию.
$ osinfo-query os
# virt-install
\
--hvm \
--name demo \
--ram 500 \
--nodisks \
--livecd \
--graphics vnc \
--cdrom /var/lib/libvirt/boot/altlive.iso
/usr/bin/httpd
в контейнере (LXC), с ограничением памяти в 512 МБ и двумя ядрами хост-системы:
# virt-install
\
--connect lxc:/// \
--name httpd_guest \
--ram 512 \
--vcpus 2 \
--init /usr/bin/httpd
# virt-install
\
--name demo \
--ram 512 \
--disk /home/user/VMs/mydisk.img \
--import
start
— запуск ВМ;
shutdown
— завершение работы. Поведение выключаемой ВМ можно контролировать с помощью параметра on_shutdown
(в файле конфигурации);
destroy
— принудительная остановка. Использование virsh destroy
может повредить гостевые файловые системы. Рекомендуется использовать опцию shutdown
;
reboot
— перезагрузка ВМ. Поведение перезагружаемой ВМ можно контролировать с помощью параметра on_reboot
(в файле конфигурации);
suspend
— приостановить ВМ. Когда ВМ находится в приостановленном состоянии, она потребляет системную оперативную память, но не ресурсы процессора;
resume
— возобновить работу приостановленной ВМ;
save
— сохранение текущего состояния ВМ. Эта команда останавливает ВМ, сохраняет данные в файл, что может занять некоторое время (зависит от объема ОЗУ ВМ);
restore
— восстановление ВМ, ранее сохраненной с помощью команды virsh save
. Сохраненная машина будет восстановлена из файла и перезапущена (это может занять некоторое время). Имя и идентификатор UUID ВМ останутся неизменными, но будет предоставлен новый идентификатор домена;
undefine
— удалить ВМ (конфигурационный файл тоже удаляется);
autostart
— добавить ВМ в автозагрузку;
autostart --disable
— удалить из автозагрузки;
#virsh destroy alt-server
#virsh undefine alt-server
# virsh edit alt-server
Добавить графический элемент SPICE, например:
<graphics type='spice' port='5900' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> </graphics>Добавить видеоустройство QXL:
<video> <model type='qxl'/> </video>
# virsh domdisplay alt-server
spice://127.0.0.1:5900
<graphics type='spice' port='5900' autoport='yes' listen='0.0.0.0' passwd='mypasswd'> <listen type='address' address='0.0.0.0'/> </graphics>
$virt-viewer -c qemu+ssh://user@192.168.0.147/system -d alt-server
$remote-viewer "spice://192.168.0.147:5900"
Примечание
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' passwd='mypasswd'> <listen type='address' address='0.0.0.0'/> </graphics>
# virsh domdisplay alt-server
vnc://localhost:0
$virt-viewer -c qemu+ssh://user@192.168.0.147/system -d alt-server
$vncviewer 192.168.0.147:5900
virsh edit
. Например, команда редактирования ВМ с именем alt-server:
# virsh edit alt-server
virsh dominfo <domain>
где [--domain] <строка>
— имя, ID или UUID домена.
virsh dominfo
:
# virsh dominfo alt-server
ID: 3
Имя: alt-server
UUID: ccb6bf9e-1f8d-448e-b5f7-fa274703500b
Тип ОС: hvm
Состояние: работает
CPU: 1
Время CPU: 702,1s
Макс.память: 1048576 KiB
Занято памяти: 1048576 KiB
Постоянство: yes
Автозапуск: выкл.
Управляемое сохранение: no
Модель безопасности: none
DOI безопасности: 0
# virsh nodeinfo
Модель процессора: x86_64
CPU: 4
Частота процессора: 1337 MHz
Сокеты: 1
Ядер на сокет: 2
Потоков на ядро: 2
Ячейки NUMA: 1
Объём памяти: 8007952 KiB
virsh list
virsh list
:
--inactive
— показать список неактивных доменов;
--all
— показать все ВМ независимо от их состояния.
virsh list
:
# virsh list --all
ID Имя Состояние
--------------------------
3 alt-server работает
virsh suspend
. В приостановленном состоянии ВМ продолжает потреблять ресурсы, но не может занимать больше процессорных ресурсов;
virsh vcpuinfo <domain>
# virsh vcpuinfo alt-server
Виртуальный процессор:: 0
CPU: 1
Состояние: работает
Время CPU: 572,8s
Соответствие ЦП: yyyy
virsh vcpupin <domain> [--vcpu <число>] [--cpulist <строка>] [--config] [--live] [--current]
Здесь:
[--domain] <строка>
— имя, ID или UUID домена;
--vcpu <число>
— номер виртуального процессора;
--cpulist <строка>
— номера физических процессоров. Если номера не указаны, команда вернет текущий список процессоров;
--config
— с сохранением после перезагрузки;
--live
— применить к работающему домену;
--current
— применить к текущему домену.
# virsh vcpupin alt-server
Виртуальный процессор: Соответствие ЦП
-------------------------------------------
0 0-3
virsh setvcpus <domain> <count> [--maximum] [--config] [--live] [--current] [--guest] [--hotpluggable]
где:
[--domain] <строка>
— имя, ID или UUID домена;
[--count] <число>
— число виртуальных процессоров;
--maximum
— установить максимальное ограничение на количество виртуальных процессоров, которые могут быть подключены после следующей перезагрузки домена;
--guest
— состояние процессоров ограничивается гостевым доменом.
virsh setmem <domain> <size> [--config] [--live] [--current]
где:
[--domain] <строка>
— имя, ID или UUID домена;
[--size] <число>
— целое значение нового размера памяти (по умолчанию в КБ).
virsh setmaxmem <domain> <size> [--config] [--live] [--current]
где:
[--domain] <строка>
— имя, ID или UUID домена;
[--size] <число>
— целое значение максимально допустимого размера памяти (по умолчанию в КБ).
#virsh setmaxmem --size 624000 alt-server
#virsh setmem --size 52240 alt-server
#virsh setvcpus --config alt-server 3 --maximum
virsh domblkstat <domain> [--device <строка>] [--human]
где:
[--domain] <строка>
— имя, ID или UUID домена;
--device <строка>
— блочное устройство;
--human
— форматировать вывод.
virsh domifstat <domain> <interface>
где:
[--domain] <строка>
— имя, ID или UUID домена;
[--interface] <строка>
— устройство интерфейса, указанное по имени или MAC-адресу.
virsh net-autostart имя_сети
— автоматический запуск заданной сети;
virsh net-autostart имя_сети --disable
— отключить автозапуск заданной сети;
virsh net-create файл_XML
— создание и запуск новой сети на основе существующего XML-файла;
virsh net-define файл_XML
— создание нового сетевого устройства на основе существующего XML-файла (устройство не будет запущено);
virsh net-list
— просмотр списка виртуальных сетей;
virsh net-dumpxml имя_сети
—просмотр информации о заданной виртуальной сети;
virsh net-destroy имя_сети
— удаление заданной сети;
virsh net-name UUID_сети
— преобразование заданного идентификатора в имя сети;
virsh net-uuid имя_сети
— преобразование заданного имени в идентификатор UUID;
virsh net-update имя_сети
— обновить существующую конфигурацию сети;
virsh net-start имя_неактивной_сети
— запуск неактивной сети;
virsh net-undefine имя_неактивной_сети
— удаление определения неактивной сети.
#virsh net-list --all
Имя Состояние Автозапуск Постоянный ------------------------------------------------- default не активен no yes #virsh net-start default
Сеть default запущена #virsh net-autostart default
Добавлена метка автоматического запуска сети default #virsh net-list
Имя Состояние Автозапуск Постоянный ------------------------------------------------ default активен yes yes #virsh net-dumpxml default
<network> <name>default</name> <uuid>0b37eff3-2234-4929-8a42-04a9cf35d3aa</uuid> <forward mode='nat' /> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:3e:12:c7'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network>
# virsh dumpxml alt-server | grep 'mac address'
<mac address='52:54:00:ba:f2:76'/>
# virsh net-edit default
<range start='192.168.122.2' end='192.168.122.254'/>Вставить строки с MAC-адресами виртуальных адаптеров:
<host mac='52:54:00:ba:f2:76' name='alt-server' ip='192.168.122.50'/>
#virsh net-destroy default
#virsh net-start default
virsh net-edit
не вступят в силу в силу до тех пор, пока сеть не будет перезапущена, что приведет к потере всеми ВМ сетевого подключения к хосту до тех пор, пока их сетевые интерфейсы повторно не подключаться.
virsh net-update
, которая требует немедленного применения изменений. Например, чтобы добавить запись статического хоста, можно использовать команду:
# virsh net-update
default add ip-dhcp-host \
"<host mac='52:54:00:ba:f2:76' name='alt-server' ip='192.168.122.50' />" \
--live --config
/var/lib/libvirt/images
на хосте виртуализации.
Таблица 51.1. Утилита командной строки virsh. Команды управления хранилищами
Команда
|
Описание
|
---|---|
pool-define
|
Определить неактивный постоянный пул носителей на основе файла XML
|
pool-create
|
Создать пул из файла XML
|
pool-define-as
|
Определить пул на основе набора аргументов
|
pool-create-as
|
Создать пул на основе набора аргументов
|
pool-dumpxml
|
Вывести файл конфигурации XML для заданного пула
|
pool-list
|
Вывести список пулов
|
pool-build
|
Собрать пул
|
pool-start
|
Запустить ранее определённый неактивный пул
|
pool-autostart
|
Автозапуск пула
|
pool-destroy
|
Разрушить (остановить) пул
|
pool-delete
|
Удалить пул
|
pool-edit
|
Редактировать XML-конфигурацию пула носителей
|
pool-info
|
Просмотр информации о пуле носителей
|
pool-refresh
|
Обновить пул
|
pool-undefine
|
Удалить определение неактивного пула
|
virsh pool-define-as
создаст файл конфигурации для постоянного пула хранения. Позже этот пул можно запустить командой virsh pool-start
, настроить его на автоматический запуск при загрузке хоста, остановить командой virsh pool-destroy
.
virsh pool-create-as
создаст временный пул хранения (файл конфигурации не будет создан), который будет сразу запущен. Этот пул хранения будет удалён командой virsh pool-destory
. Временный пул хранения нельзя запустить автоматически при загрузке. Преобразовать существующий временный пул в постоянный, можно создав файл XML-описания:
virsh pool-dumpxml имя_пула > имя_пула.xml && virsh pool-define имя_пула.xml
# virsh pool-create-as
NFS-POOL netfs \
--source-host 192.168.0.105 \
--source-path /export/storage \
--target /var/lib/libvirt/images/NFS-POOL
Пул NFS-POOL создан
--source-host
идентифицирует хост, который экспортирует каталог пула хранилищ посредством NFS. Аргумент опции --source-path
определяет имя экспортируемого каталога на этом хосте. Аргумент опции --target
идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ (этот каталог должен существовать).
Примечание
# systemctl enable --now nfs-client.target
virsh pool-list
:
# virsh pool-list --all --details
Имя Состояние Автозапуск Постоянный Размер Распределение Доступно
-----------------------------------------------------------------------------------------
default работает yes yes 69,12 GiB 485,35 MiB 68,65 GiB
NFS-POOL работает no no 29,40 GiB 7,26 GiB 22,14 GiB
Автозапуск
(Autostart
) для пула хранилищ NFS-POOL имеет значение no
(нет
), т. е. после перезапуска системы этот пул не будет автоматически доступен для использования, и что опция Постоянный
(Persistent
) также имеет значение no
, т. е. после перезапуска системы этот пул вообще не будет определен. Пул хранилищ является постоянным только в том случае, если он сопровождается XML-описанием пула хранилищ, которое находится в каталоге /etc/libvirt/storage
. XML-файл описания пула имеет такое же имя, как у пула хранилищ, с которым он ассоциирован.
virsh pool-dumpxml
, указав в качестве ее заключительного аргумента имя пула, для которого нужно получить XML-описание. Эта команда осуществляет запись в стандартное устройство вывода, поэтому необходимо перенаправить ее выходную информацию в соответствующий файл.
# virsh pool-dumpxml NFS-POOL > NFS-POOL.xml && virsh pool-define NFS-POOL.xml
Пул NFS-POOL определён на основе NFS-POOL.xml
Автозапуск
(Autostart
), можно воспользоваться командой virsh pool-autostart
:
# virsh pool-autostart NFS-POOL
Добавлена метка автоматического запуска пула NFS-POOL
/etc/libvirt/storage/autostart
будет содержать символьную ссылку на XML-описание этого пула хранилищ).
#virsh pool-define-as boot --type dir --target /var/lib/libvirt/boot
Пул boot определён #virsh pool-list --all
Имя Состояние Автозапуск ------------------------------------- boot не активен no default активен yes NFS-POOL активен yes #virsh pool-build boot
Пул boot собран #virsh pool-start boot
Пул boot запущен #virsh pool-autostart boot
Добавлена метка автоматического запуска пула boot #virsh pool-list --all
Имя Состояние Автозапуск ------------------------------------- boot активен yes default активен yes NFS-POOL активен yes
# virsh pool-create-as
--name iscsi_virtimages --type iscsi \
--source-host 192.168.0.146 \
--source-dev iqn.2021-05.alt.test:iscsi.target1 \
--target /dev/disk/by-path
Пул iscsi_virtimages создан
--source-host
определяет имя хоста соответствующего сервера iSCSI, который экспортирует данный iSCSI LUN. Аргумент опции --source-dev
определяет название iSCSI LUN. Аргумент опции --target
идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ.
Примечание
# systemctl enable --now iscsid
Примечание
--copy-storage-all
). Но это приведет к большому трафику при копировании образа ВМ между серверами виртуализации и к заметному простою сервиса. Что бы миграция была по-настоящему «живой» с незаметным простоем необходимо использовать общее хранилище.
virsh
. Для выполнения живой миграции нужно указать параметр --live
. Команда переноса:
# virsh migrate --live VMName DestinationURL
где
virsh
, необходимо выполнить следующие действия:
# virsh list
ID Имя Состояние
------------------------------
7 alt-server работает
# virsh migrate --live alt-server qemu+ssh://192.168.0.190/system
virsh
будет сообщать только об ошибках. ВМ будет продолжать работу на исходном узле до завершения переноса;
# virsh list
virsh
:
# virsh migrate
--live --persistent --undefinesource \
alt-server qemu+ssh://192.168.0.190/system
Примечание
# virsh snapshot-create <domain> [--xmlfile <строка>] [--disk-only] [--live]...
# virsh snapshot-create-as <domain> [--name <строка>] [--disk-only] [--live]...
# virsh snapshot-create-as --domain alt-server --name alt-server-17dec2021
Снимок домена alt-server-17dec2021 создан
где
/var/lib/libvirt/qemu/snapshot/
.
# virsh snapshot-create-as --domain alt-server --name 05dec2021 -diskspec vda,file=/var/lib/libvirt/images/sn1.qcow2 --disk-only --atomic
Снимок домена 05dec2021 создан
# virsh snapshot-list --domain alt-server
Имя Время создания Состояние
-------------------------------------------------------------------
05dec2021 2021-12-17 09:47:24 +0200 disk-snapshot
alt-server-17dec2021 2021-12-17 09:45:29 +0200 running
# virsh snapshot-revert --domain alt-server --snapshotname 05dec2021 –running
# virsh snapshot-delete --domain alt-server --snapshotname 05dec2021
/etc/libvirt/libvirtd.conf
. Логи сохраняются в каталоге /var/log/libvirt
.
x:name (log message only) x:+name (log message + stack trace)где
log_filtrers="3:remote 4:event"
log_outputs=”3:syslog:libvirtd 1:file:/tmp/libvirt.log”
/var/log/libvirt/qemu/
. В этом каталоге libvirt хранит журнал для каждой ВМ. Например, для машины alt-server журнал будет находиться по адресу: /var/log/libvirt/qemu/alt-server.log
.
/usr/share/polkit-1/actions/
имеются два файла с описанием возможных действий для работы с ВМ, предоставленные разработчиками libvirt:
org.libvirt.unix.policy
описывает мониторинг ВМ и управление ими;
org.libvirt.api.policy
перечислены конкретные действия (остановка, перезапуск и т. д.), которые возможны, если предыдущая проверка пройдена.
/usr/share/polkit-1/actions/org.libvirt.api.policy
.
org.libvirt.api.$объект.$разрешение
search-storage-vols
на объекте storage_pool
отображено к действию polkit:
org.libvirt.api.storage-pool.search-storage-vols
/etc/libvirt/libvirtd.conf
строку:
access_drivers = [ "polkit" ]
systemctl restart libvirtd
/etc/polkit-1/rules.d/100-libvirt-acl.rules
(имя произвольно) следующего вида:
========================== polkit.addRule(function(action, subject) { // разрешить пользователю test действия с доменом "alt1" if (action.id.indexOf("org.libvirt.api.domain.") ==0 && subject.user == "test") { if (action.lookup("domain_name") == 'alt1') { return polkit.Result.YES; } else { return polkit.Result.NO; } } else { // разрешить пользователю test действия с //подключениями, хранилищем и прочим if (action.id.indexOf("org.libvirt.api.") == 0 && subject.user == "test") { polkit.log("org.libvirt.api.Yes"); return polkit.Result.YES; } else { return polkit.Result.NO; } } }) ================================
org.libvirt.api.domain.start
:
========================== polkit.addRule(function(action, subject) { // разрешить пользователю test только запускать ВМ в // домене "alt1" if (action.id. == "org.libvirt.api.domain.start") && subject.user == "test") { if (action.lookup("domain_name") == 'alt1') { return polkit.Result.YES; } else { return polkit.Result.NO; } } }); ==========================
if (action.id == "org.libvirt.api.domain.start") { if (subject.isInGroup("wheel")) { return polkit.Result.YES; } else { return polkit.Result.NO; } };
if (action.id == "org.libvirt.api.domain.stop") { if (subject.isInGroup("wheel")) { return polkit.Result.YES; } else { return polkit.Result.NO; } };
if (action.id.match("org.libvirt.api.domain.start")) { polkit.log("action=" + action); polkit.log("subject=" + subject); return polkit.Result.YES; }
if (action.id.match("org.libvirt.api.domain.stop")) { polkit.log("action=" + action); polkit.log("subject=" + subject); return polkit.Result.YES; }
kubectl
— создание и настройка объектов в кластере;
kubelet
— запуск контейнеров на узлах;
kubeadm
— настройка компонентов, составляющие кластер.
Примечание
Примечание
Примечание
# swapoff -a
И удалить соответствующую строку в /etc/fstab
.
# kubeadm init --pod-network-cidr=10.244.0.0/16
# kubeadm init --pod-network-cidr=10.168.0.0/16
… Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.102:6443 --token rcbuiz.o0brh8chmu0i7ljw \ --discovery-token-ca-cert-hash \ sha256:b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce
~/.kube
(с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf ~<пользователь>/.kube/config
# chown <пользователь>: ~<пользователь>/.kube/config
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
$kubectl apply -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
$kubectl apply -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
$ kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-5rgmk 1/1 Running 0 38m
coredns-74ff55c5b-wjq4r 1/1 Running 0 38m
etcd-kube01 1/1 Running 0 37m
kube-apiserver-kube01 1/1 Running 0 37m
kube-controller-manager-kube01 1/1 Running 0 37m
kube-flannel-ds-2gl6g 1/1 Running 0 92s
kube-proxy-tjmjt 1/1 Running 0 38m
kube-scheduler-kube01 1/1 Running 0 37m
coredns должны находиться в состоянии Running. Количество kube-flannel и kube-proxy зависит от общего числа нод.
kubeadm
join <ip адрес>:<порт> --token <токен>
--discovery-token-ca-cert-hash sha256:<хэш> --ignore-preflight-errors=SystemVerification
Данная команда была выведена при выполнении команды kubeadm init
на мастер-ноде.
# kubeadm
join 192.168.0.102:6443 --token rcbuiz.o0brh8chmu0i7ljw \
--discovery-token-ca-cert-hash \
sha256:b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
Примечание
$ kubeadm token list
TOKEN TTL EXPIRES USAGES
rcbuiz.o0brh8chmu0i7ljw 22h 2021-12-18T11:49:53Z authentication,signing
По умолчанию, срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен:
$ kubeadm token create
--discovery-token-ca-cert-hash
неизвестно, его можно получить, выполнив команду (на мастер-ноде):
$ openssl x509
-pubkey -in /etc/kubernetes/pki/ca.crt | \
openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
b80186633ae51261c29ed4f5c2da68907b1e344f48a52022de413b3bd24191ce
<control-plane-host>:<control-plane-port>
, адрес должен быть заключен в квадратные скобки:
[fd00::101]:2073
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready control-plane,master 42m v1.22.5
kube02 Ready <none> 2m43s v1.22.5
kube03 Ready <none> 24s v1.22.5
или
$ kubectl get nodes -o wide
$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.102:6443
CoreDNS is running at https://192.168.0.102:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Посмотреть подробную информацию о ноде:
$ kubectl describe node kube03
$ kubectl apply -f https://k8s.io/examples/application/deployment.yaml
deployment.apps/nginx-deployment created
nginx-service.yaml
, со следующим содержимым:
apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: type: NodePort ports: - port: 80 targetPort: 80 selector: app: nginxЗапустить новый сервис:
$ kubectl apply -f nginx-service.yaml
service/nginx created
$ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.98.167.146 <none> 80:31868/TCP 17s
curl -I <ip адрес>:<порт>
где <ip адрес> — это IP-адрес любой из нод (не мастер-ноды), а <порт> — это порт сервиса, полученный с помощью предыдущей команды. В данном кластере возможна команда:
$ curl -I 192.168.0.102:31868
HTTP/1.1 200 OK
Server: nginx/1.14.2
kubeadm init
и kubeadm join --control-plane
.
Примечание
# kubeadm init --control-plane-endpoint 192.168.0.201:6443 --upload-certs --pod-network-cidr=10.244.0.0/16
где
--control-plane-endpoint
— указывает адрес и порт балансировщика нагрузки;
--upload-certs
— используется для загрузки в кластер сертификатов, которые должны быть общими для всех управляющих узлов;
--pod-network-cidr=10.244.0.0/16
— адрес внутренней (разворачиваемой Kubernetes) сети, рекомендуется оставить данное значение для правильной работы Flannel.
… Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of the control-plane node running the following command on each as root: kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \ --discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184 \ --control-plane --certificate-key e0cbf1dc4e282bf517e23887dace30b411cd739b1aab037b056f0c23e5b0a222 Please note that the certificate-key gives access to cluster sensitive data, keep it secret! As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use "kubeadm init phase upload-certs --upload-certs" to reload certs afterward. Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \ --discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184
~/.kube
(с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf ~<пользователь>/.kube/config
# chown <пользователь>: ~<пользователь>/.kube/config
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
$ kubectl get pod -n kube-system -w
NAME READY STATUS RESTARTS AGE
coredns-78fcd69978-c5swn 0/1 ContainerCreating 0 11m
coredns-78fcd69978-zdbp8 0/1 ContainerCreating 0 11m
etcd-master01 1/1 Running 0 11m
kube-apiserver-master01 1/1 Running 0 11m
kube-controller-manager-master01 1/1 Running 0 11m
kube-flannel-ds-qfzbw 1/1 Running 0 116s
kube-proxy-r6kj9 1/1 Running 0 11m
kube-scheduler-master01 1/1 Running 0 11m
kubeadm init
на первом управляющем узле):
# kubeadm
join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184 \
--control-plane --certificate-key e0cbf1dc4e282bf517e23887dace30b411cd739b1aab037b056f0c23e5b0a222
kubeadm init
на первом управляющем узле):
# kubeadm
join 192.168.0.201:6443 --token cvvui8.lz82ufip6cz89ar9 \
--discovery-token-ca-cert-hash sha256:3ee0c550746a4a8e0abb6b59311f0fc301cdfeec00af8b26ed4598116c4d8184
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube01 Ready <none> 23m v1.22.5
kube02 Ready <none> 15m v1.22.5
kube03 Ready <none> 2m30s v1.22.5
master01 Ready control-plane,master 82m v1.22.5
master02 Ready control-plane,master 66m v1.22.5
master03 Ready control-plane,master 39m v1.22.5
Примечание
#cat
>> EOF < /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf Service] ExecStart= # Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs". # Replace the value of "--container-runtime-endpoint" for a different container runtime if needed. ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd --container-runtime=remote --container-runtime-endpoint=unix:///var/run/crio/crio.sock Restart=always EOF #systemctl daemon-reload
#systemctl restart kubelet
# systemctl status kubelet
#!/bin/sh # HOST0, HOST1, и HOST2 - IP-адреса узлов export HOST0=192.168.0.205 export HOST1=192.168.0.206 export HOST2=192.168.0.207 # NAME0, NAME1 и NAME2 - имена узлов export NAME0="etc01" export NAME1="etc02" export NAME2="etc03" # Создать временные каталоги mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/ HOSTS=(${HOST0} ${HOST1} ${HOST2}) NAMES=(${NAME0} ${NAME1} ${NAME2}) for i in "${!HOSTS[@]}"; do HOST=${HOSTS[$i]} NAME=${NAMES[$i]} cat >> EOF < /tmp/${HOST}/kubeadmcfg.yaml --- apiVersion: "kubeadm.k8s.io/v1beta3" kind: InitConfiguration nodeRegistration: name: ${NAME} localAPIEndpoint: advertiseAddress: ${HOST} --- apiVersion: "kubeadm.k8s.io/v1beta3" kind: ClusterConfiguration etcd: local: serverCertSANs: - "${HOST}" peerCertSANs: - "${HOST}" extraArgs: initial-cluster: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380 initial-cluster-state: new name: ${NAME} listen-peer-urls: https://${HOST}:2380 listen-client-urls: https://${HOST}:2379 advertise-client-urls: https://${HOST}:2379 initial-advertise-peer-urls: https://${HOST}:2380 EOF done
Примечание
/etc/kubernetes/pki/etcd/ca.crt
и /etc/kubernetes/pki/etcd/ca.key
. После этого можно перейти к следующему шагу.
# kubeadm init phase certs etcd-ca
[certs] Generating "etcd/ca" certificate and key
Эта команда создаст два файла: /etc/kubernetes/pki/etcd/ca.crt
и /etc/kubernetes/pki/etcd/ca.key
.
#!/bin/sh # HOST0, HOST1, и HOST2 - IP-адреса узлов export HOST0=192.168.0.205 export HOST1=192.168.0.206 export HOST2=192.168.0.207 kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml cp -R /etc/kubernetes/pki /tmp/${HOST2}/ # cleanup non-reusable certificates find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml cp -R /etc/kubernetes/pki /tmp/${HOST1}/ find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml # No need to move the certs because they are for HOST0 # clean up certs that should not be copied off this host find /tmp/${HOST2} -name ca.key -type f -delete find /tmp/${HOST1} -name ca.key -type f -delete
HOST1=192.168.0.206 HOST2=192.168.0.207 USER=user #scp -r /tmp/${HOST1}/* ${USER}@${HOST1}:
#ssh ${USER}@${HOST1}
$su -
#chown -R root:root /home/user/pki
#mv /home/user/pki /etc/kubernetes/
#exit
$exit
#scp -r /tmp/${HOST2}/* ${USER}@${HOST2}:
#ssh ${USER}@${HOST2}
$su -
#chown -R root:root /home/user/pki
#mv /home/user/pki /etc/kubernetes/
#exit
$exit
/tmp/${HOST0} └── kubeadmcfg.yaml --- /etc/kubernetes/pki ├── apiserver-etcd-client.crt ├── apiserver-etcd-client.key └── etcd ├── ca.crt ├── ca.key ├── healthcheck-client.crt ├── healthcheck-client.key ├── peer.crt ├── peer.key ├── server.crt └── server.key
$HOME └── kubeadmcfg.yaml --- /etc/kubernetes/pki ├── apiserver-etcd-client.crt ├── apiserver-etcd-client.key └── etcd ├── ca.crt ├── healthcheck-client.crt ├── healthcheck-client.key ├── peer.crt ├── peer.key ├── server.crt └── server.key
$HOME └── kubeadmcfg.yaml --- /etc/kubernetes/pki ├── apiserver-etcd-client.crt ├── apiserver-etcd-client.key └── etcd ├── ca.crt ├── healthcheck-client.crt ├── healthcheck-client.key ├── peer.crt ├── peer.key ├── server.crt └── server.key
# kubeadm init phase etcd local –config=/tmp/192.168.0.205/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests
# kubeadm init phase etcd local --config=/home/user/kubeadmcfg.yaml
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
export CONTROL_PLANE="user@192.168.0.201" #scp /etc/kubernetes/pki/etcd/ca.crt "${CONTROL_PLANE}":
#scp /etc/kubernetes/pki/apiserver-etcd-client.crt "${CONTROL_PLANE}":
#scp /etc/kubernetes/pki/apiserver-etcd-client.key "${CONTROL_PLANE}":
kubeadm-config.yaml
:
--- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: stable networking: podSubnet: "10.244.0.0/16" controlPlaneEndpoint: "192.168.0.201:6443" # IP-адрес, порт балансировщика нагрузки etcd: external: endpoints: - https://192.168.0.205:2379 # IP-адрес ETCD01 - https://192.168.0.206:2379 # IP-адрес ETCD02 - https://192.168.0.207:2379 # IP-адрес ETCD03 caFile: /etc/kubernetes/pki/etcd/ca.crt certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
#mkdir -p /etc/kubernetes/pki/etcd/
#cp /home/user/ca.crt /etc/kubernetes/pki/etcd/
#cp /home/user/apiserver-etcd-client.* /etc/kubernetes/pki/
# kubeadm init --config kubeadm-config.yaml --upload-certs
…
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of the control-plane node running the following command on each as root:
kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3 \
--control-plane --certificate-key eb1fabf70e994c061f749f13c0f26baef64764e813d5f0eaa7b09d5279a492c4
Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3
Следует сохранить этот вывод, т.к. этот токен будет использоваться для присоединения к кластеру остальных управляющих и вычислительных узлов.
~/.kube
(с правами пользователя):
$ mkdir ~/.kube
# cp /etc/kubernetes/admin.conf ~<пользователь>/.kube/config
# chown <пользователь>: ~<пользователь>/.kube/config
$ kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
$ kubectl get pod -n kube-system -w
kubeadm init
на первом управляющем узле):
# kubeadm
join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3 \
--control-plane --certificate-key eb1fabf70e994c061f749f13c0f26baef64764e813d5f0eaa7b09d5279a492c4
kubeadm init
на первом управляющем узле):
# kubeadm
join 192.168.0.201:6443 --token 7onha1.afzqd41s8dzr1wj1 \
--discovery-token-ca-cert-hash sha256:ec2be69db54b2ae13c175765ddd058801fd70054508c0e118020896a1d4c9ec3
$ kubectl get nodes
Содержание
systemctl enable --now ahttpd
systemctl enable --now alteratord
https://ip-адрес:8080/
.
192.168.0.122
, то интерфейс управления будет доступен по адресу: https://192.168.0.122:8080/
.
Примечание
$
ip
addr
inet
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 60:eb:69:6c:ef:47 brd ff:ff:ff:ff:ff:ff inet 192.168.0.122/24 brd 192.168.0.255 scope global enp0s3
192.168.0.122
.
Предупреждение
Примечание
Важно
Примечание
Примечание
/root
).
usrquota
, grpquota
. Для этого следует выбрать нужный раздел в списке Файловая система и установить отметку в поле Включено:
Примечание
# apt-get install state-change-notify-postfix
Tue Dec 7 16:55:31 EET 2021: The host-15.test.alt is about to start.При выключении:
Tue Dec 7 16:55:02 EET 2021: The host-15.test.alt is about to shutdown.
rpm -qa | grep alterator*
Прочие пакеты для ЦУС можно найти, выполнив команду:
apt-cache search alterator*
#apt-get install alterator-net-openvpn
#apt-get remove alterator-net-openvpn
Содержание
apt-get
. Она автоматически определяет зависимости между пакетами и строго следит за её соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.
Важно
/etc/apt/sources.list
, либо в любой файл .list
(например, mysources.list
) в каталоге /etc/apt/sources.list.d/
. Описания репозиториев заносятся в эти файлы в следующем виде:
rpm [подпись] метод:путь база название rpm-src [подпись] метод:путь база названиеЗдесь:
/etc/apt/vendor.list
;
/etc/apt/sources.list.d/*.list
обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.
sources.list
, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update
.
sources.list
присутствует репозиторий, содержимое которого может изменяться (например, постоянно разрабатываемый репозиторий или репозиторий обновлений по безопасности), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update
. Локальная база данных создаётся заново при каждом изменении в репозитории: добавлении, удалении или переименовании пакета.
/etc/apt/sources.list
, относящиеся к ресурсам в сети Интернет.
apt-repo
:
apt-repo
apt-repo add репозиторий
apt-repo rm репозиторий
apt-repo update
apt-repo
:
man apt-repo
или
apt-repo --help
Примечание
#Или то же самое одной командой:apt-repo
#rm all
apt-repo
add p10
# apt-repo set p10
sources.list
репозитория на компакт-диске в APT предусмотрена специальная утилита — apt-cdrom
. Чтобы добавить запись о репозитории на компакт-диске, достаточно вставить диск в привод и выполнить команду apt-cdrom add
. После этого в sources.list
появится запись о подключённом диске примерно такого вида:
rpm cdrom:[ALT Server V x86_64]/ ALTLinux main
Важно
apt-cdrom add
, вы получаете ошибку:
Не найдена точка монтирования /media/ALTLinux/ дискаНеобходимо:
/etc/fstab
добавить строку:
/dev/sr0 /media/ALTLinux udf,iso9660 ro,noauto,user,utf8,nofail,comment=x-gvfs-show 0 0
# mkdir /media/ALTLinux
# apt-cdrom add
/etc/apt/sources.list.d/
.
Примечание
alt.list
может содержаться такая информация:
# ftp.altlinux.org (ALT Linux, Moscow) # ftp.altlinux.org (ALT Linux, Moscow) # ALT Platform 10 #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64 classic #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64-i586 classic #rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64 classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/x86_64-i586 classic rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic
apt-get update
или apt-repo update
).
apt-cache
. Данная утилита позволяет искать пакет не только по имени, но и по его описанию.
apt-cache search подстрока
позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:
$ apt-cache search telegraf
ceph-mgr-telegraf - Telegraf module for Ceph Manager Daemon
telegraf - The plugin-driven server agent for collecting and reporting metrics
apt-cache show
:
$ apt-cache show telegraf
Package: telegraf
Section: Development/Other
Installed Size: 132855876
Maintainer: Alexey Shabalin (ALT Team) <shaba@altlinux.org>
Version: 1.19.2-alt1:p10+281572.100.1.1@1627678454
Pre-Depends: /bin/sh, /usr/sbin/groupadd, /usr/sbin/useradd, /usr/sbin/usermod,
/usr/sbin/post_service, /usr/sbin/preun_service, rpmlib(PayloadIsXz)
Depends: /bin/kill, /bin/sh, /etc/logrotate.d, /etc/rc.d/init.d,
/etc/rc.d/init.d(SourceIfNotEmpty), /etc/rc.d/init.d(msg_reloading),
/etc/rc.d/init.d(msg_usage), /etc/rc.d/init.d(start_daemon), /etc/rc.d/init.d(status),
/etc/rc.d/init.d(stop_daemon), /etc/rc.d/init.d/functions
Provides: telegraf (= 1.19.2-alt1:p10+281572.100.1.1)
Architecture: x86_64
Size: 22968033
MD5Sum: d9d6ecaba627d86436ddfdffc243f2cd
Filename: telegraf-1.19.2-alt1.x86_64.rpm
Description: The plugin-driven server agent for collecting and reporting metrics
Telegraf is an agent written in Go for collecting, processing, aggregating, and writing metrics.
Design goals are to have a minimal memory footprint with a plugin system so that developers
in the community can easily add support for collecting metrics from well known services
(like Hadoop, Postgres, or Redis) and third party APIs (like Mailchimp, AWS CloudWatch,
or Google Analytics).
apt-cache
можно использовать русскую подстроку. В этом случае будут найдены пакеты, имеющие описание на русском языке. К сожалению, описание на русском языке в настоящее время есть не у всех пакетов, но наиболее актуальные описания переведены.
Важно
apt-get install имя_пакета
.
Важно
# apt-get update
apt-get
позволяет устанавливать в систему пакеты, требующие для работы наличие других, пока ещё не установленных пакетов. В этом случае он определяет, какие пакеты необходимо установить. apt-get
устанавливает их, пользуясь всеми доступными репозиториями.
apt-get install telegraf
приведёт к следующему диалогу с APT:
# apt-get install telegraf
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
telegraf
0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 23,0MB архивов.
После распаковки потребуется дополнительно 133MB дискового пространства.
Получено: 1 http://mirror.yandex.ru p10/branch/x86_64/classic telegraf 1.19.2-alt1:p10+281572.100.1.1@1627678454 [23,0MB]
Получено 23,0MB за 6s (3435kB/s).
Совершаем изменения...
Подготовка... ######################## [100%]
Обновление / установка...
1: telegraf-1.19.2-alt1 ######################## [100%]
Завершено.
apt-get install имя_пакета
используется также и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get
дополнительно проверяет, есть ли обновлённая, в сравнении с установленной в системе, версия пакета в репозитории.
# apt-get install /путь/к/файлу.rpm
При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.
apt-get
отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f
, заставляющую apt-get
исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выводимыми apt-get
. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.
apt-get remove имя_пакета
. Для того чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого. В случае удаления пакета, который относится к базовым компонентам системы, apt-get
потребует дополнительное подтверждение с целью предотвращения возможной случайной ошибки.
Важно
apt-get
удалить базовый компонент системы, вы увидите следующий запрос на подтверждение операции:
# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.
Предупреждение
#apt-get
&&update
apt-get
dist-upgrade
apt-get update
) обновит индексы пакетов. Вторая команда (apt-get dist-upgrade
) позволяет обновить только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list
, имеются новые версии.
Примечание
apt-get upgrade
существует, использовать её следует осторожно, либо не использовать вовсе.
/etc/apt/sources.list
, имеются новые версии.
apt-get upgrade
, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade
.
apt-get
, которым APT предварит само обновление.
Примечание
apt-get dist-upgrade
обновит систему, но ядро ОС не будет обновлено.
# update-kernel
Примечание
update-kernel
необходимо выполнить команду apt-get update
.
update-kernel
обновляет и модули ядра, если в репозитории обновилось что-то из модулей без обновления ядра.
# remove-old-kernels
Содержание
/
.
/media/cdrom
(путь в дистрибутиве обозначается с использованием /, а не \, как в DOS/Windows).
/
:
/bin
— командные оболочки (shell), основные утилиты;
/boot
— содержит ядро системы;
/dev
— псевдофайлы устройств, позволяющие работать с устройствами напрямую. Файлы в /dev
создаются сервисом udev
/etc
— общесистемные конфигурационные файлы для большинства программ в системе;
/etc/rc?.d
, /etc/init.d
, /etc/rc.boot
, /etc/rc.d
— каталоги, где расположены командные файлы, выполняемые при запуске системы или при смене её режима работы;
/etc/passwd
— база данных пользователей, в которой содержится информация об имени пользователя, его настоящем имени, личном каталоге, его зашифрованный пароль и другие данные;
/etc/shadow
— теневая база данных пользователей. При этом информация из файла /etc/passwd
перемещается в /etc/shadow
, который недоступен для чтения всем, кроме пользователя root. В случае использования альтернативной схемы управления теневыми паролями (TCB), все теневые пароли для каждого пользователя располагаются в каталоге /etc/tcb/имя пользователя/shadow
;
/home
— домашние каталоги пользователей;
/lib
— содержит файлы динамических библиотек, необходимых для работы большей части приложений, и подгружаемые модули ядра;
/lost+found
— восстановленные файлы;
/media
— подключаемые носители (каталоги для монтирования файловых систем сменных устройств);
/mnt
— точки временного монтирования;
/opt
— вспомогательные пакеты;
/proc
— виртуальная файловая система, хранящаяся в памяти компьютера при загруженной ОС. В данном каталоге расположены самые свежие сведения обо всех процессах, запущенных на компьютере.
/root
— домашний каталог администратора системы;
/run
— файлы состояния приложений;
/sbin
— набор программ для административной работы с системой (системные утилиты);
/selinux
— виртуальная файловая система SELinux;
/srv
— виртуальные данные сервисных служб;
/sys
— файловая система, содержащая информацию о текущем состоянии системы;
/tmp
— временные файлы.
/usr
— пользовательские двоичные файлы и данные, используемые только для чтения (программы и библиотеки);
/var
— файлы для хранения изменяющихся данных (рабочие файлы программ, очереди, журналы).
/usr
:
/usr/bin
— дополнительные программы для всех учетных записей;
/usr/sbin
— команды, используемые при администрировании системы и не предназначенные для размещения в файловой системе root;
/usr/local
— место, где рекомендуется размещать файлы, установленные без использования пакетных менеджеров, внутренняя организация каталогов практически такая же, как и корневого каталога;
/usr/man
— каталог, где хранятся файлы справочного руководства man;
/usr/share
— каталог для размещения общедоступных файлов большей части приложений.
/var
:
/var/log
— место, где хранятся файлы аудита работы системы и приложений;
/var/spool
— каталог для хранения файлов, находящихся в очереди на обработку для того или иного процесса (очереди печати, непрочитанные или не отправленные письма, задачи cron т.д.).
/dev
файловой системы дистрибутива (об этом — ниже). Диски (в том числе IDE/SATA/SCSI/SAS жёсткие диски, USB-диски) имеют имена:
/dev/sda
— первый диск;
/dev/sdb
— второй диск;
/dev/sdX
, где X — a, b, c, d, e, … в зависимости от порядкового номера диска на шине.
/dev/sdb4
— четвертый раздел второго диска.
/
) и раздел подкачки (swap). Размер последнего, как правило, составляет от однократной до двукратной величины оперативной памяти компьютера. Если на диске много свободного места, то можно создать отдельные разделы для каталогов /usr
, /home
, /var
.
command.com
в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:
bash
— самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;
pdksh
— клон korn shell, хорошо известной оболочки в UNIX™ системах.
$ echo
$SHELL
history
. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду необходимо набрать:
!номер команды
!!запустится последняя из набранных команд.
gunzip
, можно набрать следующую команду:
gu
$
guguile
gunzip
gupnp-binding-tool
gunzip
— это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.
$PATH
. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./
(точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog
):
./prog
cal
, выводящая календарь на текущий месяц.
$
cal
Май 2021 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Команда$
cal
1 2022
Январь 2022 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
cal 1 2022
состоит из двух частей — собственно команды cal
и «остального». То, что следует за командой называется параметрами (или аргументами) и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.
date
, только для работы по Гринвичу ей нужен дополнительный параметр -u
(он же --universal
).
$date
Ср мая 5 11:57:57 EET 2021
$date
-u
Ср мая 5 09:58:04 UTC 2021
--help
. К примеру, получить подсказку о том, что делает команда rm
, можно, набрав в терминале rm
--help
.
man
. Пример:
$man
ls
Примечание
ls
-l
-F
можно ввести команду ls
-lF
Учетные записи пользователей
su
su
позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
su
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
su -
, будет запрошен пароль суперпользователя (root), и, в случае ввода корректного пароля, пользователь получит права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:
exit
id
id
выводит информацию о пользователе и группах, в которых он состоит для заданного пользователя или о текущем пользователе (если ничего не указано).
id
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
passwd
passwd
меняет (или устанавливает) пароль, связанный с входным_именем пользователя.
Основные операции с файлами и каталогами
ls
ls
(list) печатает в стандартный вывод содержимое каталогов.
ls
[ОПЦИИ...] [ФАЙЛ...]
-a
— просмотр всех файлов, включая скрытые;
-l
— отображение более подробной информации;
-R
— выводить рекурсивно информацию о подкаталогах.
cd
cd
предназначена для смены каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется значение переменной окружения $HOME
(домашний каталог пользователя). Если каталог задан полным маршрутным именем, он становится текущим. По отношению к новому каталогу нужно иметь право на выполнение, которое в данном случае трактуется как разрешение на поиск.
cd
[-L|-P] [КАТАЛОГ]
$OLDPWD
. Если переход был осуществлен по переменной окружения $CDPATH
или в качестве аргумента был задан «-» и смена каталога была успешной, то абсолютный путь нового рабочего каталога будет выведен на стандартный вывод.
docs/
(относительный путь):
cd
docs/
Сделать текущим каталог /usr/bin
(абсолютный путь):
cd
/usr/bin/
Сделать текущим родительский каталог:
cd
..
Вернуться в предыдущий каталог:
cd
-
Сделать текущим домашний каталог:
cd
pwd
pwd
выводит абсолютный путь текущего (рабочего) каталога.
pwd
[-L|-P]
-P
— не выводить символические ссылки;
-L
— выводить символические ссылки.
rm
rm
служит для удаления записей о файлах. Если заданное имя было последней ссылкой на файл, то файл уничтожается.
Предупреждение
rm
[ОПЦИИ...]
<ФАЙЛ>
-f
— никогда не запрашивать подтверждения;
-i
— всегда запрашивать подтверждение;
-r, -R
— рекурсивно удалять содержимое указанных каталогов.
html
в каталоге ~/html
:
rm
-i
~/html/*.html
mkdir
mkdir
— команда для создания новых каталогов.
mkdir
[-p] [-m права] <КАТАЛОГ...>
rmdir
rmdir
удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением.
rmdir
[ОПЦИИ] <КАТАЛОГ...>
-p
— удалить каталог и его потомки.
rmdir
часто заменяется командой rm -rf
, которая позволяет удалять каталоги, даже если они не пусты.
cp
cp
предназначена для копирования файлов из одного в другие каталоги.
cp
[-fip] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
cp
[-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
cp
[-R] [[-H] | [-L] | [-P]] [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
-p
— сохранять по возможности времена изменения и доступа к файлу, владельца и группу, права доступа;
-i
— запрашивать подтверждение перед копированием в существующие файлы;
-r, -R
— рекурсивно копировать содержимое каталогов.
mv
mv
предназначена для перемещения файлов.
mv
[-fi] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
mv
[-fi] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
mv
перемещает исх_файл в цел_файл (происходит переименование файла).
mv
перемещает исходные файлы в указанный каталог под именами, совпадающими с краткими именами исходных файлов.
-f
— не запрашивать подтверждения перезаписи существующих файлов;
-i
— запрашивать подтверждение перезаписи существующих файлов.
cat
cat
последовательно выводит содержимое файлов.
cat
[ОПЦИИ] [ФАЙЛ...]
-n, --number
— нумеровать все строки при выводе;
-E, --show-ends
— показывать $ в конце каждой строки.
head
head
выводит первые 10 строк каждого файла на стандартный вывод.
head
[ОПЦИИ] [ФАЙЛ...]
-n, --lines=[-]K
— вывести первые К строк каждого файла, а не первые 10;
-q, --quiet
— не печатать заголовки с именами файлов.
less
less
позволяет постранично просматривать текст (для выхода необходимо нажать q).
less
ФАЙЛ
grep
grep
имеет много опций и предоставляет возможности поиска символьной строки в файле.
grep
[шаблон_поиска] ФАЙЛ
chmod
chmod
предназначена для изменения прав доступа файлов и каталогов.
chmod
[ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>
chmod
[ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R
— рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;
--reference=ИФАЙЛ
— использовать режим файла ИФАЙЛ.
chmod
изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре режим, который может быть представлен как в символьном виде, так и в виде восьмеричного, представляющего битовую маску новых прав доступа.
[ugoa...][[+-=][разрешения...]...]Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».
f2
:
chmod
+x f2
Запретить удаление файла f3
:
chmod
+t f3
chown
chown
изменяет владельца и/или группу для каждого заданного файла.
chown
[КЛЮЧ]…[ВЛАДЕЛЕЦ][:[ГРУППА]] <ФАЙЛ>
/u
на пользователя test:
chown
test /u
Поменять владельца и группу каталога /u
:
chown
test:staff /u
Поменять владельца каталога /u
и вложенных файлов на test:
chown
-hR test /u
Поиск файлов
find
find
предназначена для поиска всех файлов, начиная с корневого каталога. Поиск может осуществляться по имени, типу или владельцу файла.
find
[-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [ПУТЬ…] [ВЫРАЖЕНИЕ]
-name
— поиск по имени файла;
-type
— поиск по типу f=файл, d=каталог, l=ссылка(lnk);
-user
— поиск по владельцу (имя или UID).
find
, можно выполнять различные действия над найденными файлами. Основные действия:
-exec команда \;
— выполнить команду. Запись команды должна заканчиваться экранированной точкой с запятой. Строка «{}» заменяется текущим маршрутным именем файла;
execdir команда \;
— то же самое что и -exec
, но команда вызывается из подкаталога, содержащего текущий файл;
-ok команда
— эквивалентно -exec
за исключением того, что перед выполнением команды запрашивается подтверждение (в виде сгенерированной командной строки со знаком вопроса в конце) и она выполняется только при ответе: y;
-print
— вывод имени файла на экран.
-print
.
find
. -type f -name "~*" -print
Найти в текущем каталоге файлы, измененные позже, чем файл file.bak
:
find
. -newer file.bak -type f -print
Удалить все файлы с именами a.out
или *.o
, доступ к которым не производился в течение недели:
find
/ \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;
Удалить из текущего каталога и его подкаталогов все файлы нулевого размера, запрашивая подтверждение:
find
. -size 0c -ok rm {} \;
whereis
whereis
сообщает путь к исполняемому файлу программы, ее исходным файлам (если есть) и соответствующим страницам справочного руководства.
whereis
[ОПЦИИ] <ИМЯ>
-b
— вывод информации только об исполняемых файлах;
-m
— вывод информации только о страницах справочного руководства;
-s
— вывод информации только об исходных файлах.
Мониторинг и управление процессами
ps
ps
отображает список текущих процессов.
ps
[ОПЦИИ]
-a
— вывести информацию о процессах, ассоциированных с терминалами;
-f
— вывести «полный» список;
-l
— вывести «длинный» список;
-p список
— вывести информацию о процессах с перечисленными в списке PID;
-u список
— вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.
kill
kill
позволяет прекратить исполнение процесса или передать ему сигнал.
kill
[-s] [сигнал] [идентификатор] [...]
kill
[-l] [статус_завершения]
kill
[-номер_сигнала] [идентификатор] [...]
-l
— вывести список поддерживаемых сигналов;
-s сигнал, -сигнал
— послать сигнал с указанным именем.
kill
не дает желательного эффекта, необходимо использовать команду kill
с параметром -9
(kill
-9
PID_номер).
df
df
показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, переданный как аргумент. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указаны в блоках по 1КБ.
df
[ОПЦИИ] [ФАЙЛ...]
--total
— подсчитать общий объем в конце;
-h, --human-readable
— печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).
du
du
подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.
du
[ОПЦИИ] [ФАЙЛ...]
-a, --all
— выводить общую сумму для каждого заданного файла, а не только для каталогов;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
-s, --summarize
— отобразить только сумму для каждого аргумента.
which
which
отображает полный путь к указанным командам или сценариям.
which
[ОПЦИИ] <ФАЙЛ...>
-a, --all
— выводит все совпавшие исполняемые файлы по содержимому в переменной окружения $PATH
, а не только первый из них;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
--skip-dot
— пропускает все каталоги из переменной окружения $PATH
, которые начинаются с точки.
Использование многозадачности
bg
bg
позволяет перевести задание на задний план.
bg
[ИДЕНТИФИКАТОР ...]
fg
fg
позволяет перевести задание на передний план.
fg
[ИДЕНТИФИКАТОР ...]
Сжатие и упаковка файлов
tar
tar
, которая преобразует файл или группу файлов в архив без сжатия (tarfile).
tar
-cf [имя создаваемого файла архива] [упаковываемые файлы и/или каталоги]
tar
-cf moi_dokumenti.tar Docs project.tex
tar
-xf [имя файла архива]
gzip
, bzip2
и 7z
.
cat
. По умолчанию команда cat
читает данные из всех файлов, которые указаны в командной строке, и посылает эту информацию непосредственно в стандартный вывод (stdout). Следовательно, команда:
cat
history-final masters-thesis
выведет на экран сначала содержимое файла history-final
, а затем — файла masters-thesis
.
cat
читает входные данные из stdin и возвращает их в stdout. Пример:
cat
Hello there.
Hello there.
Bye.
Bye.
Ctrl-D
cat
немедленно возвращает на экран. При вводе информации со стандартного ввода конец текста сигнализируется вводом специальной комбинации клавиш, как правило, Ctrl+D. Сокращённое название сигнала конца текста — EOT (end of text).
sort
является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является программа cat
— она ничего не делает с входными данными, а просто пересылает их на выход.
ls
на stdin команды sort
:
ls
|sort
-r notes masters-thesis history-final english-list
ls
/usr/bin |more
где командаls
|sort
-r |head
-1 notes
head -1
выводит на экран первую строку получаемого ей входного потока строк (в примере поток состоит из данных от команды ls
), отсортированных в обратном алфавитном порядке.
ls
> file-list
уничтожит содержимое файла file-list
, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.
Примечание
su
(shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh
от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su
, а значит, ясно, кто выполнил определённое административное действие.
su
, а утилиту sudo
, которая позволяет выполнять только заранее заданные команды.
Важно
su
и sudo
, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.
control
доступна только для суперпользователя (root). Для того, чтобы посмотреть, что означает та или иная политика control
(разрешения выполнения конкретной команды, управляемой control
), надо запустить команду с ключом help:
# control su help
Запустив control
без параметров, можно увидеть полный список команд, управляемых командой (facilities) вместе с их текущим состоянием и набором допустимых состояний.
su -
.
su
без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH
, остаётся таким же, как у пользователя: в переменной $PATH
не окажется каталогов /sbin
, /usr/sbin
, без указания полного имени будут недоступны команды route
, shutdown
, mkswap
и другие. Более того, переменная $HOME
будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.
su -
. В этом режиме su
запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.
id
, вывод её может быть примерно следующим:
uid=500(test) gid=500(test) группы=500(test),16(rpm)
Примечание
passwd
и утилит shadow
.
passwd [ОПЦИИ...]
[ИМЯ ПОЛЬЗОВАТЕЛЯ]
-d
--delete
— удалить пароль для указанной записи;
-f
, --force
— форсировать операцию;
-k
, --keep-tokens
— сохранить не устаревшие пароли;
-l
, --lock
— блокировать указанную запись;
--stdin
— прочитать новые пароли из стандартного ввода;
-S
, --status
— дать отчет о статусе пароля в указанной записи;
-u
, --unlock
— разблокировать указанную запись;
-?
, --help
— показать справку и выйти;
--usage
— дать короткую справку по использованию;
-V
, --version
— показать версию программы и выйти.
passwd
заканчивает работу с кодом выхода 0. Код выхода 1 означает, что произошла ошибка. Текстовое описание ошибки выводится на стандартный поток ошибок.
useradd
и passwd
:
#useradd
test1 #passwd
test1 passwd: updating all authentication tokens for user test1. You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use an 8 character long password with characters from at least 3 of these 4 classes, or a 7 character long password containing characters from all the classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 40 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "holder5dinghy-Arm". Enter new password:
passwd
— но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.
useradd
имеет множество параметров, которые позволяют менять её поведение по умолчанию. Например, можно принудительно указать, какой будет UID или какой группе будет принадлежать пользователь.
usermod
:
# usermod
-G audio,rpm,test1 test1
# usermod
-l test2 test1
usermod -L
test2
и usermod -U
test2
соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.
chpasswd
. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль
.
userdel
.
userdel test2
удалит пользователя test2 из системы. Если будет дополнительно задан параметр -r
, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.
pstree
.
/etc/inittab
, откуда вызываются другие программы и скрипты на определенном этапе запуска.
service
и chkconfig
продолжат работать в мире systemd практически без изменений. Тем не менее, в этой таблице показано как выполнить те же действия с помощью встроенных утилит systemctl.
Таблица 72.1. Команды управления службами
Команды Sysvinit
|
Команды Systemd
|
Примечания
|
---|---|---|
service frobozz start
|
systemctl start frobozz.service
|
Используется для запуска службы (не перезагружает постоянные)
|
service frobozz stop
|
systemctl stop frobozz.service
|
Используется для остановки службы (не перезагружает постоянные)
|
service frobozz restart
|
systemctl restart frobozz.service
|
Используется для остановки и последующего запуска службы
|
service frobozz reload
|
systemctl reload frobozz.service
|
Если поддерживается, перезагружает файлы конфигурации без прерывания незаконченных операций
|
service frobozz condrestart
|
systemctl condrestart frobozz.service
|
Перезапускает службу, если она уже работает
|
service frobozz status
|
systemctl status frobozz.service
|
Сообщает, запущена ли уже служба
|
ls /etc/rc.d/init.d/
|
systemctl list-unit-files --type=service (preferred)
ls /lib/systemd/system/*.service /etc/systemd/system/*.service
|
Используется для отображения списка служб, которые можно запустить или остановить.
Используется для отображения списка всех служб.
|
chkconfig frobozz on
|
systemctl enable frobozz.service
|
Включает службу во время следующей перезагрузки, или любой другой триггер
|
chkconfig frobozz off
|
systemctl disable frobozz.service
|
Выключает службу во время следующей перезагрузки, или любой другой триггер
|
chkconfig frobozz
|
systemctl is-enabled frobozz.service
|
Используется для проверки, сконфигурирована ли служба для запуска в текущем окружении
|
chkconfig --list
|
systemctl list-unit-files --type=service(preferred)
ls /etc/systemd/system/*.wants/
|
Выводит таблицу служб. В ней видно, на каких уровнях загрузки они (не)запускаются
|
chkconfig frobozz --list
|
ls /etc/systemd/system/*.wants/frobozz.service
|
Используется, для отображения на каких уровнях служба (не)запускается
|
chkconfig frobozz --add
|
systemctl daemon-reload
|
Используется, когда вы создаете новую службу или модифицируете любую конфигурацию
|
journalctl
. По умолчанию, больше не требуется запуск службы syslog.
journalctl
с разными ключами:
journalctl
-b
— покажет сообщения только с текущей загрузки;
journalctl
-f
— покажет только последние сообщения.
journalctl
_PID
=1 — покажет сообщения первого процесса (init).
journalctl
. Для этого используйте команду man journalctl
.
man
(сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man
название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date
, вы можете ввести команду:
$
man
date
man
осуществляется командой apropos
. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos
date или при помощи ввода слова, обозначающего нужное действие, после команды man
-k
(например, man
-k
copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man
результаты поиска будут выведены на запрашиваемом языке.
man
запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man
необходимо нажать на клавиатуре q. Команда man
man
выдаёт справку по пользованию самой командой man
.
man
по умолчанию будет отображать их на русском языке.
info
info
. Команда info
, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.
/usr/share/doc
— место хранения разнообразной документации.
/usr/share/doc/имя_пакета
. Например, документация к пакету foo-1.0-alt1 находится в /usr/share/doc/foo-1.0-alt1
. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm
-qd
имя_установленного_пакета.
README
, FAQ
, TODO
, СhangeLog
и другие. В файле README
содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ
содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ
вы тут же найдёте готовое решение. В файле TODO
записаны планы разработчиков на реализацию той или иной функциональности. В файле СhangeLog
записана история изменений в программе от версии к версии.
rpm
-qi
имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.
HOWTO
в формате HTML (от англ. how to — «как сделать») каталога /usr/share/doc/HOWTO/
(при условии их наличия в системе) содержат многообразную информацию о работе Linux-систем.