Introduction to SaltStack

Hudya
1 September 2025
40 minutes

9. Introduction to SaltStack

Author: Hudya


Overview

Setelah mengenal tentang Localstack, kamu akan belajar mengenai salah satu IaC (Infrastructure as Code) yang bernama Salt. Lingkungan engineering ini bisa juga dikatakan dengan SaltStack.

Salt

SaltStack adalah perangkat lunak sumber terbuka berbasis Python yang digunakan untuk otomatisasi TI, manajemen konfigurasi, dan eksekusi tugas jarak jauh. SaltStack menggunakan pendekatan deklaratif, yaitu pengguna menentukan kondisi akhir yang diinginkan, dan alat akan menentukan cara mencapai kondisi tersebut.

SaltStack memiliki beberapa fitur, di antaranya:

  • Dapat menggunakan skrip yang ditulis dalam Python, atau merender skrip yang ditulis dalam bahasa lain seperti YAML atau JSON
  • Menggunakan arsitektur master-slave dengan agen, atau beroperasi dalam mode tanpa agen
  • Klien yang disebut “minion” dapat diperintah dan dikendalikan dari server perintah pusat yang disebut “master”
  • Perintah biasanya dikeluarkan ke minion melalui master dengan memanggil skrip klien yang disebut ‘salt’

Pembuatan Server

Pertama kita memerlukan dua buah server, satu akan berfungsi sebagai server, yang satu lagi akan berfungsi sebagai minion. Buat terlebih dahulu dua buah server dengan multipass:

multipass launch --name prod-ops-01 --memory 2G --disk 25GB
multipass launch --name prod-app-01 --memory 2G --disk 25GB

Kita akan menggunakan dua server, prod-ops-01 akan berfungsi sebagai server salt sedangkan prod-app-01 akan berfungsi sebagai minion, atau server yang akan disuruh-suruh untuk melakukan sesuatu.

Instalasi Salt Master

Masuk ke server prod-ops-01 lalu masukkan perintah berikut baris perbaris sesuai tutorial salt:

# Ensure keyrings dir exists
mkdir -p /etc/apt/keyrings
# Download public key
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public | sudo tee /etc/apt/keyrings/salt-archive-keyring.pgp
# Create apt repo target configuration
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources | sudo tee /etc/apt/sources.list.d/salt.sources

Kemudian jalankan perintah:

sudo apt update

Sekarang install salt-master pada prod-ops-01:

sudo apt install salt-master

Tunggu instalasi lalu jalankan perintah berikut untuk memastikan salt sudah terinstall:

sudo salt --version

Hasilnya menjadi seperti ini:

ubuntu@prod-ops-01:~$ sudo salt --version
salt 3007.1 (Chlorine)

Kemudian jalankan perintah berikut untuk memastikan salt-master berjalan ketika booting.

sudo systemctl enable salt-master && sudo systemctl start salt-master

Konfigurasi Salt Master

Kita perlu melakukan konfigurasi untuk Salt Master, pertama masukkan perintah berikut:

cd /etc/salt
echo "*.salt.ops.int" | sudo tee /etc/salt/autosign.conf

Nantinya kita hanya akan otomatis menerima setiap host minion yang memiliki prefix nama *.salt.ops.int, mengapa kita perlu setting ini? Karena sebenarnya salt itu perlu menerima minion yang ingin dikelola, pada cloud server misalnya AWS, Google, Alibaba, semua network akan aman karena diatur pada sebuah blok yang bisa disebut VPC (Virtual private Cloud) atau jaringan lokal. Sehingga menkonfigurasi penerimaan host minion otomatis akan tetap aman.

Sekarang kita ubah main config masternya, masukkan perintah berikut:

sudo nano master

Hapus tanda pagar (#) pada sebelah kiri default_include, kalian boleh menggunakan nano atau vim dengan akses sudo. Save dengan cara CTRL + SHIFT + X lalu tekan tombol enter.

##### Primary configuration settings #####
##########################################
# This configuration file is used to manage the behavior of the Salt Master.
# Values that are commented out but have an empty line after the comment are
# defaults that do not need to be set in the config. If there is no blank line
# after the comment then the value is presented as an example and is not the
# default.

# Per default, the master will automatically include all config files
# from master.d/*.conf (master.d is a directory in the same directory
# as the main master config file).
default_include: master.d/*.conf

Perintah di atas bertujuan agar semua settingan dasar bisa kita tiban dengan file yang berada pada folder master.d dengan prefix file *.conf

Sekarang kita akan membuat konfigurasi dasar

cd master.d
sudo nano config.conf

Masukkan semua settingan di bawah ini:

interface: 0.0.0.0

auto_accept: True

autosign_file: /etc/salt/autosign.conf

file_roots:
  base:
    - /srv/salt_roots/salt/base

  dev:
    - /srv/salt_roots/salt/dev
    - /srv/salt_roots/salt/base

  prod:
    - /srv/salt_roots/salt/prod
    - /srv/salt_roots/salt/base
pillar_roots:
  base:
    - /srv/salt_roots/pillar/base

  dev:
    - /srv/salt_roots/pillar/dev
    - /srv/salt_roots/pillar/base

  prod:
    - /srv/salt_roots/pillar/prod
    - /srv/salt_roots/pillar/base

Sabar, nanti akan dijelaskan maksudnya apa konfigurasi di atas, tapi yang jelas fokus ke tiga saja terlebih dahulu:

  • interface: Setting host ke 0.0.0.0 agar bisa diakses darimanapun
  • auto_accept: Otomatis accept minion
  • autosign_file: File prefix auto accept untuk host yang diatur.

Setelah selesai jangan lupa untuk restart server saltnya dengan perintah:

sudo systemctl restart salt-master

Kamu bisa memeriksa key minion dengan cara:

sudo salt-key

Hasilnya akan kosong:

ubuntu@prod-ops-01:~$ sudo salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
Rejected Keys:

Tenang saja, kita akan atur setelah minion telah terbuat.

Keluar dari prod-ops-01 lalu jalankan perintah:

multipass list

Catat IPv4 prod-ops-01 kalian karena akan dibutuhkan nanti, contoh:

hudya@perogeremmer-pc:~$ multipass list
Name                    State             IPv4             Image
prod-app-01             Running           10.129.14.5      Ubuntu 24.04 LTS
prod-ops-01             Running           10.129.14.125    Ubuntu 24.04 LTS

Instalasi Salt Minion

Masuk ke prod-app-01. Lakukan hal yang sama untuk menginstall minion:

# Ensure keyrings dir exists
mkdir -p /etc/apt/keyrings
# Download public key
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public | sudo tee /etc/apt/keyrings/salt-archive-keyring.pgp
# Create apt repo target configuration
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources | sudo tee /etc/apt/sources.list.d/salt.sources

Kemudian jalankan perintah:

sudo apt update

Sekarang install salt-minion pada prod-app-01:

sudo apt install salt-minion

Sekarang salt-minion sudah terinstall, tapi kita perlu menghubungkannya dengan server.

Konfigurasi Salt Minion

Pertama kita tambahkan host master terlebih dahulu:

echo "<IPv4> prod-ops.salt.ops.int" | sudo tee -a /etc/hosts

Contoh:

echo "10.129.14.125 prod-ops.salt.ops.int" | sudo tee -a /etc/hosts

Sekarang coba ping

ping prod-ops.salt.ops.int

Kalau berhasil akan menjadi seperti ini:

ubuntu@prod-app-01:/etc/salt/minion.d$ ping prod-ops.salt.ops.int
PING prod-ops.salt.ops.int (10.129.14.125) 56(84) bytes of data.
64 bytes from prod-ops.salt.ops.int (10.129.14.125): icmp_seq=1 ttl=64 time=1.03 ms
64 bytes from prod-ops.salt.ops.int (10.129.14.125): icmp_seq=2 ttl=64 time=0.710 ms
64 bytes from prod-ops.salt.ops.int (10.129.14.125): icmp_seq=3 ttl=64 time=0.850 ms
64 bytes from prod-ops.salt.ops.int (10.129.14.125): icmp_seq=4 ttl=64 time=0.887 ms
64 bytes from prod-ops.salt.ops.int (10.129.14.125): icmp_seq=5 ttl=64 time=0.578 ms

Sekarang pergi ke /etc/salt dengan cara:

cd /etc/salt

Ubah id minion pada file minion_id dengan cara:

echo "prod-app-01.salt.ops.int" | sudo tee /etc/salt/minion_id

Sekarang kita ubah main config minionnya, masukkan perintah berikut:

sudo nano minion

Hapus tanda pagar (#) pada sebelah kiri default_include, kalian boleh menggunakan nano atau vim dengan akses sudo. Save dengan cara CTRL + SHIFT + X lalu tekan tombol enter.

##### Primary configuration settings #####
##########################################
# This configuration file is used to manage the behavior of the Salt Minion.
# With the exception of the location of the Salt Master Server, values that are
# commented out but have an empty line after the comment are defaults that need
# not be set in the config. If there is no blank line after the comment, the
# value is presented as an example and is not the default.

# Per default the minion will automatically include all config files
# from minion.d/*.conf (minion.d is a directory in the same directory
# as the main minion config file).
default_include: minion.d/*.conf

Sekarang masukkan perintah berikut:

cd minion.d
echo "master: prod-ops.salt.ops.int" | sudo tee config.conf

Restart minionnya:

sudo systemctl restart salt-minion

Kembali ke Salt Master

Sekarang masuk kembali ke server salt master, lalu jalankan perintah berikut:

sudo salt-key

Apabila kamu melakukannya dengan benar maka kamu akan menemukan hasil seperti ini:

ubuntu@prod-ops-01:~$ sudo salt-key
Accepted Keys:
prod-app-01.salt.ops.int
Denied Keys:
Unaccepted Keys:
Rejected Keys:

Server prod-app-01 sudah berhasil kita terima sebagai minion. Sekarang kita juga bisa memastikannya apakah servernnya menyala dengan perintah berikut:

sudo salt prod-app-* test.ping

Hasilnya:

ubuntu@prod-ops-01:~$ sudo salt prod-app-* test.ping
prod-app-01.salt.ops.int:
    True

Kita coba perintahkan minion kita untuk melihat isi direktori /etc/salt

sudo salt prod-app-* cmd.run "ls /etc/salt"

Hasilnya:

ubuntu@prod-ops-01:~$ sudo salt prod-app-* cmd.run "ls /etc/salt"
prod-app-01.salt.ops.int:
    minion
    minion.d
    minion_id
    pki
    proxy
    proxy.d

Kita juga bisa menyuruhnya update apt.

sudo salt prod-app-* cmd.run "sudo apt update -y"

Hasilnya:

ubuntu@prod-ops-01:~$ sudo salt prod-app-* cmd.run "sudo apt update -y"
prod-app-01.salt.ops.int:
    
    WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    
    Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
    Hit:2 http://security.ubuntu.com/ubuntu noble-security InRelease
    Get:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
    Hit:4 https://packages.broadcom.com/artifactory/saltproject-deb stable InRelease
    Hit:5 http://archive.ubuntu.com/ubuntu noble-backports InRelease
    Fetched 126 kB in 3s (41.4 kB/s)
    Reading package lists...
    Building dependency tree...
    Reading state information...
    44 packages can be upgraded. Run 'apt list --upgradable' to see them.

Keren bukan?

Tags

devops beginner