TL;DR: āĻāĻāĻāĻŋ āĻāĻāĻžāϰāĻāĻŋāĻ āύāĻŋāĻŦāύā§āϧ - āĻĒāĻžāϤā§āϰ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻĒāϰāĻŋāĻŦā§āĻļā§āϰ āϤā§āϞāύāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻžāĨ¤ āĻĄāĻāĻžāϰ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻ āύā§āϰā§āĻĒ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤

āĻāĻāĻŋ āĻā§āĻĨāĻž āĻĨā§āĻā§ āĻāϏā§āĻā§ āϤāĻžāϰ āĻāĻāĻāĻŋ āĻā§āĻ āĻāϤāĻŋāĻšāĻžāϏ
ĐŅŅĐžŅиŅ
āĻāĻāĻāĻŋ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύ āĻāϰāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āϏā§āĻĒāϰāĻŋāĻāĻŋāϤ āĻāĻĒāĻžāϝāĻŧ āĻšāϞ chrootāĨ¤ āĻāĻāĻ āύāĻžāĻŽā§āϰ āϏāĻŋāϏā§āĻā§āĻŽ āĻāϞ āϰā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻāĻāĻāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠- āĻāĻāĻāĻžāĻŦā§ āĻāĻāĻŋāĻā§ āϝ⧠āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻŦāϞāĻž āĻšāϝāĻŧ āϏā§āĻāĻžāύ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĨāĻžāĻāĻž āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϤ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϝāĻĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāĻā§ āĻāĻŋāϤāϰ⧠āϏā§āĻĒāĻžāϰ āĻāĻāĻāĻžāϰ āĻ āϧāĻŋāĻāĻžāϰ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻāĻāĻŋ āϏāĻŽā§āĻāĻžāĻŦā§āϝāĻāĻžāĻŦā§ chroot āĻĨā§āĻā§ "āĻĒāĻžāϞāĻžāϤā§" āĻāĻŦāĻ āĻĒā§āϰāϧāĻžāύ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āϰā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, āĻ āύā§āϝāĻžāύā§āϝ āϏāĻāϏā§āĻĨāĻžāύ (RAM, āĻĒā§āϰāϏā§āϏāϰ), āϏā§āĻāϏāĻžāĻĨā§ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧ āύāϝāĻŧāĨ¤
āĻĒāϰāĻŦāϰā§āϤ⧠āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋ āĻšāϞ⧠āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻžāϰā§āύā§āϞ āĻŽā§āĻāĻžāύāĻŋāĻāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻāĻŋāϤāϰ⧠āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻŖāĻžāĻā§āĻ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻžāϞāĻžāύā§āĨ¤ āĻŦāĻŋāĻāĻŋāύā§āύ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŦāĻŋāĻāĻŋāύā§āύ āύāĻžāĻŽ āϰāϝāĻŧā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻāϰ āĻŽā§āϞ āĻŦāĻŋāώāϝāĻŧ āĻāĻāĻ: āĻāĻāĻžāϧāĻŋāĻ āϏā§āĻŦāĻžāϧā§āύ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻžāϞāĻžāύā§, āϝā§āĻāĻžāύ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŽā§āϞ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻšāĻŋāϏā§āĻŦā§ āĻāĻāĻ āĻāĻžāϰā§āύā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§ FreeBSD Jails, Solaris Zones, OpenVZ, āĻāĻŦāĻ LXCāĨ¤ LinuxāĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻĄāĻŋāϏā§āĻ āϏā§āĻĒā§āϏ āĻĻā§āĻŦāĻžāϰāĻžāĻ āύāϝāĻŧ, āĻŦāϰāĻ āĻ āύā§āϝāĻžāύā§āϝ āϰāĻŋāϏā§āϰā§āϏā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§āĻ āĻāĻāϏā§āϞā§āĻļāύ āĻŦāĻž āĻŦāĻŋāĻā§āĻāĻŋāύā§āύāϤāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻž āĻšāϝāĻŧ; āĻŦāĻŋāĻļā§āώ āĻāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āϏāĻŋāĻĒāĻŋāĻāĻ āĻāĻžāĻāĻŽ, āϰâā§āϝāĻžāĻŽ āĻāĻŦāĻ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŦā§āϝāĻžāύā§āĻĄāĻāĻāĻĨā§āϰ āĻāĻĒāϰ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ chroot-āĻāϰ āϤā§āϞāύāĻžāϝāĻŧ āĻāĻāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰ āĻĨā§āĻā§ āĻŦā§āϰ āĻšāĻāϝāĻŧāĻž āĻāϰāĻ āĻāĻ āĻŋāύ, āĻāĻžāϰāĻŖ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āϏā§āĻĒāĻžāϰāĻāĻāĻāĻžāϰ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ āĻŦāĻŋāώāϝāĻŧāĻā§āϞā§āϤā§āĻ āĻĒā§āϰāĻŦā§āĻļāĻžāϧāĻŋāĻāĻžāϰ āĻĒāĻžāϝāĻŧāĨ¤ āϤāĻŦā§, āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻā§āϤāϰā§āϰ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽāĻā§ āĻāĻĒ-āĻā§-āĻĄā§āĻ āϰāĻžāĻāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻž āĻāĻŦāĻ āĻĒā§āϰā§āύ⧠āĻāĻžāϰā§āύā§āϞ āϏāĻāϏā§āĻāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻāĻžāϰāĻŖā§ (āϝāĻž āĻĒā§āϰāĻžāϏāĻā§āĻāĻŋāĻ) Linux(āĻāĻŋāĻā§āĻāĻž āĻāĻŽ āĻŽāĻžāϤā§āϰāĻžāϝāĻŧ FreeBSD-āĻāϰ āĻā§āώā§āϤā§āϰā§) āĻāĻžāϰā§āύā§āϞ āĻāĻāϏā§āϞā§āĻļāύ āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āĻĻ āĻāϰ⧠āĻŽā§āϞ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻĒā§āϰāĻŦā§āĻļāĻžāϧāĻŋāĻāĻžāϰ āĻĒāĻžāĻāϝāĻŧāĻžāϰ āĻāĻāĻāĻŋ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āĻļā§āύā§āϝ āύāϝāĻŧāĨ¤
āĻāĻāĻāĻŋ āĻĒāĻžāϤā§āϰ⧠āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻŖāĻžāĻā§āĻ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻžāϞ⧠āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠(āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāϰāĻŽā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ, āĻāĻāĻāĻŋ āĻĒā§āϝāĻžāĻā§āĻ āĻŽā§āϝāĻžāύā§āĻāĻžāϰ āĻāϤā§āϝāĻžāĻĻāĻŋ āϏāĻš), āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋ āĻ āĻŦāĻŋāϞāĻŽā§āĻŦā§ āĻāĻžāϞ⧠āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āĻĒā§āϰāϧāĻžāύ āĻāĻŋāύāĻŋāϏāĻāĻŋ āĻāĻ āϏā§āϝā§āĻā§āϰ āϏāĻžāĻĨā§ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻž (āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻāĻĒāϏā§āĻĨāĻŋāϤāĻŋ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻĢāĻžāĻāϞ). āĻāĻ āϧāĻžāϰāĻŖāĻžāĻāĻŋ āĻāύāĻā§āĻāύāĻžāϰāĻžāĻāĻāĻĄ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞāĻžāĻāĻā§āĻļāύā§āϰ āĻāĻŋāϤā§āϤāĻŋ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĻāĻŋāϞ, āϝāĻžāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻŦāĻŋāĻļāĻŋāώā§āĻ āĻāĻŦāĻ āϏā§āĻĒāϰāĻŋāĻāĻŋāϤ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋ āĻšāϞā§āύ āĻĄāĻāĻžāϰāĨ¤ āĻĒā§āϰā§āĻŦāĻŦāϰā§āϤ⧠āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϤā§āϞāύāĻžāϝāĻŧ, āĻāϰāĻ āύāĻŽāύā§āϝāĻŧ āĻŦāĻŋāĻā§āĻāĻŋāύā§āύāϤāĻž āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž, āĻāĻāϤā§āϰ⧠āĻāύāĻā§āĻāύāĻžāϰāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āϏāĻŽāϰā§āĻĨāύ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻāĻŋāϤāϰ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏā§āĻā§āĻāĻĢā§āϞāύā§āϏā§āϰ āĻĢāϞā§, āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻā§āϰ āϏāĻāĻā§āϝāĻ āĻā§āϤ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻāĻ āϏāĻžāĻŽāĻā§āϰāĻŋāĻ āĻĒāϰāĻŋāĻŦā§āĻļ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻā§āώāĻŽāϤāĻž - āĻāĻžāĻĄāĻŧāĻžāĻ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ āϰāĻŋāϏā§āϰā§āϏ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻžāĨ¤
āĻĄāĻāĻļā§āϰāĻŽāĻŋāĻ
āĻĄāĻāĻžāϰ āĻšāϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āϏā§āĻĒāϰāĻŋāĻāĻŋāϤ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāύā§āĻā§āĻāύāĻžāϰāĻžāĻāĻā§āĻļāύ āϏāĻĢāĻāĻāϝāĻŧā§āϝāĻžāϰāĨ¤ āĻāĻāĻŋ āĻā§ (Go) āĻāĻžāώāĻžāϝāĻŧ āϞā§āĻāĻž āĻāĻŦāĻ āύā§āĻāĻŋāĻ āĻāĻžāϰā§āύā§āϞā§āϰ āϏāĻā§āώāĻŽāϤāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ Linux āĻĄāĻŋāϏā§āĻā§āϰ āĻāĻžāϝāĻŧāĻāĻž āĻŦāĻžāĻāĻāĻžāϤ⧠āϏāĻŋāĻā§āϰā§āĻĒāϏ (cgroups), āύā§āĻŽāϏā§āĻĒā§āϏā§āϏ (namespaces), āĻā§āϝāĻžāĻĒāĻžāĻŦāĻŋāϞāĻŋāĻāĻŋāϏ (capabilities) āĻāϤā§āϝāĻžāĻĻāĻŋ, āϏā§āĻāϏāĻžāĻĨā§ āĻāĻāĻĢāϏ (Aufs) āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻ āύā§āϰā§āĻĒ āϏāĻŋāϏā§āĻā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤

āϏā§āϤā§āϰ: āĻāĻāĻāĻŋāĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž
āϏā§āĻĨāĻžāĻĒāϤā§āϝ
āϏāĻāϏā§āĻāϰāĻŖ ā§§.ā§§ā§§-āĻāϰ āĻāĻā§, āĻĄāĻāĻžāϰ āĻāĻāĻāĻŋ āĻāĻāĻ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāϤ āϝāĻž āϏāĻŽāϏā§āϤ āĻāύā§āĻā§āĻāύāĻžāϰ āĻ āĻĒāĻžāϰā§āĻļāύ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ: āĻāύā§āĻā§āĻāύāĻžāϰ āĻāĻŽā§āĻ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰāĻž, āĻāύā§āĻā§āĻāύāĻžāϰ āĻāĻžāϞ⧠āĻāϰāĻž āĻāĻŦāĻ āĻāĻĒāĻŋāĻāĻ āĻ āύā§āϰā§āϧāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻžāĨ¤ āϏāĻāϏā§āĻāϰāĻŖ ā§§.ā§§ā§§ āĻĨā§āĻā§, āĻĄāĻāĻžāϰāĻā§ āĻāϝāĻŧā§āĻāĻāĻŋ āĻĒāϰāϏā§āĻĒāϰ āϏāĻŽā§āĻĒāϰā§āĻāϝā§āĻā§āϤ āĻ āĻāĻļā§ āĻŦāĻŋāĻāĻā§āϤ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§: āĻāύā§āĻā§āĻāύāĻžāϰāĻĄāĻŋ (containerd), āϝāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāύā§āĻā§āĻāύāĻžāϰ āĻā§āĻŦāύāĻāĻā§āϰ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰ⧠(āĻĄāĻŋāϏā§āĻ āĻŦāϰāĻžāĻĻā§āĻĻ, āĻāĻŽā§āĻ āĻĄāĻžāĻāύāϞā§āĻĄ, āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ, āĻāĻžāϞ⧠āĻāϰāĻž, āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻāĻŦāĻ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ), āĻāĻŦāĻ āϰāĻžāύāϏāĻŋ (runC), āϝāĻž āϏāĻŋāĻā§āϰā§āĻĒāϏ (cgroups) āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻāĻžāϰā§āύā§āϞ āĻŦā§āĻļāĻŋāώā§āĻā§āϝā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āϤā§āϰāĻŋ āĻāĻāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰ āϰāĻžāύāĻāĻžāĻāĻŽ āĻĒāϰāĻŋāĻŦā§āĻļāĨ¤ LinuxāĻĄāĻāĻžāϰ āϏāĻžāϰā§āĻāĻŋāϏāĻāĻŋ āĻāĻāύāĻ āϰāϝāĻŧā§āĻā§, āĻāĻŋāύā§āϤ⧠āĻāĻāύ āĻāĻāĻŋ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāύā§āĻā§āĻāύāĻžāϰāĻĄāĻŋ-āϤ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻāĻĒāĻŋāĻāĻ āĻ āύā§āϰā§āϧāĻā§āϞ⧠āĻĒā§āϰāϏā§āϏ āĻāϰāĻžāϰ āĻāĻžāĻ āĻāϰā§āĨ¤

āĻāύāϏā§āĻāϞā§āĻļāύ āĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ
āĻĄāĻāĻžāϰ āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻāĻŽāĻžāϰ āĻĒā§āϰāĻŋāϝāĻŧ āĻāĻĒāĻžāϝāĻŧ āĻš'āϞ āĻĄāĻāĻžāϰ-āĻŽā§āĻļāĻŋāύ, āϝāĻž āĻĻā§āϰāĻŦāϰā§āϤ⧠āϏāĻžāϰā§āĻāĻžāϰ⧠(āĻŦāĻŋāĻāĻŋāύā§āύ āĻā§āϞāĻžāĻāĻĄ āϏāĻš) āϏāϰāĻžāϏāϰāĻŋ āĻĄāĻāĻžāϰ āĻāύāϏā§āĻāϞ āĻāĻŦāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻāĻĒāύāĻžāĻā§ āϰāĻŋāĻŽā§āĻ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĻā§āϝāĻŧ āĻāĻŦāĻ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻŽāĻžāύā§āĻĄāĻ āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϤāĻŦā§, ⧍ā§Ļā§§ā§Ž āϏāĻžāϞ āĻĨā§āĻā§ āĻĒā§āϰāĻāϞā§āĻĒāĻāĻŋāϰ āϤā§āĻŽāύ āĻā§āύ⧠āĻāύā§āύāϝāĻŧāύ āĻšāϝāĻŧāύāĻŋ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻļāύā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻāϞāĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋāϤā§āĻ āĻāĻāĻŋ āĻāύāϏā§āĻāϞ āĻāϰāĻŦāĨ¤ Linux āĻĒāĻĻā§āϧāϤāĻŋ - āĻāĻāĻāĻŋ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āϝā§āĻ āĻāϰ⧠āĻāĻŦāĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒā§āϝāĻžāĻā§āĻāĻā§āϞ⧠āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§āĨ¤
āĻāĻ āĻĒāĻĻā§āϧāϤāĻŋāĻāĻŋ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻāύā§āϝāĻ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, Ansible āĻŦāĻž āĻ āύā§āϝāĻžāύā§āϝ āĻ āύā§āϰā§āĻĒ āϏāĻŋāϏā§āĻā§āĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻŽāĻŋ āĻāĻ āύāĻŋāĻŦāύā§āϧ⧠āĻāĻāĻŋ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻŦ āύāĻžāĨ¤
āϏā§āĻĨāĻžāĻĒāύāĻāĻŋ āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻž āĻšāĻŦā§ Centos ā§, āĻāĻŽāĻŋ āϏāĻžāϰā§āĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāĻāĻāĻŋ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ, āĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻāύā§āϝ āύāĻŋāĻā§āϰ āĻāĻŽāĻžāύā§āĻĄāĻā§āϞ⧠āĻāĻžāϞāĻžāϞā§āĻ āϝāĻĨā§āώā§āĻ:
# yum install -y yum-utils
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce docker-ce-cli containerd.ioāĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻĒāϰā§, āĻāĻĒāύāĻžāĻā§ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻāĻŋ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻšāĻŦā§, āĻāĻāĻŋ āĻ āĻā§āϞā§āĻĄā§ āϰāĻžāĻā§āύ:
# systemctl enable docker
# systemctl start docker
# firewall-cmd --zone=public --add-port=2377/tcp --permanentāĻ āϤāĻŋāϰāĻŋāĻā§āϤāĻāĻžāĻŦā§, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻĄāĻāĻžāϰ āĻā§āϰā§āĻĒ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āϏā§āĻĄā§ āĻāĻžāĻĄāĻŧāĻžāĻ āĻĄāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāϤā§, āϞāĻāĻŋāĻ āϏā§āĻ āĻāĻĒ āĻāϰāϤā§, āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ API-āϤ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āϏāĻā§āώāĻŽ āĻāϰāϤ⧠āϏāĻā§āώāĻŽ āĻšāĻŦā§āύ, āĻĢāĻžāϝāĻŧāĻžāϰāĻāϝāĻŧāĻžāϞāĻāĻŋ āϏā§āĻā§āώā§āĻŽ-āĻāĻŋāĻāύ āĻāϰāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻž (āϏāĻŦāĻāĻŋāĻā§ āϝāĻž āĻ āύā§āĻŽā§āĻĻāĻŋāϤ āύāϝāĻŧ āĻāĻĒāϰā§āϰ āĻāĻŦāĻ āύā§āĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻā§āϞāĻŋāϤ⧠āύāĻŋāώāĻŋāĻĻā§āϧ - āĻāĻŽāĻŋ āϏāϰāϞāϤāĻž āĻāĻŦāĻ āĻāĻŋāĻā§āϝā§āϝāĻŧāĻžāϞāĻžāĻāĻā§āĻļāύā§āϰ āĻāύā§āϝ āĻāĻāĻŋ āĻŦāĻžāĻĻ āĻĻāĻŋāϝāĻŧā§āĻāĻŋ), āϤāĻŦā§ āĻāĻŽāĻŋ āĻāĻāĻžāύ⧠āĻāϰāĻ āĻŦāĻŋāĻļāĻĻā§ āϝāĻžāĻŦ āύāĻžāĨ¤
āĻ āύā§āϝāĻžāύā§āϝ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ
āĻāĻĒāϰā§āĻā§āϤ āĻĄāĻāĻžāϰ āĻŽā§āĻļāĻŋāύ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻāĻāĻŋ āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋāĻ āϰāϝāĻŧā§āĻā§, āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻŋāϤā§āϰāĻā§āϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāϰāĻā§āĻāĻžāĻŽ, āϏā§āĻāϏāĻžāĻĨā§ āĻĄāĻāĻžāϰ āĻāĻŽā§āĻĒā§āĻ - āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋāϤ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāĻā§ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāϰāĻā§āĻāĻžāĻŽ, YAML āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋ āϤā§āϰāĻŋ āĻāĻŦāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāĻŋāύāĻŋāϏ (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖā§āϰ āĻāύā§āϝ āϏā§āĻĨāĻžāϝāĻŧā§ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽ)āĨ¤
āĻāĻāĻŋ CICD-āĻāϰ āĻāύā§āϝ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āϏāĻāĻāĻ āĻŋāϤ āĻāϰāϤā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāϰā§āĻāĻāĻŋ āĻāĻāϰā§āώāĻŖā§āϝāĻŧ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻŽā§āĻĄā§ āĻāĻžāĻ āĻāϰāĻā§, āϤāĻĨāĻžāĻāĻĨāĻŋāϤ āϏā§āϝāĻŧāĻžāϰā§āĻŽ āĻŽā§āĻĄ (āϏāĻāϏā§āĻāϰāĻŖ 1.12 āĻāϰ āĻāĻā§ āĻāĻāĻŋ āĻĄāĻāĻžāϰ āϏā§āϝāĻŧāĻžāϰā§āĻŽ āύāĻžāĻŽā§ āĻĒāϰāĻŋāĻāĻŋāϤ āĻāĻŋāϞ), āϝāĻž āĻāĻĒāύāĻžāĻā§ āĻāύā§āĻā§āĻāύāĻžāϰ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻāĻŋāύā§āύ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāĻāĻ āĻ āĻŦāĻāĻžāĻ āĻžāĻŽā§ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āϏāĻŽāϏā§āϤ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻāĻĒāϰ⧠āĻāĻāĻāĻŋ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§āϰ āĻāύā§āϝ āϏāĻŽāϰā§āĻĨāύ āϰāϝāĻŧā§āĻā§, āĻāĻāĻāĻŋ āĻ āύā§āϤāϰā§āύāĻŋāϰā§āĻŽāĻŋāϤ āϞā§āĻĄ āĻŦā§āϝāĻžāϞā§āύā§āϏāĻžāϰ āϰāϝāĻŧā§āĻā§, āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĒāĻžāϤā§āϰ⧠āĻā§āĻĒāύā§āϝāĻŧāϤāĻžāϰ āĻāύā§āϝ āϏāĻŽāϰā§āĻĨāύ āϰāϝāĻŧā§āĻā§āĨ¤
āĻĄāĻāĻžāϰ āĻāĻŽā§āĻĒā§āĻā§āϰ YAML āĻĢāĻžāĻāϞāĻā§āϞāĻŋ āĻā§āĻ āĻāĻŦāĻ āĻŽāĻžāĻāĻžāϰāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻā§āϞāĻŋāϰ āϰāĻā§āώāĻŖāĻžāĻŦā§āĻā§āώāĻŖ āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻĻā§āĻĻā§āĻļā§āϝ⧠āĻā§āĻāĻāĻžāĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āϏāĻš āĻāĻ āϧāϰāύā§āϰ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻŦāĻĄāĻŧ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ, āĻā§āĻŦāĻžāϰāύā§āĻāϏ āĻĒāĻāύā§āĻĻāύā§āϝāĻŧ āĻāĻžāϰāĻŖ āĻāĻžāĻāĻ āĻŽā§āĻĄ āϰāĻā§āώāĻŖāĻžāĻŦā§āĻā§āώāĻŖā§āϰ āĻāϰāĻ āĻā§āĻŦāĻžāϰāύā§āĻā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻŦā§āĻļāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ runC āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ⧠āĻĒāϰāĻŋāĻŦā§āĻļ āĻšāĻŋāϏāĻžāĻŦā§, āĻāĻĒāύāĻŋ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ
āĻĄāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻž
āĻāύāϏā§āĻāϞā§āĻļāύ āĻāĻŦāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύā§āϰ āĻĒāϰā§, āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦ āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāύā§āύāϝāĻŧāύ āĻĻāϞā§āϰ āĻāύā§āϝ āĻāĻŋāĻāϞā§āϝāĻžāĻŦ āĻāĻŦāĻ āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻŦāĨ¤ āϏāĻžāϰā§āĻāĻžāϰ āĻšāĻŋāϏāĻžāĻŦā§, āĻāĻŽāĻŋ āϤāĻŋāύāĻāĻŋ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ, āϝāĻžāϰ āĻāĻĒāϰ āĻāĻŽāĻŋ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ GlusterFS āĻŦāĻŋāϤāϰāĻŖ āĻāϰāĻž FS āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻŦ, āĻāĻŽāĻŋ āĻāĻāĻŋāĻā§ āĻĄāĻāĻžāϰ āĻāϞāĻŋāĻāĻŽ āϏā§āĻā§āϰā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦ, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋāϰ āĻāĻāĻāĻŋ āĻŦā§āϝāϰā§āĻĨ-āύāĻŋāϰāĻžāĻĒāĻĻ āϏāĻāϏā§āĻāϰāĻŖ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝāĨ¤ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻŽā§āϞ āĻāĻĒāĻžāĻĻāĻžāύ: āĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ, āĻĒā§āϏā§āĻāĻā§āϰā§āϏāĻāĻŋāĻāĻāϞ, āϰā§āĻĄāĻŋāϏ, āĻāĻŋāĻāϞā§āϝāĻžāĻŦ āϏā§āϝāĻŧāĻžāϰā§āĻŽā§āϰ āĻāĻĒāϰ⧠āĻāĻŋāĻāϞā§āϝāĻžāĻŦ āϰāĻžāύāĻžāϰ āϏāĻŽāϰā§āĻĨāύ āĻāϰā§āĨ¤ Postgresql āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻŋāĻ āϏāĻš āĻāĻžāϞ⧠āĻāϰāĻž āĻšāĻŦā§ , āϤāĻžāĻ āĻāĻĒāύāĻžāĻā§ Postgresql āĻĄā§āĻāĻž āϏāĻā§āĻāϝāĻŧ āĻāϰāϤ⧠GlusterFS āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤ āĻŦāĻžāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϤāĻĨā§āϝ GlusterFS āĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāĻŦā§āĨ¤
āϏāĻŽāϏā§āϤ āϏāĻžāϰā§āĻāĻžāϰ⧠GlusterFS āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠(āĻāĻā§āϞāĻŋāĻā§ node1, node2, node3 āĻŦāϞāĻž āĻšāϝāĻŧ), āĻāĻĒāύāĻžāĻā§ āĻĒā§āϝāĻžāĻā§āĻ āĻāύāϏā§āĻāϞ āĻāϰāϤ⧠āĻšāĻŦā§, āĻĢāĻžāϝāĻŧāĻžāϰāĻāϝāĻŧāĻžāϞ āϏāĻā§āώāĻŽ āĻāϰāϤ⧠āĻšāĻŦā§, āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§:
# yum -y install centos-release-gluster7
# yum -y install glusterfs-server
# systemctl enable glusterd
# systemctl start glusterd
# firewall-cmd --add-service=glusterfs --permanent
# firewall-cmd --reload
# mkdir -p /srv/gluster
# mkdir -p /srv/docker
# echo "$(hostname):/docker /srv/docker glusterfs defaults,_netdev 0 0" >> /etc/fstabāĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻĒāϰā§, GlusterFS āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āĻāĻžāĻ āĻ āĻŦāĻļā§āϝāĻ āĻāĻāĻāĻŋ āύā§āĻĄ āĻĨā§āĻā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝā§āϤ⧠āĻšāĻŦā§, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ node1:
# gluster peer probe node2
# gluster peer probe node3
# gluster volume create docker replica 3 node1:/srv/gluster node2:/srv/gluster node3:/srv/gluster force
# gluster volume start dockerāϤāĻžāϰāĻĒāϰ⧠āĻāĻĒāύāĻžāĻā§ āĻĢāϞāϏā§āĻŦāϰā§āĻĒ āĻāϞāĻŋāĻāĻŽ āĻŽāĻžāĻāύā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§ (āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻ āĻŦāĻļā§āϝāĻ āϏāĻŽāϏā§āϤ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻžāϞāĻžāύ⧠āĻāĻāĻŋāϤ):
# mount /srv/dockerāϏā§āϝāĻŧāĻžāϰā§āĻŽ āĻŽā§āĻĄ āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§, āϝā§āĻāĻŋ āĻšāĻŦā§ āϞāĻŋāĻĄāĻžāϰ, āĻŦāĻžāĻāĻŋāĻĻā§āϰ āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āϝā§āĻ āĻĻāĻŋāϤ⧠āĻšāĻŦā§, āϤāĻžāĻ āĻĒā§āϰāĻĨāĻŽ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāύā§āϰ āĻĢāϞāĻžāĻĢāϞāĻāĻŋ āĻāĻĒāĻŋ āĻāϰ⧠āĻŦāĻžāĻāĻŋāĻā§āϞāĻŋāϤ⧠āĻāĻžāϰā§āϝāĻāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āϏā§āĻāĻāĻĒ, āĻāĻŽāĻŋ node1 āĻ āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāĻ:
# docker swarm init
Swarm initialized: current node (a5jpfrh5uvo7svzz1ajduokyq) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0c5mf7mvzc7o7vjk0wngno2dy70xs95tovfxbv4tqt9280toku-863hyosdlzvd76trfptd4xnzd xx.xx.xx.xx:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# docker swarm join-token managerāĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻĢāϞāĻžāĻĢāϞ āĻ āύā§āϞāĻŋāĻĒāĻŋ āĻāϰā§āύ, node2 āĻāĻŦāĻ node3 āĻ āĻāĻžāϞāĻžāύ:
# docker swarm join --token SWMTKN-x-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxx xx.xx.xx.xx:2377
This node joined a swarm as a manager.āĻāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻāϰā§, āĻāϏā§āύ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻā§āϞāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻļā§āϰ⧠āĻāϰāĻŋ, āĻ āύā§āϝāĻĨāĻžāϝāĻŧ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻž āύāĻž āĻĨāĻžāĻāϞā§, āύā§āĻĄ 1 āĻĨā§āĻā§ āĻāĻžāϰā§āϝāĻāϰ āĻāϰāĻž āĻāĻŽāĻžāύā§āĻĄāĻā§āϞāĻŋ āĻāĻžāϞ⧠āĻāϰāĻž āĻšāĻŦā§āĨ¤
āĻĒā§āϰāĻĨāĻŽāϤ, āĻāύāĻā§āĻāύāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžāĻ:
# docker network create --driver=overlay etcd
# docker network create --driver=overlay pgsql
# docker network create --driver=overlay redis
# docker network create --driver=overlay traefik
# docker network create --driver=overlay gitlabāϤāĻžāϰāĻĒāϰ⧠āĻāĻŽāϰāĻž āϏāĻžāϰā§āĻāĻžāϰāĻā§āϞāĻŋ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰāĻŋ, āϏāĻžāϰā§āĻāĻžāϰāĻā§āϞāĻŋāϤ⧠āĻāĻŋāĻā§ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻāĻŦāĻĻā§āϧ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ:
# docker node update --label-add nodename=node1 node1
# docker node update --label-add nodename=node2 node2
# docker node update --label-add nodename=node3 node3āĻāϰ āĻĒāϰā§, āĻāĻŽāϰāĻž etcd āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻŋ, āĻā§āĻāĻŋ āϏā§āĻā§āϰā§āĻ āϝāĻž Traefik āĻāĻŦāĻ Stolon āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤ Postgresql āĻāϰ āĻŽāϤā§, āĻāĻā§āϞāĻŋ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻŦāĻĻā§āϧ āĻāύā§āĻā§āĻāύāĻžāϰ āĻšāĻŦā§, āϤāĻžāĻ āĻāĻŽāϰāĻž āϏāĻŽāϏā§āϤ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻāĻžāϰā§āϝāĻāϰ āĻāϰāĻŋ:
# mkdir -p /srv/etcdāĻāϰ āĻĒāϰā§, etcd āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰā§āύ:
00etcd.yml
version: '3.7'
services:
etcd1:
image: quay.io/coreos/etcd:latest
hostname: etcd1
command:
- etcd
- --name=etcd1
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd1:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd1:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd1vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node1]
etcd2:
image: quay.io/coreos/etcd:latest
hostname: etcd2
command:
- etcd
- --name=etcd2
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd2:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd2:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd2vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node2]
etcd3:
image: quay.io/coreos/etcd:latest
hostname: etcd3
command:
- etcd
- --name=etcd3
- --data-dir=/data.etcd
- --advertise-client-urls=http://etcd3:2379
- --listen-client-urls=http://0.0.0.0:2379
- --initial-advertise-peer-urls=http://etcd3:2380
- --listen-peer-urls=http://0.0.0.0:2380
- --initial-cluster=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- --initial-cluster-state=new
- --initial-cluster-token=etcd-cluster
networks:
- etcd
volumes:
- etcd3vol:/data.etcd
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node3]
volumes:
etcd1vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
etcd2vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
etcd3vol:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/etcd"
networks:
etcd:
external: true# docker stack deploy --compose-file 00etcd.yml etcdāĻāĻŋāĻā§āĻā§āώāĻŖ āĻĒāϰā§, āĻāĻŽāϰāĻž āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻŋ āϝ⧠etcd āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻŦā§āĻĄāĻŧā§āĻā§:
# docker exec $(docker ps | awk '/etcd/ {print $1}') etcdctl member list
ade526d28b1f92f7: name=etcd1 peerURLs=http://etcd1:2380 clientURLs=http://etcd1:2379 isLeader=false
bd388e7810915853: name=etcd3 peerURLs=http://etcd3:2380 clientURLs=http://etcd3:2379 isLeader=false
d282ac2ce600c1ce: name=etcd2 peerURLs=http://etcd2:2380 clientURLs=http://etcd2:2379 isLeader=true
# docker exec $(docker ps | awk '/etcd/ {print $1}') etcdctl cluster-health
member ade526d28b1f92f7 is healthy: got healthy result from http://etcd1:2379
member bd388e7810915853 is healthy: got healthy result from http://etcd3:2379
member d282ac2ce600c1ce is healthy: got healthy result from http://etcd2:2379
cluster is healthyPostgresql āĻāϰ āĻāύā§āϝ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ, āϏāĻŽāϏā§āϤ āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāύ:
# mkdir -p /srv/pgsqlāĻĒāϰāĻŦāϰā§āϤā§, Postgresql āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύ:
01pgsql.yml
version: '3.7'
services:
pgsentinel:
image: sorintlab/stolon:master-pg10
command:
- gosu
- stolon
- stolon-sentinel
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
- --log-level=debug
networks:
- etcd
- pgsql
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 30s
order: stop-first
failure_action: pause
pgkeeper1:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper1
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper1
- --pg-repl-username=replica
- --uid=pgkeeper1
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper1:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node1]
pgkeeper2:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper2
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper2
- --pg-repl-username=replica
- --uid=pgkeeper2
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper2:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node2]
pgkeeper3:
image: sorintlab/stolon:master-pg10
hostname: pgkeeper3
command:
- gosu
- stolon
- stolon-keeper
- --pg-listen-address=pgkeeper3
- --pg-repl-username=replica
- --uid=pgkeeper3
- --pg-su-username=postgres
- --pg-su-passwordfile=/run/secrets/pgsql
- --pg-repl-passwordfile=/run/secrets/pgsql_repl
- --data-dir=/var/lib/postgresql/data
- --cluster-name=stolon-cluster
- --store-backend=etcdv3
- --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
environment:
- PGDATA=/var/lib/postgresql/data
volumes:
- pgkeeper3:/var/lib/postgresql/data
secrets:
- pgsql
- pgsql_repl
deploy:
replicas: 1
placement:
constraints: [node.labels.nodename == node3]
postgresql:
image: sorintlab/stolon:master-pg10
command: gosu stolon stolon-proxy --listen-address 0.0.0.0 --cluster-name stolon-cluster --store-backend=etcdv3 --store-endpoints http://etcd1:2379,http://etcd2:2379,http://etcd3:2379
networks:
- etcd
- pgsql
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 30s
order: stop-first
failure_action: rollback
volumes:
pgkeeper1:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
pgkeeper2:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
pgkeeper3:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/pgsql"
secrets:
pgsql:
file: "/srv/docker/postgres"
pgsql_repl:
file: "/srv/docker/replica"
networks:
etcd:
external: true
pgsql:
external: trueāĻāĻŽāϰāĻž āĻā§āĻĒāύā§āϝāĻŧāϤāĻž āϤā§āϰāĻŋ āĻāϰāĻŋ, āĻĢāĻžāĻāϞāĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻŋ:
# </dev/urandom tr -dc 234567890qwertyuopasdfghjkzxcvbnmQWERTYUPASDFGHKLZXCVBNM | head -c $(((RANDOM%3)+15)) > /srv/docker/replica
# </dev/urandom tr -dc 234567890qwertyuopasdfghjkzxcvbnmQWERTYUPASDFGHKLZXCVBNM | head -c $(((RANDOM%3)+15)) > /srv/docker/postgres
# docker stack deploy --compose-file 01pgsql.yml pgsqlāĻāĻŋāĻā§ āϏāĻŽāϝāĻŧ āĻĒāϰ⧠(āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻāĻāĻāĻĒā§āĻ āĻĻā§āĻā§āύ āĻĄāĻāĻžāϰ āĻĒāϰāĻŋāώā§āĻŦāĻž lsāϝ⧠āϏāĻŽāϏā§āϤ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻŦā§āĻĄāĻŧā§āĻā§) Postgresql āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻļā§āϰ⧠āĻāϰā§āύ:
# docker exec $(docker ps | awk '/pgkeeper/ {print $1}') stolonctl --cluster-name=stolon-cluster --store-backend=etcdv3 --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 initPostgresql āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āĻĒā§āϰāϏā§āϤā§āϤāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāĻā§āĻā§:
# docker exec $(docker ps | awk '/pgkeeper/ {print $1}') stolonctl --cluster-name=stolon-cluster --store-backend=etcdv3 --store-endpoints=http://etcd1:2379,http://etcd2:2379,http://etcd3:2379 status
=== Active sentinels ===
ID LEADER
26baa11d false
74e98768 false
a8cb002b true
=== Active proxies ===
ID
4d233826
9f562f3b
b0c79ff1
=== Keepers ===
UID HEALTHY PG LISTENADDRESS PG HEALTHY PG WANTEDGENERATION PG CURRENTGENERATION
pgkeeper1 true pgkeeper1:5432 true 2 2
pgkeeper2 true pgkeeper2:5432 true 2 2
pgkeeper3 true pgkeeper3:5432 true 3 3
=== Cluster Info ===
Master Keeper: pgkeeper3
===== Keepers/DB tree =====
pgkeeper3 (master)
ââpgkeeper2
ââpgkeeper1
āĻāĻŽāϰāĻž āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§ āĻĒāĻžāϤā§āϰ⧠āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻā§āϞāϤ⧠āĻā§āϰāĻžāĻĢāĻŋāĻ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻŋ:
03traefik.yml
version: '3.7'
services:
traefik:
image: traefik:latest
command: >
--log.level=INFO
--providers.docker=true
--entryPoints.web.address=:80
--providers.providersThrottleDuration=2
--providers.docker.watch=true
--providers.docker.swarmMode=true
--providers.docker.swarmModeRefreshSeconds=15s
--providers.docker.exposedbydefault=false
--accessLog.bufferingSize=0
--api=true
--api.dashboard=true
--api.insecure=true
networks:
- traefik
ports:
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
replicas: 3
placement:
constraints:
- node.role == manager
preferences:
- spread: node.id
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.example.com`)
- traefik.http.services.traefik.loadbalancer.server.port=8080
- traefik.docker.network=traefik
networks:
traefik:
external: true# docker stack deploy --compose-file 03traefik.yml traefikāĻāĻŽāϰāĻž āϰā§āĻĄāĻŋāϏ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻļā§āϰ⧠āĻāϰāĻŋ, āĻāϰ āĻāύā§āϝ āĻāĻŽāϰāĻž āϏāĻŽāϏā§āϤ āύā§āĻĄā§ āĻāĻāĻāĻŋ āϏā§āĻā§āϰā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻŋ:
# mkdir -p /srv/redis05redis.yml
version: '3.7'
services:
redis-master:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '6379:6379'
environment:
- REDIS_REPLICATION_MODE=master
- REDIS_PASSWORD=xxxxxxxxxxx
deploy:
mode: global
restart_policy:
condition: any
volumes:
- 'redis:/opt/bitnami/redis/etc/'
redis-replica:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '6379'
depends_on:
- redis-master
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis-master
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_PASSWORD=xxxxxxxxxxx
- REDIS_PASSWORD=xxxxxxxxxxx
deploy:
mode: replicated
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: any
redis-sentinel:
image: 'bitnami/redis:latest'
networks:
- redis
ports:
- '16379'
depends_on:
- redis-master
- redis-replica
entrypoint: |
bash -c 'bash -s <<EOF
"/bin/bash" -c "cat <<EOF > /opt/bitnami/redis/etc/sentinel.conf
port 16379
dir /tmp
sentinel monitor master-node redis-master 6379 2
sentinel down-after-milliseconds master-node 5000
sentinel parallel-syncs master-node 1
sentinel failover-timeout master-node 5000
sentinel auth-pass master-node xxxxxxxxxxx
sentinel announce-ip redis-sentinel
sentinel announce-port 16379
EOF"
"/bin/bash" -c "redis-sentinel /opt/bitnami/redis/etc/sentinel.conf"
EOF'
deploy:
mode: global
restart_policy:
condition: any
volumes:
redis:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: "/srv/redis"
networks:
redis:
external: true# docker stack deploy --compose-file 05redis.yml redisāĻĄāĻāĻžāϰ āϰā§āĻāĻŋāϏā§āĻā§āϰāĻŋ āϝā§āĻ āĻāϰā§āύ:
06registry.yml
version: '3.7'
services:
registry:
image: registry:2.6
networks:
- traefik
volumes:
- registry_data:/var/lib/registry
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
restart_policy:
condition: on-failure
labels:
- traefik.enable=true
- traefik.http.routers.registry.rule=Host(`registry.example.com`)
- traefik.http.services.registry.loadbalancer.server.port=5000
- traefik.docker.network=traefik
volumes:
registry_data:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/registry"
networks:
traefik:
external: true# mkdir /srv/docker/registry
# docker stack deploy --compose-file 06registry.yml registryāĻāĻŦāĻ āĻ āĻŦāĻļā§āώ⧠- āĻāĻŋāĻāϞā§āϝāĻžāĻŦ:
08gitlab-runner.yml
version: '3.7'
services:
gitlab:
image: gitlab/gitlab-ce:latest
networks:
- pgsql
- redis
- traefik
- gitlab
ports:
- 22222:22
environment:
GITLAB_OMNIBUS_CONFIG: |
postgresql['enable'] = false
redis['enable'] = false
gitlab_rails['registry_enabled'] = false
gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "XXXXXXXXXXX"
gitlab_rails['db_host'] = "postgresql"
gitlab_rails['db_port'] = "5432"
gitlab_rails['db_database'] = "gitlab"
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
gitlab_rails['redis_host'] = 'redis-master'
gitlab_rails['redis_port'] = '6379'
gitlab_rails['redis_password'] = 'xxxxxxxxxxx'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.yandex.ru"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "noreply@example.com"
gitlab_rails['smtp_password'] = "xxxxxxxxx"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['gitlab_email_from'] = 'noreply@example.com'
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
external_url 'http://gitlab.example.com/'
gitlab_rails['gitlab_shell_ssh_port'] = 22222
volumes:
- gitlab_conf:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
labels:
- traefik.enable=true
- traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)
- traefik.http.services.gitlab.loadbalancer.server.port=80
- traefik.docker.network=traefik
gitlab-runner:
image: gitlab/gitlab-runner:latest
networks:
- gitlab
volumes:
- gitlab_runner_conf:/etc/gitlab
- /var/run/docker.sock:/var/run/docker.sock
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
volumes:
gitlab_conf:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/conf"
gitlab_logs:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/logs"
gitlab_data:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/data"
gitlab_runner_conf:
driver: local
driver_opts:
type: none
o: bind
device: "/srv/docker/gitlab/runner"
networks:
pgsql:
external: true
redis:
external: true
traefik:
external: true
gitlab:
external: true# mkdir -p /srv/docker/gitlab/conf
# mkdir -p /srv/docker/gitlab/logs
# mkdir -p /srv/docker/gitlab/data
# mkdir -p /srv/docker/gitlab/runner
# docker stack deploy --compose-file 08gitlab-runner.yml gitlabāĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻāĻŦāĻ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻā§āϞāĻŋāϰ āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻ āĻŦāϏā§āĻĨāĻž:
# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lef9n3m92buq etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:latest
ij6uyyo792x5 etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:latest
fqttqpjgp6pp etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:latest
hq5iyga28w33 gitlab_gitlab replicated 1/1 gitlab/gitlab-ce:latest *:22222->22/tcp
dt7s6vs0q4qc gitlab_gitlab-runner replicated 1/1 gitlab/gitlab-runner:latest
k7uoezno0h9n pgsql_pgkeeper1 replicated 1/1 sorintlab/stolon:master-pg10
cnrwul4r4nse pgsql_pgkeeper2 replicated 1/1 sorintlab/stolon:master-pg10
frflfnpty7tr pgsql_pgkeeper3 replicated 1/1 sorintlab/stolon:master-pg10
x7pqqchi52kq pgsql_pgsentinel replicated 3/3 sorintlab/stolon:master-pg10
mwu2wl8fti4r pgsql_postgresql replicated 3/3 sorintlab/stolon:master-pg10
9hkbe2vksbzb redis_redis-master global 3/3 bitnami/redis:latest *:6379->6379/tcp
l88zn8cla7dc redis_redis-replica replicated 3/3 bitnami/redis:latest *:30003->6379/tcp
1utp309xfmsy redis_redis-sentinel global 3/3 bitnami/redis:latest *:30002->16379/tcp
oteb824ylhyp registry_registry replicated 1/1 registry:2.6
qovrah8nzzu8 traefik_traefik replicated 3/3 traefik:latest *:80->80/tcp, *:443->443/tcpāĻāϰ āĻāĻŋ āĻāύā§āύāϤāĻŋ āĻāϰāĻž āϝāĻžāϝāĻŧ? https āĻĒāĻžāϤā§āϰ⧠āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ Traefik āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻž, Postgresql āĻāĻŦāĻ Redis āĻāϰ āĻāύā§āϝ tls āĻāύāĻā§āϰāĻŋāĻĒāĻļāύ āϝā§āĻ āĻāϰā§āύāĨ¤ āĻāĻŋāύā§āϤ⧠āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§, āĻāĻĒāύāĻŋ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāĻāĻŋ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰā§āĻĻā§āϰ āĻāĻāĻāĻŋ PoC āĻšāĻŋāϏāĻžāĻŦā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāϏā§āύ āĻāĻāύ āĻĄāĻāĻžāϰā§āϰ āĻŦāĻŋāĻāϞā§āĻĒāĻā§āϞāĻŋ āĻĻā§āĻāĻŋāĨ¤
āĻĒā§āĻĄāĻŽā§āϝāĻžāύ
āĻĒāĻĄ āĻĻā§āĻŦāĻžāϰāĻž āĻā§āώā§āĻ ā§āĻŦāĻĻā§āϧ āĻĒāĻžāϤā§āϰ⧠āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻāϰā§āĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āϏā§āĻĒāϰāĻŋāĻāĻŋāϤ āĻāĻā§āĻāĻŋāύ (āĻĒāĻĄ, āĻāĻāϤā§āϰ⧠āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻĒāĻžāϤā§āϰā§āϰ āĻĻāϞ)āĨ¤ āĻĄāĻāĻžāϰā§āϰ āĻŦāĻŋāĻĒāϰā§āϤā§, āĻĒāĻžāϤā§āϰ⧠āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻā§āύāĻ āĻĒāϰāĻŋāώā§āĻŦāĻžāϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ āύāĻž, āϏāĻŽāϏā§āϤ āĻāĻžāĻ āϞāĻŋāĻŦāĻĒāĻĄ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ Go-āϤ⧠āϞā§āĻāĻž, runC-āĻāϰ āĻŽāϤ⧠āĻāύā§āĻā§āĻāύāĻžāϰ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ OCI āĻāĻŽāĻĒā§āϞāĻžāϝāĻŧā§āύā§āĻ āϰāĻžāύāĻāĻžāĻāĻŽ āĻĒā§āϰāϝāĻŧā§āĻāύāĨ¤

āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§ āĻĒāĻĄāĻŽā§āϝāĻžāύā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻž āĻĄāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻĻā§āĻļā§āϝāĻĒā§āϰā§āĻŖ, āϝ⧠āĻĒāϰāĻŋāĻŽāĻžāĻŖā§ āĻāĻĒāύāĻŋ āĻāĻāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ (āĻāĻ āύāĻŋāĻŦāύā§āϧā§āϰ āϞā§āĻāĻ āϏāĻš āĻ āύā§āĻā§āĻ āĻāĻāĻŋ āĻā§āώā§āĻāĻž āĻāϰā§āĻā§āύ āĻŦāϞ⧠āĻĻāĻžāĻŦāĻŋ āĻāϰā§āĻā§āύ):
$ alias docker=podmanāĻāĻŦāĻ āĻāĻĒāύāĻŋ āĻāĻžāĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§, āĻĒāĻĄāĻŽā§āϝāĻžāύā§āϰ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻā§āĻŦāĻ āĻāĻāϰā§āώāĻŖā§āϝāĻŧ, āĻāĻžāϰāĻŖ āĻā§āĻŦāĻžāϰāύā§āĻāϏā§āϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āϏāĻāϏā§āĻāϰāĻŖāĻā§āϞāĻŋ āϝāĻĻāĻŋ āĻĄāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰā§, āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻžāϝāĻŧ 2015 āϏāĻžāϞ āĻĨā§āĻā§, āĻāύā§āĻā§āĻāύāĻžāϰ āĻāϝāĻŧāĻžāϰā§āϞā§āĻĄāĻā§ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄāĻžāĻāĻ āĻāϰāĻžāϰ āĻĒāϰ (āĻāϏāĻŋāĻāĻ - āĻāĻĒā§āύ āĻāύā§āĻā§āĻāύāĻžāϰ āĻāύāĻŋāĻļāĻŋāϝāĻŧā§āĻāĻŋāĻ) āĻāĻŦāĻ āĻĄāĻāĻžāϰāĻā§ āĻāύā§āĻā§āĻāύāĻžāϰāĻĄ āĻāĻŦāĻ āϰāĻžāύāϏāĻŋ-āϤ⧠āĻŦāĻŋāĻāĻā§āϤ āĻāϰāĻžāϰ āĻĒāϰ, āĻāĻāĻāĻŋ āĻŦāĻŋāĻāϞā§āĻĒ āĻā§āĻŦāĻžāϰāύā§āĻā§ āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻĄāĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāĻā§āĻā§: CRI-OāĨ¤ āĻāĻ āĻŦāĻŋāώāϝāĻŧā§ āĻĒāĻĄāĻŽā§āϝāĻžāύ āĻšāϞ āĻĄāĻāĻžāϰā§āϰ āĻŦāĻŋāĻāϞā§āĻĒ, āĻāύā§āĻā§āĻāύāĻžāϰ āĻā§āϰā§āĻĒāĻŋāĻ āϏāĻš āĻā§āĻŦāĻžāϰāύā§āĻāϏā§āϰ āύā§āϤāĻŋāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻŽāĻŋāϤ, āĻāĻŋāύā§āϤ⧠āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻŽā§āϞ āϞāĻā§āώā§āϝ āĻšāϞ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻāĻžāĻĄāĻŧāĻžāĻ āĻĄāĻāĻžāϰ-āϏā§āĻāĻžāĻāϞā§āϰ āĻĒāĻžāϤā§āϰ āĻāĻžāϞāĻžāύā§āĨ¤ āϏā§āϏā§āĻĒāώā§āĻ āĻāĻžāϰāĻŖā§, āĻā§āύāĻ āĻāĻžāĻāĻ āĻŽā§āĻĄ āύā§āĻ, āϝā§āĻšā§āϤ⧠āĻŦāĻŋāĻāĻžāĻļāĻāĻžāϰā§āϰāĻž āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻŦāϞ⧠āϝ⧠āĻāĻĒāύāĻžāϰ āϝāĻĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ āϤāĻŦā§ āĻā§āĻŦāĻžāϰāύā§āĻāϏ āύāĻŋāύāĨ¤
āĻŦāĻŋāύā§āϝāĻžāϏ
āĻāύāϏā§āĻāϞā§āĻļāύā§āϰ āĻāύā§āϝ Centos ā§, āĻļā§āϧ⧠āĻāĻā§āϏāĻā§āϰāĻžāϏ āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋāĻāĻŋ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰā§āύ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ⧠āĻāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻŦāĻāĻŋāĻā§ āĻāύāϏā§āĻāϞ āĻāϰā§āύ:
# yum -y install podmanāĻ āύā§āϝāĻžāύā§āϝ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ
āĻĒāĻĄāĻŽā§āϝāĻžāύ āϏāĻŋāϏā§āĻā§āĻŽāĻĄā§āϰ āĻāύā§āϝ āĻāĻāύāĻŋāĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāĻāĻāĻžāĻŦā§ āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāĻŦā§āĻ āĻāϰāĻžāϰ āĻĒāϰ⧠āĻāύā§āĻā§āĻāύāĻžāϰ āĻļā§āϰ⧠āĻāϰāĻžāϰ āϏāĻŽāϏā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻāϰā§āĨ¤ āĻ āϤāĻŋāϰāĻŋāĻā§āϤāĻāĻžāĻŦā§, systemd āĻā§ āĻāύā§āĻā§āĻāύāĻžāϰ⧠pid 1 āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻā§āώāĻŖāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤ āĻāύā§āĻā§āĻāύāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻŦāĻŋāϞā§āĻĄāĻžāĻš āĻā§āϞ āϰāϝāĻŧā§āĻā§, āĻāĻāĻžāĻĄāĻŧāĻžāĻ āϰāϝāĻŧā§āĻā§ āϤā§āϤā§āϝāĻŧ-āĻĒāĻā§āώā§āϰ āϏāϰāĻā§āĻāĻžāĻŽ - āĻĄāĻāĻžāϰ-āĻāĻŽā§āĻĒā§āĻā§āϰ āĻ ā§āϝāĻžāύāĻžāϞāĻāĻā§āϞāĻŋ, āϝāĻž āĻā§āĻŦāĻžāϰāύā§āĻā§āϏ-āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻ āϤā§āϰāĻŋ āĻāϰā§, āϤāĻžāĻ āĻĒāĻĄāĻŽā§āϝāĻžāύ āĻĨā§āĻā§ āĻā§āĻŦāĻžāϰāύā§āĻāϏ⧠āϰā§āĻĒāĻžāύā§āϤāϰ āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āϏāĻšāĻāĨ¤
āĻĒāĻĄāĻŽā§āϝāĻžāύā§āϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻāĻŋ
āϝā§āĻšā§āϤ⧠āĻā§āύ āĻāĻžāĻāĻ āĻŽā§āĻĄ āύā§āĻ (āĻā§āύ āĻā§āϞāĻžāϏā§āĻāĻžāϰā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϞ⧠āĻāĻāĻŋ āĻā§āĻŦāĻžāϰāύā§āĻā§ āϏā§āϝā§āĻāĻ āĻāϰāĻžāϰ āĻāĻĨāĻž), āĻāĻŽāϰāĻž āĻāĻāĻŋāĻā§ āĻāϞāĻžāĻĻāĻž āĻĒāĻžāϤā§āϰ⧠āĻāĻāϤā§āϰ āĻāϰāĻŦāĨ¤
āĻĒāĻĄāĻŽā§āϝāĻžāύ-āĻāĻŽā§āĻĒā§āĻ āĻāύāϏā§āĻāϞ āĻāϰā§āύ:
# yum -y install python3-pip
# pip3 install podman-composeāĻĒāĻĄāĻŽā§āϝāĻžāύā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻžāĻĒā§āϤ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻĢāĻžāĻāϞāĻāĻŋ āϏāĻžāĻŽāĻžāύā§āϝ āĻāĻŋāύā§āύ, āϝā§āĻŽāύ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻāϞāĻŋāĻāĻŽ āĻŦāĻŋāĻāĻžāĻ āϏāϰāĻžāϏāϰāĻŋ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻŦāĻŋāĻāĻžāĻā§ āϏāϰāĻžāϤ⧠āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤
gitlab-podman.yml
version: '3.7'
services:
gitlab:
image: gitlab/gitlab-ce:latest
hostname: gitlab.example.com
restart: unless-stopped
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['gitlab_shell_ssh_port'] = 22222
ports:
- "80:80"
- "22222:22"
volumes:
- /srv/podman/gitlab/conf:/etc/gitlab
- /srv/podman/gitlab/data:/var/opt/gitlab
- /srv/podman/gitlab/logs:/var/log/gitlab
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
restart: unless-stopped
depends_on:
- gitlab
volumes:
- /srv/podman/gitlab/runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
networks:
- gitlab
networks:
gitlab:# podman-compose -f gitlab-runner.yml -d upāĻāĻžāĻā§āϰ āĻĢāϞāĻžāĻĢāϞ:
# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da53da946c01 docker.io/gitlab/gitlab-runner:alpine run --user=gitlab... About a minute ago Up About a minute ago 0.0.0.0:22222->22/tcp, 0.0.0.0:80->80/tcp root_gitlab-runner_1
781c0103c94a docker.io/gitlab/gitlab-ce:latest /assets/wrapper About a minute ago Up About a minute ago 0.0.0.0:22222->22/tcp, 0.0.0.0:80->80/tcp root_gitlab_1āĻāϞā§āύ āĻĻā§āĻāĻŋ āĻāĻāĻŋ systemd āĻāĻŦāĻ kubernetes-āĻāϰ āĻāύā§āϝ āĻā§ āϤā§āϰāĻŋ āĻāϰāĻŦā§, āĻāϰ āĻāύā§āϝ āĻāĻŽāĻžāĻĻā§āϰ āĻĒāĻĄā§āϰ āύāĻžāĻŽ āĻŦāĻž āĻāĻāĻĄāĻŋ āĻā§āĻāĻā§ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§:
# podman pod ls
POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID
71fc2b2a5c63 root Running 11 minutes ago 3 db40ab8bf84bāĻā§āĻŦāĻžāϰāύā§āĻāϏ:
# podman generate kube 71fc2b2a5c63
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.6.4
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-07-29T19:22:40Z"
labels:
app: root
name: root
spec:
containers:
- command:
- /assets/wrapper
env:
- name: PATH
value: /opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: HOSTNAME
value: gitlab.example.com
- name: container
value: podman
- name: GITLAB_OMNIBUS_CONFIG
value: |
gitlab_rails['gitlab_shell_ssh_port'] = 22222
- name: LANG
value: C.UTF-8
image: docker.io/gitlab/gitlab-ce:latest
name: rootgitlab1
ports:
- containerPort: 22
hostPort: 22222
protocol: TCP
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
volumeMounts:
- mountPath: /var/opt/gitlab
name: srv-podman-gitlab-data
- mountPath: /var/log/gitlab
name: srv-podman-gitlab-logs
- mountPath: /etc/gitlab
name: srv-podman-gitlab-conf
workingDir: /
- command:
- run
- --user=gitlab-runner
- --working-directory=/home/gitlab-runner
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: HOSTNAME
- name: container
value: podman
image: docker.io/gitlab/gitlab-runner:alpine
name: rootgitlab-runner1
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
volumeMounts:
- mountPath: /etc/gitlab-runner
name: srv-podman-gitlab-runner
- mountPath: /var/run/docker.sock
name: var-run-docker.sock
workingDir: /
volumes:
- hostPath:
path: /srv/podman/gitlab/runner
type: Directory
name: srv-podman-gitlab-runner
- hostPath:
path: /var/run/docker.sock
type: File
name: var-run-docker.sock
- hostPath:
path: /srv/podman/gitlab/data
type: Directory
name: srv-podman-gitlab-data
- hostPath:
path: /srv/podman/gitlab/logs
type: Directory
name: srv-podman-gitlab-logs
- hostPath:
path: /srv/podman/gitlab/conf
type: Directory
name: srv-podman-gitlab-conf
status: {}āϏāĻŋāϏā§āĻā§āĻŽāĻĄ:
# podman generate systemd 71fc2b2a5c63
# pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
Documentation=man:podman-generate-systemd(1)
Requires=container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
Before=container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa
ExecStop=/usr/bin/podman stop -t 10 db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/db40ab8bf84bf35141159c26cb6e256b889c7a98c0418eee3c4aa683c14fccaa/userdata/conmon.pid
[Install]
WantedBy=multi-user.target
# container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman container-da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864.service
Documentation=man:podman-generate-systemd(1)
RefuseManualStart=yes
RefuseManualStop=yes
BindsTo=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
After=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864
ExecStop=/usr/bin/podman stop -t 10 da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/da53da946c01449f500aa5296d9ea6376f751948b17ca164df438b7df6607864/userdata/conmon.pid
[Install]
WantedBy=multi-user.target
# container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service
# autogenerated by Podman 1.6.4
# Thu Jul 29 15:23:28 EDT 2020
[Unit]
Description=Podman container-781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3.service
Documentation=man:podman-generate-systemd(1)
RefuseManualStart=yes
RefuseManualStop=yes
BindsTo=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
After=pod-71fc2b2a5c6346f0c1c86a2dc45dbe78fa192ea02aac001eb8347ccb8c043c26.service
[Service]
Restart=on-failure
ExecStart=/usr/bin/podman start 781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3
ExecStop=/usr/bin/podman stop -t 10 781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3
KillMode=none
Type=forking
PIDFile=/var/run/containers/storage/overlay-containers/781c0103c94aaa113c17c58d05ddabf8df4bf39707b664abcf17ed2ceff467d3/userdata/conmon.pid
[Install]
WantedBy=multi-user.targetāĻĻā§āϰā§āĻāĻžāĻā§āϝāĻŦāĻļāϤ, āĻāύā§āĻā§āĻāύāĻžāϰ āĻāĻžāϞ⧠āĻāϰāĻž āĻāĻžāĻĄāĻŧāĻžāĻ, āϏāĻŋāϏā§āĻā§āĻŽāĻĄā§āϰ āĻāύā§āϝ āĻāϤā§āĻĒāύā§āύ āĻāĻāύāĻŋāĻ āĻ āύā§āϝ āĻāĻŋāĻā§ āĻāϰ⧠āύāĻž (āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻ āϧāϰāύā§āϰ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻšāϞ⧠āĻĒā§āϰāĻžāύ⧠āĻĒāĻžāϤā§āϰ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰāĻž), āϤāĻžāĻ āĻāĻĒāύāĻžāĻā§ āĻāĻ āϧāϰāύā§āϰ āĻāĻŋāύāĻŋāϏāĻā§āϞāĻŋ āύāĻŋāĻā§āĻā§ āϝā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
āύā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§, āĻāύā§āĻā§āĻāύāĻžāϰāĻā§āϞāĻŋ āĻā§ āϤāĻž āĻā§āώā§āĻāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒāĻĄāĻŽā§āϝāĻžāύ āϝāĻĨā§āώā§āĻ, āĻĄāĻāĻžāϰ-āĻāĻŽā§āĻĒā§āĻā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻžāύ⧠āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύāĻā§āϞāĻŋ āϏā§āĻĨāĻžāύāĻžāύā§āϤāϰ āĻāϰā§āύ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ⧠āĻā§āĻŦāĻžāϰāύā§āĻāϏā§āϰ āĻĻāĻŋāĻā§ āϝāĻžāύ, āϝāĻĻāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ, āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰā§, āĻŦāĻž āĻĄāĻāĻžāϰā§āϰ āĻāύā§āϝ āϏāĻšāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ āĻŦāĻŋāĻāϞā§āĻĒ āĻĒāĻžāύ⧎
rkt
āĻĒā§āϰāĻāϞā§āĻĒāĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧ āĻāϝāĻŧ āĻŽāĻžāϏ āĻāĻā§ āϰā§āĻĄāĻšā§āϝāĻžāĻ āĻāĻāĻŋ āĻā§āύāĻžāϰ āĻāĻžāϰāĻŖā§, āϤāĻžāĻ āĻāĻŽāĻŋ āĻāĻāĻŋāϤ⧠āĻāϰāĻ āĻŦāĻŋāĻļāĻĻā§ āĻĨāĻžāĻāĻŦ āύāĻžāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āĻŦ āĻāĻžāϞ āĻāĻžāĻĒ āĻĢā§āϞā§āĻā§, āϤāĻŦā§ āĻĄāĻāĻžāϰā§āϰ āϤā§āϞāύāĻžāϝāĻŧ, āĻāĻŦāĻ āĻāϰāĻ āĻŦā§āĻļāĻŋ āĻĒāĻĄāĻŽā§āϝāĻžāύā§āϰ āϏāĻžāĻĨā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻŽā§āĻŦāĻŋāύā§āϰ āĻŽāϤ⧠āĻĻā§āĻāĻžāϝāĻŧāĨ¤ Rkt āĻāϰ āĻāĻĒāϰ⧠āĻāĻāĻāĻŋ CoreOS āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻļāύ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ (āϝāĻĻāĻŋāĻ āϤāĻžāĻĻā§āϰ āĻŽā§āϞāϤ āĻĄāĻāĻžāϰ āĻāĻŋāϞ), āĻāĻŋāύā§āϤ⧠āĻāĻāĻŋāĻ RedHat āĻā§āύāĻžāϰ āĻĒāϰ⧠āĻļā§āώ āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤
āĻĒāϞāĻžāĻļ
āĻ āϧāĻŋāĻ , āϝāĻžāϰ āϞā§āĻāĻ āĻļā§āϧ⧠āĻĒāĻžāϤā§āϰ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻŦāĻ āĻāĻžāϞāĻžāϤ⧠āĻā§āϝāĻŧā§āĻāĻŋāϞā§āύāĨ¤ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύ āĻāĻŦāĻ āĻā§āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻŋāĻāĻžāϰ āĻāϰā§, āϞā§āĻāĻ āĻŽāĻžāύāĻā§āϞāĻŋ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύāύāĻŋ, āϤāĻŦā§ āĻā§āĻŦāϞ āύāĻŋāĻā§āϰ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ āϞā§āĻāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϝāĻŧā§āĻāĻŋāϞā§āύ, āϝāĻž āύā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§ āϤāĻŋāύāĻŋ āĻāϰā§āĻāĻŋāϞā§āύāĨ¤
āϤāĻĨā§āϝāĻ
āĻā§āĻŦāĻžāϰāύā§āĻāϏā§āϰ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻā§āĻŦ āĻāĻāϰā§āώāĻŖā§āϝāĻŧ: āĻāĻāĻĻāĻŋāĻā§, āĻĄāĻāĻžāϰā§āϰ āϏāĻžāĻĨā§, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰ (āϏā§āϝāĻŧāĻžāϰā§āĻŽ āĻŽā§āĻĄā§) āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝāĻžāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻāĻĒāύāĻŋ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻāĻĻā§āϰ āĻāύā§āϝ āĻāϤā§āĻĒāĻžāĻĻāύ āĻĒāϰāĻŋāĻŦā§āĻļāĻ āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻāĻŋ āĻŦāĻŋāĻļā§āώāϤ āĻā§āĻ āĻĻāϞāĻā§āϞāĻŋāϰ āĻāύā§āϝ āϏāϤā§āϝ (3-5 āĻāύ ), āĻ āĻĨāĻŦāĻž āĻāĻāĻāĻŋ āĻā§āĻ āϏāĻžāĻŽāĻā§āϰāĻŋāĻ āϞā§āĻĄ āϏāĻš, āĻŦāĻž āĻāĻā§āĻ āϞā§āĻĄ āϏāĻš Kubernetes āϏā§āĻ āĻāĻĒ āĻāϰāĻžāϰ āĻāĻāĻŋāϞāϤāĻž āĻŦā§āĻāĻžāϰ āĻāĻā§āĻāĻžāϰ āĻ āĻāĻžāĻŦāĨ¤
āĻĒāĻĄāĻŽā§āϝāĻžāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏāĻžāĻŽāĻā§āĻāϏā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻāϰ⧠āύāĻž, āϤāĻŦā§ āĻāĻāĻŋāϰ āĻāĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āϏā§āĻŦāĻŋāϧāĻž āϰāϝāĻŧā§āĻā§ - āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āϏāϰāĻā§āĻāĻžāĻŽ (āĻŦāĻŋāϞā§āĻĄāĻžāĻš āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ) āϏāĻš āĻā§āĻŦāĻžāϰāύā§āĻāϏā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖāĨ¤ āĻ āϤāĻāĻŦ, āĻāĻŽāĻŋ āύāĻŋāĻŽā§āύāϰā§āĻĒ āĻāĻžāĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāϰāĻā§āĻāĻžāĻŽā§āϰ āĻĒāĻāύā§āĻĻā§āϰ āϏāĻžāĻĨā§ āϝā§āĻāĻžāϝā§āĻ āĻāϰāĻŦ: āĻā§āĻ āĻĻāϞāĻā§āϞāĻŋāϰ āĻāύā§āϝ, āĻŦāĻž āĻāĻāĻāĻŋ āϏā§āĻŽāĻŋāϤ āĻŦāĻžāĻā§āĻā§āϰ āϏāĻžāĻĨā§ - āĻĄāĻāĻžāϰ (āĻāĻāĻāĻŋ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āĻāĻžāĻāĻ āĻŽā§āĻĄ āϏāĻš), āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āϞā§āĻāĻžāϞāĻšā§āϏā§āĻā§ āύāĻŋāĻā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻāĻžāĻļ āĻāϰāĻžāϰ āĻāύā§āϝ - āĻĒāĻĄāĻŽā§āϝāĻžāύ āĻāĻŽāϰā§āĻĄāϏ āĻāĻŦāĻ āĻ āύā§āϝ āϏāĻŦāĻžāϰ āĻāύā§āϝ - āĻā§āĻŦāĻžāϰāύā§āĻāϏāĨ¤
āĻāĻŽāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āύāĻ āϝ⧠āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻĄāĻāĻžāϰā§āϰ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻŦāĻĻāϞāĻžāĻŦā§ āύāĻž, āĻāĻžāϰāĻŖ āϤāĻžāϰāĻž āĻĒāĻĨāĻŋāĻā§ā§ āĻāĻŦāĻ āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āϤāĻžāϰāĻž āĻā§āϰāĻŽāĻžāύā§āĻŦāϝāĻŧā§ āĻŽāĻžāύāϏāĻŽā§āĻŽāϤ āĻšāϝāĻŧā§ āĻāĻ āĻā§, āĻāĻŋāύā§āϤ⧠āĻĒāĻĄāĻŽā§āϝāĻžāύ, āϤāĻžāϰ āϏāĻŽāϏā§āϤ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻž āϏāϤā§āϤā§āĻŦā§āĻ (āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻžāĻ āĻāϰāĻžāϰ āĻā§āώā§āϤā§āϰā§) Linux(āϝā§āĻšā§āϤ⧠āĻā§āύ⧠āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻŋāĻ, āĻ ā§āϝāĻžāϏā§āĻŽā§āĻŦāϞāĻŋ āĻāĻŦāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻāĻžāϰā§āϝāĻā§āϰāĻŽ āĻĨāĻžāϰā§āĻĄ-āĻĒāĻžāϰā§āĻāĻŋ āϏāϞāĻŋāĻāĻļāύ āĻĻā§āĻŦāĻžāϰāĻž āĻĒāϰāĻŋāĻāĻžāϞāĻŋāϤ āĻšāϝāĻŧ āύāĻž) āĻāĻŦāĻŋāώā§āϝ⧠āĻāϰāĻ āϏā§āĻĒāώā§āĻ, āϤāĻžāĻ āĻāĻŽāĻŋ āϏāĻŦāĻžāĻāĻā§ āĻāĻŽā§āύā§āĻā§ āĻāĻ āĻĢāϞāĻžāĻĢāϞāĻā§āϞ⧠āύāĻŋāϝāĻŧā§ āĻāϞā§āĻāύāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻŽāύā§āϤā§āϰāĻŖ āĻāĻžāύāĻžāĻā§āĻāĻŋāĨ¤
āĻĻā§āϰāώā§āĻāĻŦā§āϝ 3 āĻāĻāϏā§āĻ āĻāĻŽāϰāĻž āĻāĻžāϞ⧠āĻāϰāĻŋ "āϝā§āĻāĻžāύ⧠āĻāĻĒāύāĻŋ āϤāĻžāϰ āĻāĻžāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰāĻ āĻāĻžāύāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻŽāϰāĻž āĻāϰ āϏāĻŽāϏā§āϤ āϏāϰāĻā§āĻāĻžāĻŽ āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāϰāĻŦ: āĻŽā§āϞāĻŋāĻ āĻŦāĻŋāĻŽā§āϰā§āϤāϤāĻž āĻĨā§āĻā§ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ, āĻŦāĻŋāĻāĻŋāύā§āύ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻŦāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ āĻāĻžāώāĻžāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏā§āĻā§āώā§āĻŽāϤāĻžāĨ¤ āĻāĻĒāύāĻŋ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāϰ āϏāĻžāĻĨā§ āĻĒāϰāĻŋāĻāĻŋāϤ āĻšāĻŦā§āύ āĻāĻŦāĻ āĻā§āĻĨāĻžāϝāĻŧ āĻāĻŦāĻ āĻā§āĻāĻžāĻŦā§ āĻĄāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§ āϤāĻž āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻŽāϰāĻž āϏā§āϰāĻž āĻ āύā§āĻļā§āϞāύā§āϰ āĻā§āώā§āϤā§āϰā§āĻ āĻļā§āϝāĻŧāĻžāϰ āĻāϰāĻŦāĨ¤
āĻŽā§āĻā§āϤāĻŋāϰ āĻāĻā§ āĻĒā§āϰāĻŋ-āĻ āϰā§āĻĄāĻžāϰ āĻāϰāĻ: 5000 āϰā§āĻŦā§āϞāĨ¤ "āĻĄāĻāĻžāϰ āĻāĻŋāĻĄāĻŋāĻ āĻā§āϰā§āϏ" āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻĒāĻžāĻāϝāĻŧāĻž āϝāĻžāĻŦā§ .
āĻāϤā§āϏ: www.habr.com
