{"id":34968,"date":"2024-09-11T14:45:54","date_gmt":"2024-09-11T07:45:54","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/11\/a-beginners-guide-to-salt\/"},"modified":"2024-09-11T14:45:54","modified_gmt":"2024-09-11T07:45:54","slug":"a-beginners-guide-to-salt","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/09\/11\/a-beginners-guide-to-salt\/","title":{"rendered":"H\u01b0\u1edbng d\u1eabn Salt cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u"},"content":{"rendered":"<p><a href=\"https:\/\/www.saltproject.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Salt<\/a>&nbsp;(c\u00f2n \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>SaltStack<\/em>&nbsp;) l\u00e0 m\u1ed9t h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh v\u00e0 \u0111i\u1ec1u ph\u1ed1i d\u1ef1a tr\u00ean Python. Salt s\u1eed d\u1ee5ng m\u00f4 h\u00ecnh master\/client trong \u0111\u00f3 m\u1ed9t m\u00e1y ch\u1ee7 Salt&nbsp;<em>master<\/em>&nbsp;chuy\u00ean d\u1ee5ng qu\u1ea3n l\u00fd m\u1ed9t ho\u1eb7c nhi\u1ec1u m\u00e1y ch\u1ee7 Salt&nbsp;<em>minion<\/em>&nbsp;. Hai trong s\u1ed1 c\u00e1c c\u00f4ng vi\u1ec7c ch\u00ednh c\u1ee7a Salt l\u00e0:<\/p>\n<ul>\n<li>Th\u1ef1c hi\u1ec7n l\u1ec7nh t\u1eeb xa tr\u00ean m\u1ed9t nh\u00f3m minion<\/li>\n<li><em>\u00c1p d\u1ee5ng tr\u1ea1ng th\u00e1i<\/em>&nbsp;Salt&nbsp;cho m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c minion (th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh<\/em>&nbsp;)<\/li>\n<\/ul>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd gi\u1edbi thi\u1ec7u nh\u1eefng kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i m\u00e0 Salt s\u1eed d\u1ee5ng \u0111\u1ec3 th\u1ef1c hi\u1ec7n nh\u1eefng c\u00f4ng vi\u1ec7c n\u00e0y.<\/p>\n<h2 id=\"masters-and-minions\">B\u1eadc th\u1ea7y v\u00e0 tay sai<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#masters-and-minions\"><\/a><\/h2>\n<p>Salt master l\u00e0 m\u1ed9t m\u00e1y ch\u1ee7 ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t trung t\u00e2m ch\u1ec9 huy v\u00e0 \u0111i\u1ec1u khi\u1ec3n cho c\u00e1c minion c\u1ee7a n\u00f3, v\u00e0 l\u00e0 n\u01a1i c\u00e1c l\u1ec7nh&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#remote-execution\">th\u1ef1c thi t\u1eeb xa<\/a>&nbsp;c\u1ee7a Salt \u0111\u01b0\u1ee3c ch\u1ea1y. V\u00ed d\u1ee5, l\u1ec7nh n\u00e0y b\u00e1o c\u00e1o m\u1ee9c s\u1eed d\u1ee5ng \u0111\u0129a hi\u1ec7n t\u1ea1i cho m\u1ed7i minion m\u00e0 master \u0111i\u1ec1u khi\u1ec3n:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' disk.usage\n<\/code><\/pre>\n<p>C\u00f3 nhi\u1ec1u l\u1ec7nh kh\u00e1c c\u00f3 s\u1eb5n. L\u1ec7nh n\u00e0y c\u00e0i \u0111\u1eb7t NGINX tr\u00ean minion c\u00f3 t\u00ean&nbsp;<code>webserver1<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>salt 'webserver1' pkg.install nginx\n<\/code><\/pre>\n<p>Salt minion l\u00e0 m\u00e1y ch\u1ee7 th\u1ef1c s\u1ef1 ch\u1ea1y c\u00e1c \u1ee9ng d\u1ee5ng v\u00e0 d\u1ecbch v\u1ee5 c\u1ee7a b\u1ea1n. M\u1ed7i minion c\u00f3 m\u1ed9t ID \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh cho n\u00f3 (c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng t\u1ea1o t\u1eeb t\u00ean m\u00e1y ch\u1ee7 c\u1ee7a minion) v\u00e0 Salt master c\u00f3 th\u1ec3 tham chi\u1ebfu \u0111\u1ebfn ID n\u00e0y \u0111\u1ec3 nh\u1eafm&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#targeting-minions\">m\u1ee5c ti\u00eau c\u00e1c l\u1ec7nh \u0111\u1ebfn c\u00e1c minion c\u1ee5 th\u1ec3<\/a>&nbsp;.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Khi s\u1eed d\u1ee5ng Salt, b\u1ea1n n\u00ean c\u1ea5u h\u00ecnh v\u00e0 qu\u1ea3n l\u00fd m\u00e1y ch\u1ee7 minion c\u1ee7a m\u00ecnh t\u1eeb m\u00e1y ch\u1ee7 ch\u00ednh c\u00e0ng nhi\u1ec1u c\u00e0ng t\u1ed1t, thay v\u00ec \u0111\u0103ng nh\u1eadp tr\u1ef1c ti\u1ebfp v\u00e0o m\u00e1y ch\u1ee7 qua SSH ho\u1eb7c giao th\u1ee9c kh\u00e1c.<\/p>\n<p>\u0110\u1ec3 k\u00edch ho\u1ea1t t\u1ea5t c\u1ea3 c\u00e1c ch\u1ee9c n\u0103ng n\u00e0y, m\u00e1y ch\u1ee7 Salt master ch\u1ea1y m\u1ed9t daemon c\u00f3 t\u00ean l\u00e0&nbsp;<strong>salt-master<\/strong>&nbsp;v\u00e0 c\u00e1c m\u00e1y ch\u1ee7 Salt minion ch\u1ea1y m\u1ed9t daemon c\u00f3 t\u00ean l\u00e0&nbsp;<strong>salt-minion<\/strong>&nbsp;.<\/p>\n<h3 id=\"authentication\">X\u00e1c th\u1ef1c<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#authentication\"><\/a><\/h3>\n<p>Giao ti\u1ebfp gi\u1eefa master v\u00e0 minion \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n qua giao th\u1ee9c truy\u1ec1n t\u1ea3i&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/development\/topology.html\" target=\"_blank\" rel=\"noreferrer noopener\">ZeroMQ<\/a>&nbsp;v\u00e0 m\u1ecdi giao ti\u1ebfp \u0111\u1ec1u \u0111\u01b0\u1ee3c m\u00e3 h\u00f3a b\u1eb1ng c\u1eb7p kh\u00f3a c\u00f4ng khai\/ri\u00eang t\u01b0. M\u1ed9t c\u1eb7p kh\u00f3a \u0111\u01b0\u1ee3c t\u1ea1o ra b\u1edfi minion khi Salt \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t l\u1ea7n \u0111\u1ea7u ti\u00ean tr\u00ean \u0111\u00f3, sau \u0111\u00f3 minion s\u1ebd g\u1eedi kh\u00f3a c\u00f4ng khai c\u1ee7a m\u00ecnh \u0111\u1ebfn master. B\u1ea1n s\u1ebd c\u1ea7n ch\u1ea5p nh\u1eadn kh\u00f3a c\u1ee7a minion t\u1eeb master; sau \u0111\u00f3 giao ti\u1ebfp c\u00f3 th\u1ec3 ti\u1ebfp t\u1ee5c gi\u1eefa hai b\u00ean.<\/p>\n<h2 id=\"remote-execution\">Th\u1ef1c hi\u1ec7n t\u1eeb xa<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#remote-execution\"><\/a><\/h2>\n<p>Salt cung c\u1ea5p m\u1ed9t lo\u1ea1t&nbsp;<em>c\u00e1c m\u00f4-\u0111un th\u1ef1c thi<\/em>&nbsp;t\u1eeb xa&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/\" target=\"_blank\" rel=\"noreferrer noopener\">r\u1ea5t r\u1ed9ng<\/a>&nbsp;. M\u00f4-\u0111un th\u1ef1c thi l\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c h\u00e0m li\u00ean quan m\u00e0 b\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y tr\u00ean c\u00e1c minion c\u1ee7a m\u00ecnh&nbsp;<strong>t\u1eeb master<\/strong>&nbsp;. V\u00ed d\u1ee5:<em><\/em><strong><\/strong><\/p>\n<pre class=\"wp-block-code\"><code>salt 'webserver1' npm.install gulp\n<\/code><\/pre>\n<p>Trong l\u1ec7nh n\u00e0y&nbsp;<code>npm<\/code>l\u00e0&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/salt.modules.npm.html\" target=\"_blank\" rel=\"noreferrer noopener\">module<\/a>&nbsp;v\u00e0&nbsp;<code>install<\/code>l\u00e0&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/salt.modules.npm.html#salt.modules.npm.install\" target=\"_blank\" rel=\"noreferrer noopener\">h\u00e0m<\/a>&nbsp;. L\u1ec7nh n\u00e0y c\u00e0i \u0111\u1eb7t g\u00f3i&nbsp;<a href=\"https:\/\/gulpjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gulp<\/a>&nbsp;Node.js th\u00f4ng qua Node Package Manager (NPM). C\u00e1c h\u00e0m kh\u00e1c trong module&nbsp;<code>npm<\/code>x\u1eed l\u00fd vi\u1ec7c g\u1ee1 c\u00e0i \u0111\u1eb7t c\u00e1c g\u00f3i NPM, li\u1ec7t k\u00ea c\u00e1c g\u00f3i NPM \u0111\u00e3 c\u00e0i \u0111\u1eb7t v\u00e0 c\u00e1c t\u00e1c v\u1ee5 li\u00ean quan.<\/p>\n<p>C\u00e1c m\u00f4-\u0111un th\u1ef1c thi m\u00e0 Salt cung c\u1ea5p \u0111\u1ea1i di\u1ec7n cho c\u00e1c t\u00e1c v\u1ee5 qu\u1ea3n tr\u1ecb h\u1ec7 th\u1ed1ng m\u00e0 b\u1ea1n s\u1ebd th\u1ef1c hi\u1ec7n trong shell, bao g\u1ed3m nh\u01b0ng kh\u00f4ng gi\u1edbi h\u1ea1n \u1edf:<\/p>\n<ul>\n<li>T\u1ea1o v\u00e0 qu\u1ea3n l\u00fd&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/salt.modules.user.html\" target=\"_blank\" rel=\"noreferrer noopener\">ng\u01b0\u1eddi d\u00f9ng h\u1ec7 th\u1ed1ng<\/a><\/li>\n<li>C\u00e0i \u0111\u1eb7t v\u00e0 g\u1ee1 c\u00e0i \u0111\u1eb7t&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/salt.modules.pkg.html\" target=\"_blank\" rel=\"noreferrer noopener\">ph\u1ea7n m\u1ec1m<\/a><\/li>\n<li>Ch\u1ec9nh s\u1eeda ho\u1eb7c t\u1ea1o&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/modules\/all\/salt.modules.file.html#module-salt.modules.file\" target=\"_blank\" rel=\"noreferrer noopener\">t\u1eadp tin c\u1ea5u h\u00ecnh<\/a><\/li>\n<\/ul>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: B\u1ea1n c\u0169ng c\u00f3 th\u1ec3&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/create-a-salt-execution-module\/\">vi\u1ebft<\/a>&nbsp;m\u00f4-\u0111un th\u1ef1c thi c\u1ee7a ri\u00eang m\u00ecnh.<\/p>\n<h3 id=\"cmdrun\">cmd.run<\/h3>\n<p>H\u00e0m n\u00e0y&nbsp;<code>cmd.run<\/code>\u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 ch\u1ea1y c\u00e1c l\u1ec7nh t\u00f9y \u00fd tr\u00ean minion c\u1ee7a b\u1ea1n t\u1eeb m\u00e1y ch\u1ee7:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' cmd.run 'ls -l \/etc'\n<\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y s\u1ebd tr\u1ea3 v\u1ec1 n\u1ed9i dung c\u1ee7a&nbsp;<code>\/etc<\/code>m\u1ed7i minion.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu c\u00f3 th\u1ec3, t\u1ed1t h\u01a1n l\u00e0 s\u1eed d\u1ee5ng c\u00e1c m\u00f4-\u0111un th\u1ef1c thi thay v\u00ec &#8220;tr\u1ea3 ti\u1ec1n&#8221; b\u1eb1ng&nbsp;<code>cmd.run<\/code>.<\/p>\n<h2 id=\"states-formulas-and-the-top-file\">C\u00e1c tr\u1ea1ng th\u00e1i, c\u00f4ng th\u1ee9c v\u00e0 t\u1ec7p h\u00e0ng \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#states-formulas-and-the-top-file\"><\/a><\/h2>\n<p>Ph\u1ea7n tr\u01b0\u1edbc \u0111\u00e3 m\u00f4 t\u1ea3 c\u00e1ch s\u1eed d\u1ee5ng th\u1ef1c thi t\u1eeb xa \u0111\u1ec3 th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng c\u1ee5 th\u1ec3 tr\u00ean m\u1ed9t minion. V\u1edbi th\u1ef1c thi t\u1eeb xa, b\u1ea1n c\u00f3 th\u1ec3 qu\u1ea3n l\u00fd m\u1ed9t minion b\u1eb1ng c\u00e1ch nh\u1eadp m\u1ed9t lo\u1ea1t c\u00e1c l\u1ec7nh nh\u01b0 v\u1eady.<\/p>\n<p>Salt cung c\u1ea5p m\u1ed9t c\u00e1ch kh\u00e1c \u0111\u1ec3 c\u1ea5u h\u00ecnh m\u1ed9t minion trong \u0111\u00f3 b\u1ea1n khai b\u00e1o&nbsp;<strong>tr\u1ea1ng th\u00e1i m\u00e0 minion n\u00ean \u1edf<\/strong>&nbsp;. Ki\u1ec3u c\u1ea5u h\u00ecnh n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>tr\u1ea1ng th\u00e1i<\/em>&nbsp;Salt v\u00e0 ph\u01b0\u01a1ng ph\u00e1p n\u00e0y th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh<\/em>&nbsp;.<\/p>\n<p>S\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa hai phong c\u00e1ch n\u00e0y r\u1ea5t tinh t\u1ebf; \u0111\u1ec3 minh h\u1ecda, sau \u0111\u00e2y l\u00e0 c\u00e1ch c\u00e0i \u0111\u1eb7t NGINX \u0111\u01b0\u1ee3c di\u1ec5n gi\u1ea3i theo t\u1eebng ph\u01b0\u01a1ng ph\u00e1p:<\/p>\n<ul>\n<li><strong>Th\u1ef1c hi\u1ec7n t\u1eeb xa<\/strong>&nbsp;: \u201cC\u00e0i \u0111\u1eb7t NGINX tr\u00ean minion\u201d<\/li>\n<li><strong>Qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh<\/strong>&nbsp;: \u201cNGINX ph\u1ea3i \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean minion\u201d<\/li>\n<\/ul>\n<p>Tr\u1ea1ng th\u00e1i mu\u1ed1i \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a trong&nbsp;<em>c\u00e1c t\u1ec7p tr\u1ea1ng th\u00e1i<\/em>&nbsp;. Sau khi b\u1ea1n \u0111\u00e3 ghi l\u1ea1i c\u00e1c tr\u1ea1ng th\u00e1i c\u1ee7a m\u00ecnh, sau \u0111\u00f3 b\u1ea1n&nbsp;<em>\u00e1p d\u1ee5ng<\/em>&nbsp;ch\u00fang cho m\u1ed9t minion. Salt ph\u00e2n t\u00edch t\u1ec7p tr\u1ea1ng th\u00e1i v\u00e0 x\u00e1c \u0111\u1ecbnh nh\u1eefng g\u00ec c\u1ea7n l\u00e0m \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o minion \u0111\u00e1p \u1ee9ng c\u00e1c khai b\u00e1o c\u1ee7a tr\u1ea1ng th\u00e1i.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: \u0110i\u1ec1u n\u00e0y \u0111\u00f4i khi d\u1eabn \u0111\u1ebfn c\u00f9ng m\u1ed9t l\u1ec7nh s\u1ebd \u0111\u01b0\u1ee3c ch\u1ea1y th\u00f4ng qua th\u1ef1c thi t\u1eeb xa, nh\u01b0ng \u0111\u00f4i khi th\u00ec kh\u00f4ng. Trong v\u00ed d\u1ee5 NGINX, n\u1ebfu Salt th\u1ea5y NGINX \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u01b0\u1edbc \u0111\u00f3, n\u00f3 s\u1ebd kh\u00f4ng g\u1ecdi l\u1ea1i tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i khi tr\u1ea1ng th\u00e1i \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.<\/p>\n<h3 id=\"anatomy-of-a-state\">Gi\u1ea3i ph\u1eabu c\u1ee7a m\u1ed9t State<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#anatomy-of-a-state\"><\/a><\/h3>\n<p>Sau \u0111\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5 v\u1ec1 t\u1ec7p tr\u1ea1ng th\u00e1i \u0111\u1ea3m b\u1ea3o r\u1eb1ng: rsync v\u00e0 curl \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t; NGINX \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t; v\u00e0 NGINX \u0111\u00e3 \u0111\u01b0\u1ee3c ch\u1ea1y v\u00e0 \u0111\u01b0\u1ee3c b\u1eadt \u0111\u1ec3 ch\u1ea1y khi kh\u1edfi \u0111\u1ed9ng:<\/p>\n<pre class=\"wp-block-code\"><code>network_utilities:\n  pkg.installed:\n    - pkgs:\n      - rsync\n      - curl\n\nnginx_pkg:\n  pkg.installed:\n    - name: nginx\n\nnginx_service:\n  service.running:\n    - name: nginx\n    - enable: True\n    - require:\n      - pkg: nginx_pkg<\/code><\/pre>\n<p>T\u1ec7p tr\u1ea1ng th\u00e1i k\u1ebft th\u00fac b\u1eb1ng ph\u1ea7n m\u1edf r\u1ed9ng&nbsp;<code>.sls<\/code>(SaLt State). T\u1ec7p tr\u1ea1ng th\u00e1i c\u00f3 th\u1ec3 c\u00f3 m\u1ed9t ho\u1eb7c nhi\u1ec1u&nbsp;<em>khai b\u00e1o tr\u1ea1ng th\u00e1i<\/em>&nbsp;, l\u00e0 c\u00e1c ph\u1ea7n c\u1ea5p cao nh\u1ea5t c\u1ee7a t\u1ec7p (&nbsp;<code>network_utilities<\/code>,&nbsp;<code>nginx_pkg<\/code>, v\u00e0&nbsp;<code>nginx_service<\/code>trong v\u00ed d\u1ee5 tr\u00ean). ID khai b\u00e1o tr\u1ea1ng th\u00e1i l\u00e0 t\u00f9y \u00fd, v\u00ec v\u1eady b\u1ea1n c\u00f3 th\u1ec3 \u0111\u1eb7t t\u00ean theo \u00fd mu\u1ed1n.<\/p>\n<p>C\u00e1c khai b\u00e1o tr\u1ea1ng th\u00e1i ch\u1ee9a&nbsp;<em>c\u00e1c m\u00f4-\u0111un tr\u1ea1ng th\u00e1i<\/em>&nbsp;. C\u00e1c m\u00f4-\u0111un tr\u1ea1ng th\u00e1i kh\u00e1c v\u1edbi c\u00e1c m\u00f4-\u0111un th\u1ef1c thi nh\u01b0ng th\u01b0\u1eddng th\u1ef1c hi\u1ec7n c\u00e1c c\u00f4ng vi\u1ec7c t\u01b0\u01a1ng t\u1ef1. V\u00ed d\u1ee5, m\u1ed9t&nbsp;<code>pkg<\/code>m\u00f4-\u0111un tr\u1ea1ng th\u00e1i t\u1ed3n t\u1ea1i v\u1edbi c\u00e1c h\u00e0m t\u01b0\u01a1ng t\u1ef1 nh\u01b0&nbsp;<code>pkg<\/code>m\u00f4-\u0111un th\u1ef1c thi, nh\u01b0 v\u1edbi&nbsp;<code>pkg.installed<\/code>h\u00e0m tr\u1ea1ng th\u00e1i v\u00e0&nbsp;<code>pkg.install<\/code>h\u00e0m th\u1ef1c thi. Gi\u1ed1ng nh\u01b0 c\u00e1c m\u00f4-\u0111un th\u1ef1c thi, Salt cung c\u1ea5p m\u1ed9t&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/states\/all\/\" target=\"_blank\" rel=\"noreferrer noopener\">lo\u1ea1t<\/a>&nbsp;c\u00e1c m\u00f4-\u0111un tr\u1ea1ng th\u00e1i \u0111\u1ec3 b\u1ea1n s\u1eed d\u1ee5ng.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c khai b\u00e1o tr\u1ea1ng th\u00e1i kh\u00f4ng nh\u1ea5t thi\u1ebft ph\u1ea3i \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng theo th\u1ee9 t\u1ef1 xu\u1ea5t hi\u1ec7n trong t\u1ec7p tr\u1ea1ng th\u00e1i, nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh r\u1eb1ng m\u1ed9t khai b\u00e1o ph\u1ee5 thu\u1ed9c v\u00e0o m\u1ed9t khai b\u00e1o kh\u00e1c b\u1eb1ng t\u00f9y&nbsp;<code>require<\/code>ch\u1ecdn. \u0110\u00e2y l\u00e0 tr\u01b0\u1eddng h\u1ee3p trong v\u00ed d\u1ee5 tr\u00ean; Salt s\u1ebd kh\u00f4ng c\u1ed1 g\u1eafng ch\u1ea1y v\u00e0 k\u00edch ho\u1ea1t NGINX cho \u0111\u1ebfn khi n\u00f3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t.<\/p>\n<p>T\u1ec7p tr\u1ea1ng th\u00e1i th\u1ef1c ch\u1ea5t ch\u1ec9 l\u00e0 t\u1eadp h\u1ee3p c\u00e1c t\u1eeb \u0111i\u1ec3n, danh s\u00e1ch, chu\u1ed7i v\u00e0 s\u1ed1 sau \u0111\u00f3 \u0111\u01b0\u1ee3c Salt di\u1ec5n gi\u1ea3i. Theo m\u1eb7c \u0111\u1ecbnh, Salt s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/yaml\/\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00fa ph\u00e1p YAML<\/a>&nbsp;\u0111\u1ec3 bi\u1ec3u di\u1ec5n tr\u1ea1ng th\u00e1i.<\/p>\n<p>C\u00e1c t\u1ec7p tr\u1ea1ng th\u00e1i th\u01b0\u1eddng \u0111\u01b0\u1ee3c l\u01b0u tr\u00ean h\u1ec7 th\u1ed1ng t\u1ec7p c\u1ee7a m\u00e1y ch\u1ee7 Salt, nh\u01b0ng ch\u00fang c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef \u1edf&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/file_server\/backends.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c v\u1ecb tr\u00ed m\u00e1y ch\u1ee7 t\u1ec7p kh\u00e1c<\/a>&nbsp;, nh\u01b0 kho l\u01b0u tr\u1eef Git (c\u1ee5 th\u1ec3 l\u00e0 GitHub).<\/p>\n<h3 id=\"applying-a-state-to-a-minion\">\u00c1p d\u1ee5ng m\u1ed9t tr\u1ea1ng th\u00e1i cho m\u1ed9t Minion<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#applying-a-state-to-a-minion\"><\/a><\/h3>\n<p>\u0110\u1ec3 \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i cho minion, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>state.apply<\/code>h\u00e0m t\u1eeb master:<\/p>\n<pre class=\"wp-block-code\"><code>salt `webserver1` state.apply webserver_setup\n<\/code><\/pre>\n<p>L\u1ec7nh n\u00e0y \u00e1p d\u1ee5ng&nbsp;<code>webserver_setup.sls<\/code>tr\u1ea1ng th\u00e1i v\u00ed d\u1ee5 cho m\u1ed9t minion c\u00f3 t\u00ean l\u00e0&nbsp;<code>webserver1<\/code>. Khi \u00e1p d\u1ee5ng tr\u1ea1ng th\u00e1i,&nbsp;<code>.sls<\/code>h\u1eadu t\u1ed1 kh\u00f4ng \u0111\u01b0\u1ee3c \u0111\u1ec1 c\u1eadp. T\u1ea5t c\u1ea3 c\u00e1c khai b\u00e1o tr\u1ea1ng th\u00e1i trong t\u1ec7p tr\u1ea1ng th\u00e1i \u0111\u1ec1u \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng.<\/p>\n<h3 id=\"salt-formulas\">C\u00f4ng th\u1ee9c Salt&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#salt-formulas\"><\/a><\/h3>\n<p>C\u00f4ng th\u1ee9c ch\u1ec9 l\u00e0 t\u1eadp h\u1ee3p c\u00e1c tr\u1ea1ng th\u00e1i c\u00f9ng nhau c\u1ea5u h\u00ecnh m\u1ed9t \u1ee9ng d\u1ee5ng ho\u1eb7c th\u00e0nh ph\u1ea7n h\u1ec7 th\u1ed1ng tr\u00ean m\u1ed9t minion. C\u00f4ng th\u1ee9c th\u01b0\u1eddng \u0111\u01b0\u1ee3c t\u1ed5 ch\u1ee9c tr\u00ean nhi\u1ec1u&nbsp;<code>.sls<\/code>t\u1ec7p kh\u00e1c nhau. Vi\u1ec7c chia nh\u1ecf c\u00e1c tr\u1ea1ng th\u00e1i c\u1ee7a c\u00f4ng th\u1ee9c tr\u00ean nhi\u1ec1u t\u1ec7p kh\u00e1c nhau c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n t\u1ed5 ch\u1ee9c c\u00f4ng vi\u1ec7c d\u1ec5 d\u00e0ng h\u01a1n. Khai b\u00e1o tr\u1ea1ng th\u00e1i c\u00f3 th\u1ec3 bao g\u1ed3m v\u00e0 tham chi\u1ebfu \u0111\u1ebfn c\u00e1c khai b\u00e1o tr\u00ean c\u00e1c t\u1ec7p kh\u00e1c.<\/p>\n<p>C\u00e1c c\u00f4ng th\u1ee9c \u0111\u1ee7 chung chung th\u01b0\u1eddng \u0111\u01b0\u1ee3c chia s\u1ebb tr\u00ean GitHub \u0111\u1ec3 ng\u01b0\u1eddi kh\u00e1c s\u1eed d\u1ee5ng. T\u1ed5 ch\u1ee9c SaltStack duy tr\u00ec m\u1ed9t&nbsp;<a href=\"https:\/\/github.com\/saltstack-formulas\" target=\"_blank\" rel=\"noreferrer noopener\">b\u1ed9 s\u01b0u t\u1eadp c\u00e1c c\u00f4ng th\u1ee9c ph\u1ed5 bi\u1ebfn<\/a>&nbsp;. T\u00e0i li\u1ec7u c\u1ee7a Salt c\u00f3&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/development\/conventions\/formulas.html\" target=\"_blank\" rel=\"noreferrer noopener\">h\u01b0\u1edbng d\u1eabn v\u1ec1 c\u00e1ch s\u1eed d\u1ee5ng c\u00f4ng th\u1ee9c<\/a>&nbsp;\u0111\u01b0\u1ee3c l\u01b0u tr\u1eef tr\u00ean GitHub.<\/p>\n<p>\u0110\u1ecbnh ngh\u0129a v\u1ec1 c\u00f4ng th\u1ee9c kh\u00e1 m\u01a1 h\u1ed3 v\u00e0 Salt kh\u00f4ng y\u00eau c\u1ea7u c\u1ea5u tr\u00fac c\u1ee5 th\u1ec3 c\u1ee7a c\u00f4ng th\u1ee9c.<\/p>\n<h3 id=\"the-top-file\">T\u1eadp tin h\u00e0ng \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#the-top-file\"><\/a><\/h3>\n<p>Ngo\u00e0i vi\u1ec7c \u00e1p d\u1ee5ng th\u1ee7 c\u00f4ng c\u00e1c tr\u1ea1ng th\u00e1i cho minion, Salt c\u00f2n cung c\u1ea5p cho b\u1ea1n m\u1ed9t c\u00e1ch \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng l\u1eadp b\u1ea3n \u0111\u1ed3 c\u00e1c tr\u1ea1ng th\u00e1i n\u00e0o n\u00ean \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho c\u00e1c minion kh\u00e1c nhau. B\u1ea3n \u0111\u1ed3 n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 t\u1ec7p&nbsp;<em>top<\/em>&nbsp;.<\/p>\n<p>Sau \u0111\u00e2y l\u00e0 m\u1ed9t t\u1eadp tin \u0111\u1ea7u trang \u0111\u01a1n gi\u1ea3n:<\/p>\n<pre class=\"wp-block-code\"><code>base:\n  '*':\n    - universal_setup\n\n  'webserver1':\n    - webserver_setup<\/code><\/pre>\n<p><code>base<\/code><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/states\/top.html#environments\" target=\"_blank\" rel=\"noreferrer noopener\"><em>\u0111\u1ec1 c\u1eadp \u0111\u1ebfn m\u00f4i tr\u01b0\u1eddng<\/em><\/a>&nbsp;Salt&nbsp;. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh nhi\u1ec1u h\u01a1n m\u1ed9t m\u00f4i tr\u01b0\u1eddng t\u01b0\u01a1ng \u1ee9ng v\u1edbi c\u00e1c giai \u0111o\u1ea1n kh\u00e1c nhau trong c\u00f4ng vi\u1ec7c c\u1ee7a m\u00ecnh; v\u00ed d\u1ee5: ph\u00e1t tri\u1ec3n, QA, s\u1ea3n xu\u1ea5t, v.v.&nbsp;<code>base<\/code>l\u00e0 m\u1eb7c \u0111\u1ecbnh.<\/p>\n<p>C\u00e1c nh\u00f3m minion \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh theo m\u00f4i tr\u01b0\u1eddng v\u00e0 c\u00e1c tr\u1ea1ng th\u00e1i \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea cho m\u1ed7i nh\u00f3m minion. V\u00ed d\u1ee5 t\u1ec7p tr\u00ean c\u00f9ng n\u00eau r\u1eb1ng m\u1ed9t&nbsp;<code>universal_setup<\/code>tr\u1ea1ng th\u00e1i n\u00ean \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho t\u1ea5t c\u1ea3 minion (&nbsp;<code>'*'<\/code>), v\u00e0&nbsp;<code>webserver_setup<\/code>tr\u1ea1ng th\u00e1i n\u00ean \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho&nbsp;<code>webserver1<\/code>minion.<\/p>\n<p>N\u1ebfu b\u1ea1n ch\u1ea1y&nbsp;<code>state.apply<\/code>h\u00e0m m\u00e0 kh\u00f4ng c\u00f3 \u0111\u1ed1i s\u1ed1, th\u00ec Salt s\u1ebd ki\u1ec3m tra t\u1ec7p tr\u00ean c\u00f9ng v\u00e0 \u00e1p d\u1ee5ng t\u1ea5t c\u1ea3 c\u00e1c tr\u1ea1ng th\u00e1i trong \u0111\u00f3 theo \u00e1nh x\u1ea1 b\u1ea1n \u0111\u00e3 t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' state.apply<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: H\u00e0nh \u0111\u1ed9ng n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi m\u1ed9t c\u00e1ch th\u00f4ng t\u1ee5c l\u00e0&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/tutorials\/states_pt1.html#running-highstate\" target=\"_blank\" rel=\"noreferrer noopener\"><em>highstate<\/em><\/a>&nbsp;.<\/p>\n<h3 id=\"benefits-of-states-and-configuration-management\">L\u1ee3i \u00edch c\u1ee7a Qu\u1ea3n l\u00fd Tr\u1ea1ng th\u00e1i v\u00e0 C\u1ea5u h\u00ecnh<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#benefits-of-states-and-configuration-management\"><\/a><\/h3>\n<p>Vi\u1ec7c x\u00e1c \u0111\u1ecbnh c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n theo tr\u1ea1ng th\u00e1i gi\u00fap vi\u1ec7c qu\u1ea3n tr\u1ecb h\u1ec7 th\u1ed1ng d\u1ec5 d\u00e0ng h\u01a1n:<\/p>\n<ul>\n<li>Vi\u1ec7c thi\u1ebft l\u1eadp tr\u1ea1ng th\u00e1i s\u1ebd gi\u1ea3m thi\u1ec3u l\u1ed7i c\u1ee7a con ng\u01b0\u1eddi v\u00ec b\u1ea1n kh\u00f4ng c\u1ea7n ph\u1ea3i nh\u1eadp l\u1ec7nh th\u1ee7 c\u00f4ng t\u1eebng c\u00e1i m\u1ed9t.<\/li>\n<li>\u00c1p d\u1ee5ng tr\u1ea1ng th\u00e1i cho minion nhi\u1ec1u l\u1ea7n th\u01b0\u1eddng kh\u00f4ng d\u1eabn \u0111\u1ebfn b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o ngo\u00e0i l\u1ea7n \u00e1p d\u1ee5ng \u0111\u1ea7u ti\u00ean. Salt hi\u1ec3u khi n\u00e0o tr\u1ea1ng th\u00e1i \u0111\u00e3 \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean minion v\u00e0 s\u1ebd kh\u00f4ng th\u1ef1c hi\u1ec7n c\u00e1c h\u00e0nh \u0111\u1ed9ng kh\u00f4ng c\u1ea7n thi\u1ebft.<\/li>\n<li>N\u1ebfu b\u1ea1n c\u1eadp nh\u1eadt t\u1ec7p tr\u1ea1ng th\u00e1i v\u00e0 \u00e1p d\u1ee5ng v\u00e0o minion, Salt s\u1ebd ph\u00e1t hi\u1ec7n v\u00e0 ch\u1ec9 \u00e1p d\u1ee5ng c\u00e1c thay \u0111\u1ed5i, gi\u00fap vi\u1ec7c c\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n hi\u1ec7u qu\u1ea3 h\u01a1n.<\/li>\n<li>M\u1ed9t tr\u1ea1ng th\u00e1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u00e1i s\u1eed d\u1ee5ng v\u00e0 \u00e1p d\u1ee5ng cho nhi\u1ec1u minion, \u0111i\u1ec1u n\u00e0y s\u1ebd t\u1ea1o ra c\u1ea5u h\u00ecnh gi\u1ed1ng h\u1ec7t nhau tr\u00ean c\u00e1c m\u00e1y ch\u1ee7 kh\u00e1c nhau.<\/li>\n<li>T\u1ec7p tr\u1ea1ng th\u00e1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c nh\u1eadp v\u00e0o h\u1ec7 th\u1ed1ng ki\u1ec3m so\u00e1t phi\u00ean b\u1ea3n, gi\u00fap b\u1ea1n theo d\u00f5i nh\u1eefng thay \u0111\u1ed5i trong h\u1ec7 th\u1ed1ng theo th\u1eddi gian.<\/li>\n<\/ul>\n<h2 id=\"targeting-minions\">Nh\u1eafm m\u1ee5c ti\u00eau v\u00e0o Minion<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#targeting-minions\"><\/a><\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 so kh\u1edbp v\u1edbi ID c\u1ee7a minion b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng shell style globbing. \u0110i\u1ec1u n\u00e0y ho\u1ea1t \u0111\u1ed9ng \u1edf c\u1ea3 d\u00f2ng l\u1ec7nh ho\u1eb7c trong t\u1ec7p tr\u00ean c\u00f9ng.<\/p>\n<p>Nh\u1eefng v\u00ed d\u1ee5 n\u00e0y s\u1ebd \u00e1p d\u1ee5ng&nbsp;<code>webserver_setup<\/code>tr\u1ea1ng th\u00e1i cho t\u1ea5t c\u1ea3 c\u00e1c minion c\u00f3 ID b\u1eaft \u0111\u1ea7u b\u1eb1ng&nbsp;<code>webserver<\/code>(v\u00ed d\u1ee5:&nbsp;<code>webserver1<\/code>,&nbsp;<code>webserver2<\/code>, v.v.):<\/p>\n<ul>\n<li>D\u00f2ng l\u1ec7nh:<code>salt 'webserver*' state.apply webserver_setup<\/code><\/li>\n<li>T\u1ec7p tin \u0111\u1ea7u ti\u00ean:<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>base:\n  'webserver*':\n    - webserver_setup<\/code><\/pre>\n<p><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/targeting\/globbing.html#regular-expressions\" target=\"_blank\" rel=\"noreferrer noopener\">Bi\u1ec3u th\u1ee9c ch\u00ednh quy<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/targeting\/globbing.html#lists\" target=\"_blank\" rel=\"noreferrer noopener\">danh s\u00e1ch<\/a>&nbsp;c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 so kh\u1edbp v\u1edbi ID minion.<\/p>\n<h2 id=\"grains\">Grains<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#grains\"><\/a><\/h2>\n<p><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/grains\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Grains<\/em><\/a>&nbsp;c\u1ee7a Salt&nbsp;cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o th\u00f4ng tin \u0111\u01b0\u1ee3c t\u1ea1o ra v\u00e0 l\u01b0u tr\u1eef tr\u00ean minion. V\u00ed d\u1ee5 bao g\u1ed3m h\u1ec7 \u0111i\u1ec1u h\u00e0nh, t\u00ean mi\u1ec1n, \u0111\u1ecba ch\u1ec9 IP, v.v. c\u1ee7a minion. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh d\u1eef li\u1ec7u h\u1ea1t t\u00f9y ch\u1ec9nh tr\u00ean minion, nh\u01b0 \u0111\u01b0\u1ee3c n\u00eau trong t\u00e0i li\u1ec7u c\u1ee7a Salt.<\/p>\n<p>B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng d\u1eef li\u1ec7u h\u1ea1t \u0111\u1ec3 nh\u1eafm m\u1ee5c ti\u00eau \u0111\u1ebfn c\u00e1c minion t\u1eeb d\u00f2ng l\u1ec7nh. L\u1ec7nh n\u00e0y c\u00e0i \u0111\u1eb7t httpd tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c minion ch\u1ea1y CentOS:<\/p>\n<pre class=\"wp-block-code\"><code>salt -G 'os:CentOS' pkg.install httpd\n<\/code><\/pre>\n<p>B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng h\u1ea1t trong t\u1ec7p tr\u00ean c\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code>base:\n  'os:CentOS':\n    - match: grain\n    - centos_setup<\/code><\/pre>\n<p>Th\u00f4ng tin v\u1ec1 h\u1ea1t th\u01b0\u1eddng kh\u00f4ng qu\u00e1 n\u0103ng \u0111\u1ed9ng, nh\u01b0ng th\u1ec9nh tho\u1ea3ng n\u00f3 c\u00f3 th\u1ec3 thay \u0111\u1ed5i v\u00e0 Salt s\u1ebd l\u00e0m m\u1edbi d\u1eef li\u1ec7u h\u1ea1t khi c\u00f3 thay \u0111\u1ed5i. \u0110\u1ec3 xem d\u1eef li\u1ec7u h\u1ea1t c\u1ee7a minion:<\/p>\n<pre class=\"wp-block-code\"><code>salt '*' grains.items\n<\/code><\/pre>\n<h2 id=\"storing-data-and-secrets-in-pillar\">L\u01b0u tr\u1eef d\u1eef li\u1ec7u v\u00e0 b\u00ed m\u1eadt trong Pillar<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#storing-data-and-secrets-in-pillar\"><\/a><\/h2>\n<p><a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/tutorials\/pillar.html\" target=\"_blank\" rel=\"noreferrer noopener\"><em>T\u00ednh n\u0103ng tr\u1ee5 c\u1ed9t<\/em><\/a>&nbsp;c\u1ee7a Salt&nbsp;l\u1ea5y d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh tr\u00ean Salt master v\u00e0 ph\u00e2n ph\u1ed1i cho c\u00e1c minion. M\u1ed9t m\u1ee5c \u0111\u00edch s\u1eed d\u1ee5ng ch\u00ednh c\u1ee7a tr\u1ee5 c\u1ed9t l\u00e0 l\u01b0u tr\u1eef b\u00ed m\u1eadt, ch\u1eb3ng h\u1ea1n nh\u01b0 th\u00f4ng tin \u0111\u0103ng nh\u1eadp t\u00e0i kho\u1ea3n. Tr\u1ee5 c\u1ed9t c\u0169ng l\u00e0 n\u01a1i h\u1eefu \u00edch \u0111\u1ec3 l\u01b0u tr\u1eef d\u1eef li\u1ec7u kh\u00f4ng b\u00ed m\u1eadt m\u00e0 b\u1ea1n kh\u00f4ng mu\u1ed1n ghi tr\u1ef1c ti\u1ebfp v\u00e0o t\u1ec7p tr\u1ea1ng th\u00e1i c\u1ee7a m\u00ecnh.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Ngo\u00e0i vi\u1ec7c l\u01b0u tr\u1eef d\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t tr\u00ean m\u00e1y ch\u1ee7 ch\u00ednh, b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 l\u01b0u tr\u1eef d\u1eef li\u1ec7u \u1edf nh\u1eefng v\u1ecb tr\u00ed kh\u00e1c, nh\u01b0 trong&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/pillar\/all\/salt.pillar.git_pillar.html\" target=\"_blank\" rel=\"noreferrer noopener\">kho l\u01b0u tr\u1eef Git<\/a>&nbsp;ho\u1eb7c&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/pillar\/all\/salt.pillar.vault.html\" target=\"_blank\" rel=\"noreferrer noopener\">Vault c\u1ee7a Hashicorp<\/a>&nbsp;.<\/p>\n<p>Gi\u1ea3 s\u1eed b\u1ea1n mu\u1ed1n t\u1ea1o ng\u01b0\u1eddi d\u00f9ng h\u1ec7 th\u1ed1ng tr\u00ean m\u1ed9t minion v\u00e0 g\u00e1n c\u00e1c shell kh\u00e1c nhau cho m\u1ed7i ng\u01b0\u1eddi d\u00f9ng. N\u1ebfu b\u1ea1n m\u00e3 h\u00f3a th\u00f4ng tin n\u00e0y v\u00e0o m\u1ed9t t\u1ec7p tr\u1ea1ng th\u00e1i, b\u1ea1n s\u1ebd c\u1ea7n m\u1ed9t khai b\u00e1o m\u1edbi cho m\u1ed7i ng\u01b0\u1eddi d\u00f9ng. N\u1ebfu b\u1ea1n l\u01b0u tr\u1eef d\u1eef li\u1ec7u trong pillar thay v\u00e0o \u0111\u00f3, th\u00ec b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 c\u1ea7n t\u1ea1o m\u1ed9t khai b\u00e1o tr\u1ea1ng th\u00e1i v\u00e0 \u0111\u01b0a d\u1eef li\u1ec7u pillar v\u00e0o \u0111\u00f3 b\u1eb1ng t\u00ednh n\u0103ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#jinja-templates\">t\u1ea1o m\u1eabu Jinja<\/a>&nbsp;c\u1ee7a Salt .<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Salt Pillar \u0111\u00f4i khi b\u1ecb nh\u1ea7m l\u1eabn v\u1edbi Salt Grains, v\u00ec c\u1ea3 hai \u0111\u1ec1u l\u01b0u tr\u1eef d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u1ea1ng th\u00e1i v\u00e0 th\u1ef1c thi t\u1eeb xa. D\u1eef li\u1ec7u m\u00e0 grain duy tr\u00ec c\u00f3 ngu\u1ed3n g\u1ed1c&nbsp;<em>t\u1eeb<\/em>&nbsp;c\u00e1c minion, trong khi d\u1eef li\u1ec7u trong pillar c\u00f3 ngu\u1ed3n g\u1ed1c t\u1eeb master (ho\u1eb7c m\u1ed9t backend kh\u00e1c) v\u00e0 \u0111\u01b0\u1ee3c chuy\u1ec3n&nbsp;<em>\u0111\u1ebfn<\/em>&nbsp;c\u00e1c minion.<\/p>\n<h3 id=\"anatomy-of-pillar-data\">Gi\u1ea3i ph\u1eabu c\u1ee7a d\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#anatomy-of-pillar-data\"><\/a><\/h3>\n<p>D\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t \u0111\u01b0\u1ee3c l\u01b0u gi\u1eef trong&nbsp;<code>.sls<\/code>c\u00e1c t\u1ec7p \u0111\u01b0\u1ee3c vi\u1ebft theo c\u00fa ph\u00e1p YAML gi\u1ed1ng nh\u01b0 c\u00e1c tr\u1ea1ng th\u00e1i:<\/p>\n<pre class=\"wp-block-code\"><code>users:\n  joe:\n    shell: \/bin\/zsh\n  amy:\n    shell: \/bin\/bash\n  sam\n    shell: \/bin\/fish<\/code><\/pre>\n<p>T\u01b0\u01a1ng t\u1ef1 nh\u01b0 c\u00e1c t\u1ec7p tr\u1ea1ng th\u00e1i, m\u1ed9t t\u1ec7p h\u00e0ng \u0111\u1ea7u (ri\u00eang bi\u1ec7t v\u1edbi t\u1ec7p h\u00e0ng \u0111\u1ea7u c\u1ee7a tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea1n) \u00e1nh x\u1ea1 d\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t th\u00e0nh c\u00e1c ph\u1ea7n t\u1eed con:<\/p>\n<pre class=\"wp-block-code\"><code>base:\n  'webserver1':\n    - user_info<\/code><\/pre>\n<h2 id=\"jinja-templates\">M\u1eabu Jinja<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#jinja-templates\"><\/a><\/h2>\n<p>\u0110\u1ec3 \u0111\u01b0a d\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t v\u00e0o tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea1n, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/jinja\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00fa ph\u00e1p m\u1eabu c\u1ee7a Jinja<\/a>&nbsp;. Trong khi Salt s\u1eed d\u1ee5ng c\u00fa ph\u00e1p YAML cho c\u00e1c t\u1ec7p tr\u1ea1ng th\u00e1i v\u00e0 tr\u1ee5 c\u1ed9t, c\u00e1c t\u1ec7p n\u00e0y tr\u01b0\u1edbc ti\u00ean \u0111\u01b0\u1ee3c di\u1ec5n gi\u1ea3i l\u00e0 c\u00e1c m\u1eabu Jinja (theo m\u1eb7c \u0111\u1ecbnh).<\/p>\n<p>T\u1ec7p tr\u1ea1ng th\u00e1i m\u1eabu n\u00e0y s\u1eed d\u1ee5ng d\u1eef li\u1ec7u tr\u1ee5 c\u1ed9t t\u1eeb ph\u1ea7n tr\u01b0\u1edbc \u0111\u1ec3 t\u1ea1o ng\u01b0\u1eddi d\u00f9ng h\u1ec7 th\u1ed1ng v\u00e0 thi\u1ebft l\u1eadp shell cho t\u1eebng ng\u01b0\u1eddi d\u00f9ng:<\/p>\n<pre class=\"wp-block-code\"><code>{% for user_name, user_info in pillar&#91;'users'].iteritems() %}\n{{ user_name }}:\n  user.present:\n    - shell: {{ user_info&#91;'shell'] }}\n{% endfor %}<\/code><\/pre>\n<p>Salt s\u1ebd bi\u00ean d\u1ecbch t\u1ec7p tr\u1ea1ng th\u00e1i th\u00e0nh th\u1ee9 tr\u00f4ng nh\u01b0 th\u1ebf n\u00e0y tr\u01b0\u1edbc khi \u00e1p d\u1ee5ng cho minion:<\/p>\n<pre class=\"wp-block-code\"><code>joe:\n  user.present:\n    - shell: \/bin\/zsh\n\namy:\n  user.present:\n    - shell: \/bin\/bash\n\nsam:\n  user.present:\n    - shell: \/bin\/fish<\/code><\/pre>\n<p>B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Jinja \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi d\u1eef li\u1ec7u h\u1ea1t trong c\u00e1c tr\u1ea1ng th\u00e1i c\u1ee7a b\u1ea1n. Tr\u1ea1ng th\u00e1i v\u00ed d\u1ee5 n\u00e0y s\u1ebd c\u00e0i \u0111\u1eb7t Apache v\u00e0 \u0111i\u1ec1u ch\u1ec9nh t\u00ean cho g\u00f3i theo h\u1ec7 \u0111i\u1ec1u h\u00e0nh:<\/p>\n<pre class=\"wp-block-code\"><code>install_apache:\n  pkg.installed:\n    {% if grains&#91;'os'] == 'CentOS' %}\n    - name: httpd\n    {% else %}\n    - name: apache\n    {% endif %}<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Ngo\u00e0i t\u00e0i li\u1ec7u c\u1ee7a Salt v\u1ec1 Jinja,&nbsp;<a href=\"http:\/\/jinja.pocoo.org\/docs\/2.10\/templates\/\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e0i li\u1ec7u ch\u00ednh th\u1ee9c c\u1ee7a Jinja<\/a>&nbsp;c\u0169ng n\u00eau chi ti\u1ebft c\u00fa ph\u00e1p m\u1eabu.<\/p>\n<h2 id=\"beacons\">\u0110\u00e8n hi\u1ec7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#beacons\"><\/a><\/h2>\n<p>H\u1ec7 th\u1ed1ng&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/beacons\/\" target=\"_blank\" rel=\"noreferrer noopener\">beacon<\/a>&nbsp;l\u00e0 m\u1ed9t c\u00e1ch \u0111\u1ec3 theo d\u00f5i nhi\u1ec1u quy tr\u00ecnh h\u1ec7 th\u1ed1ng kh\u00e1c nhau tr\u00ean Salt minion. C\u00f3 m\u1ed9t s\u1ed1&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/ref\/beacons\/all\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">m\u00f4-\u0111un beacon<\/a>&nbsp;c\u00f3 s\u1eb5n.<\/p>\n<p>Beacon c\u00f3 th\u1ec3 k\u00edch ho\u1ea1t&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/reactor\/index.html#reactor\" target=\"_blank\" rel=\"noreferrer noopener\">l\u00f2 ph\u1ea3n \u1ee9ng<\/a>&nbsp;, sau \u0111\u00f3 c\u00f3 th\u1ec3 gi\u00fap th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i ho\u1eb7c kh\u1eafc ph\u1ee5c s\u1ef1 c\u1ed1. V\u00ed d\u1ee5, n\u1ebfu ph\u1ea3n h\u1ed3i c\u1ee7a d\u1ecbch v\u1ee5 h\u1ebft th\u1eddi gian, h\u1ec7 th\u1ed1ng l\u00f2 ph\u1ea3n \u1ee9ng c\u00f3 th\u1ec3 kh\u1edfi \u0111\u1ed9ng l\u1ea1i d\u1ecbch v\u1ee5.<\/p>\n<h2 id=\"getting-started-with-salt\">B\u1eaft \u0111\u1ea7u v\u1edbi Salt<a href=\"https:\/\/www.linode.com\/docs\/guides\/beginners-guide-to-salt\/#getting-started-with-salt\"><\/a><\/h2>\n<p>B\u00e2y gi\u1edd b\u1ea1n \u0111\u00e3 quen v\u1edbi m\u1ed9t s\u1ed1 thu\u1eadt ng\u1eef v\u00e0 th\u00e0nh ph\u1ea7n c\u01a1 b\u1ea3n c\u1ee7a Salt, h\u00e3y chuy\u1ec3n sang h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/getting-started-with-salt-basic-installation-and-setup\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Salt &#8211; C\u00e0i \u0111\u1eb7t v\u00e0 thi\u1ebft l\u1eadp c\u01a1 b\u1ea3n<\/a>&nbsp;\u0111\u1ec3 thi\u1ebft l\u1eadp c\u1ea5u h\u00ecnh nh\u1eb1m b\u1eaft \u0111\u1ea7u ch\u1ea1y l\u1ec7nh v\u00e0 cung c\u1ea5p m\u00e1y ch\u1ee7 minion.<\/p>\n<p>T\u00e0i li\u1ec7u SaltStack c\u0169ng ch\u1ee9a m\u1ed9t trang v\u1ec1&nbsp;<a href=\"https:\/\/docs.saltproject.io\/en\/latest\/topics\/best_practices.html\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c bi\u1ec7n ph\u00e1p th\u1ef1c h\u00e0nh t\u1ed1t nh\u1ea5t<\/a>&nbsp;c\u1ea7n l\u01b0u \u00fd khi l\u00e0m vi\u1ec7c v\u1edbi Salt. B\u1ea1n n\u00ean xem l\u1ea1i trang n\u00e0y v\u00e0 tri\u1ec3n khai c\u00e1c bi\u1ec7n ph\u00e1p th\u1ef1c h\u00e0nh \u0111\u00f3 v\u00e0o quy tr\u00ecnh l\u00e0m vi\u1ec7c c\u1ee7a ri\u00eang b\u1ea1n b\u1ea5t c\u1ee9 khi n\u00e0o c\u00f3 th\u1ec3.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.saltproject.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u SaltStack<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Salt&nbsp;(c\u00f2n \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;SaltStack&nbsp;) l\u00e0 m\u1ed9t h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd c\u1ea5u h\u00ecnh v\u00e0 \u0111i\u1ec1u ph\u1ed1i d\u1ef1a tr\u00ean Python. Salt s\u1eed d\u1ee5ng m\u00f4 h\u00ecnh master\/client trong \u0111\u00f3 m\u1ed9t m\u00e1y ch\u1ee7 Salt&nbsp;master&nbsp;chuy\u00ean d\u1ee5ng qu\u1ea3n l\u00fd m\u1ed9t ho\u1eb7c nhi\u1ec1u m\u00e1y ch\u1ee7 Salt&nbsp;minion&nbsp;. Hai trong s\u1ed1 c\u00e1c c\u00f4ng vi\u1ec7c ch\u00ednh c\u1ee7a Salt l\u00e0: H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd gi\u1edbi thi\u1ec7u<\/p>\n","protected":false},"author":1,"featured_media":35989,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124],"tags":[],"class_list":["post-34968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-salt"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34968"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35989"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}