Fedora CoreOS

Fedora CoreOS (FCOS)” adalah varian dari “Fedora Linux”, tetapi tidak seperti Fedora atau distro-distro linux kebanyakan, dia bersifat “immutable”.

Imutabilitas Link to heading

Pada sistem operasi tradisional (termasuk distro-distro linux pada umumnya), packages di-install dan di-update secara individual. Misal pada distro RHEL dan turunannya menggunakan “DNF”, dan “APT” untuk Debian dan distro-distro turunannya.

Pada Fedora CoreOS, updates bersifat atomic yang diterapkan sebagai pengganti OS secara keseluruhan. Pendekatan ini menjaga konsistensi dan reliabilitas setiap deployment.

Pendekatan atomic update ini mirip dengan yang biasa dilakukan pada router-router dan perangkat sejenis. Dimana update firmware dilakukan secara keseleruhan.

Instalasi dengan ignition dan butane Link to heading

Seringkali, sebuah organisasi membutuhkan beberapa instalasi mesin tetapi dengan konfigurasi dasar yang sama. Fedora CoreOS memungkinkan hal ini, karena deployment Fedora CoreOS menggunakan file konfigurasi Ignition pada saat instalasi.

File Ignition adalah sebuah file JSON yang berisi konfigurasi yang akan diterapkan pada instalasi. Akan tetapi, untuk memudahkan biasanya sysop akan membuat file YAML yang mudah dibaca oleh manusia, yang disebut konfigurasi Butane.

File ignotion/butane ini kemudian digunakan untuk melakukan deployment ke satu atau beberapa instalasi Fedora CoreOS.

Contoh file Butane:

variant: fcos
version: 1.6.0
passwd:
  users:
    # membuat user standar 'coreos'
    - name: coreos
      ssh_authorized_keys:
        # cantumkan beberapa public ssh key
        - ecdsa-sha2-nistp256 ********************************************************************************************************************************************
      groups:
        # cantumkan beberapa grup
        - wheel

storage:
  disks:
    - device: /dev/disk/by-id/coreos-boot-disk
      wipe_table: false
      partitions:
      # sysroot, base of OS
      - number: 4
        label: root
        # min 8GB, direkomendasikan 10GB
        size_mib: 10240
        resize: true

      # membuat partisi swap sebesar 8GB
      - label: swap
        size_mib: 8192
        type_guid: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F

      - label: var
        size_mib: 0
      
  filesystems:
    - device: /dev/disk/by-partlabel/swap
      format: swap
      wipe_filesystem: true
      with_mount_unit: true

    # direkomendasikan membuat partisi ini
    - path: /var
      device: /dev/disk/by-partlabel/var
      format: xfs
      with_mount_unit: true

  files:
    # aktivasi zram
    - path: /etc/systemd/zram-generator.conf
      mode: 0644
      contents:
        inline: |
          [zram0]
    
    # ubah editor default menjadi vim
    - path: /etc/profile.d/zz-default-editor.sh
      overwrite: true
      contents:
        inline: |
          export EDITOR=vim

    # strategi auto-update
    # auto-update tiap malam pukul 23:30 dengan akurasi 45 menit
    - path: /etc/zincati/config.d/55-updates-strategy.toml
      contents:
        inline: |
          [updates]
          strategy = "periodic"
          [updates.periodic]
          time_zone = "Asia/Jakarta"
          [[updates.periodic.window]]
          days = [ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ]
          start_time = "23:30"
          length_minutes = 45

  links:
    - path: /etc/localtime
      target: ../usr/share/zoneinfo/Asia/Jakarta

systemd:
  units:
    - name: rpm-ostree-install-some.service
      enabled: true
      contents: |
        [Unit]
        Description=Layer some additional packages with rpm-ostree
        Wants=network-online.target
        After=network-online.target
        Before=zincati.service
        ConditionPathExists=!/var/lib/%N.stamp

        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/rpm-ostree install -y --allow-inactive qemu-guest-agent vim-enhanced node-exporter prometheus-podman-exporter wget2 iftop htop nmap wget2 whois tcpdump bwm-ng telnet iperf3 tmux ps_mem iotop
        ExecStart=/bin/touch /var/lib/%N.stamp
        ExecStart=/bin/systemctl --no-block reboot

        [Install]
        WantedBy=multi-user.target

Auto update Link to heading

System dapat dikonfigurasi untuk melakukan update secara otomatis dengan menggunakan strategi auto-update dari servis zincati. Perlu diingat, update ini bersifat atomic, bukan update package-per-package.

Atomic update secara keseluruhan menjamin konsistensi dan reliabilitas, bahkan ketika update ke versi major berbeda yang baru, misal dari Fedora CoreOS versi 41 ke 42.

Di-desain untuk menjalankan containers Link to heading

Fedora CoreOS dioptimasi untuk menjalankan tugas-tugas dalam bentuk container. OS hanya perlu diinstall packages yang berisi paket-paket dasar atau tool-tool basic untuk mengelola sistem, sedangkan tugas-tugas utama dijalankan dengan menggunakan teknologi container.

Fedora CoreOS juga menjadi inti dari OKD, sebuah distribusi komunitas untuk Kubernetes.

Pendekatan ini memungkinkan reliabilitas yang terjamin, bahkan ketika dilakukan update ke versi major yang berbeda.

Kesimpulan Link to heading

Kami menyukai Fedora CoreOS dan menjadikan OS ini sebagai OS utama dalam setiap instalasi VM terkini Kami. Dengan strategi auto-update dari zincati dan kombinasi servis “podman-auto-update” untuk meng-update container-container yang berjalan, Kami tidak perlu sibuk mengupdate satu-per-satu VM dan tugas-tugas yang dijalankan di masing-masing VM tersebut.