GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Cos'è Cloud-Init?

Introduzione

Le istanze cloud si basano su immagini cloud predefinite. Poiché ogni istanza utilizza un sistema operativo modello, spetta all'utente configurare e configurare un'istanza univoca utilizzando i dati utente.

Invece di configurarli dopo l'avvio, è disponibile uno strumento open source che automatizza l'inizializzazione:cloud-init .

Cos'è cloud-init?

Cloud-init è un servizio utilizzato per personalizzare i sistemi operativi basati su Linux nel cloud. Ti consente di personalizzare le macchine virtuali fornite da un fornitore di cloud modificando la configurazione del sistema operativo generico all'avvio. Canonical inizialmente sviluppò cloud-init per Ubuntu, ma si espanse alla maggior parte dei principali sistemi operativi Linux e FreeBSD. Oggi supporta ufficialmente 8 sistemi operativi Unix:Ubuntu, Arch Linux, CentOS, Red Hat, FreeBSD, Fedora, Gentoo Linux e openSUSE.

Il servizio viene utilizzato come standard di settore per l'inizializzazione in fase iniziale di una macchina virtuale una volta eseguito il provisioning. Pertanto, ti consente di configurare una VM in modo che funzioni come necessario al primo avvio.

La maggior parte dei fornitori ha il servizio preinstallato sulle immagini del sistema operativo Unix. Quando crei una macchina virtuale utilizzando il dashboard del fornitore cloud, molto probabilmente avrai un cloud-init o dati utente sezione per specificare la configurazione desiderata.

Cloud-init viene utilizzato per installare pacchetti, configurare utenti e sicurezza, scrivere file ed eseguire altre attività che desideri vengano gestite automaticamente al primo avvio o successivi.

Come funziona cloud-init?

Cloud-init è un servizio che configura la tua istanza VM con la configurazione e il software desiderati pronti per l'uso. Il servizio si avvia all'avvio e utilizza i metadati forniti dal provider cloud o dall'utente diretto.

Lo fa eseguendo script, più comunemente da cloud-config file. Pertanto, per modificare le impostazioni predefinite, è necessario modificare il file di configurazione cloud sull'immagine della macchina virtuale. Questo è un file YAML che segue le regole di sintassi YAML di base, come:

  • Le relazioni tra gli elementi sono definite da rientri con spazi bianchi .
  • Un personaggio pipe (| ) prima che un testo indichi che deve essere interpretato così com'è.
  • I blocchi di testo sono rientrati .
  • Un trattino da protagonista (- ) identifica i membri di una lista.
  • Un due punti (: ) + spazio + valore viene utilizzato per creare voci di array associative.

Puoi aggiungere il file di configurazione cloud:

  1. Nell'interfaccia del piano di controllo, quando si selezionano opzioni aggiuntive. Il provider avrà un cloud-init o Dati utente opzione in cui puoi incollare il file di configurazione.
  2. Attraverso un file nell'oggetto JSON in una richiesta API.

Funzionalità cloud-init

Il servizio cloud-init viene utilizzato per una varietà di cose, tra cui:

  • Aggiunta di utenti e gruppi.
  • Scrittura di file arbitrari.
  • Aggiunta di repository YUM.
  • Esecuzione dei comandi al primo avvio.

Per conoscere la sintassi utilizzata per ciascuna funzionalità, leggi le sottosezioni seguenti.

Aggiungi utenti e gruppi utilizzando cloud-init

Per aggiungere utenti e gruppi a una macchina virtuale durante il provisioning, utilizza la seguente sintassi nel file di configurazione cloud:

#cloud-config
# Add groups to the system.
groups:
  - group_name: [member1,member2]
# Add users to the system.
users:
 - default
 - name: User’s login name.
   gecos: User’s real name.
   primary_group: The primary group the user belongs to. If omitted, a new group is created under the user’s name.
   groups: Additional groups to which you want to add the user.
   selinux_user: The SELinux user for the user's login. If omitted, the system selects the default SELinux user.
   expiredate: 'year-month-day' - Data when the user’s account should be disabled.
   ssh_import_id: SSH IDs which you want to import.
   lock_passwd: Use true or false to define whether you want to lock the password to disable password login. By default, the value is set to true.
   inactive: 'x' - The number of days until the account is disabled after a password expires.
   passwd: The hash of the password you want to use.
   ssh_authorized_keys: Add keys to user’s authorized keys file:
      - <ssh pub key 1>
      - <ssh pub key 2>
   system: Use true or false to define the new user as a system user.
   sudo: Use sudo rule string(s) to define the user privileges. The user has no privileges by default, but it can accept one or multiple sudo rule strings. For example, add ALL=(ALL) NOPASSWD:ALL to give the user unrestricted access. To prevent sudo access, type: False.
  - snapuser: Specify the email for your Ubuntu SSO account to allow snap to import a username and public keys into the system.

Non è necessario includere tutte le opzioni quando si aggiunge un nuovo utente. Le configurazioni sopra elencate si applicano solo se l'utente è nuovo. Se l'utente esiste già, il sistema modifica solo le seguenti opzioni:

  • testo_normale_passwd
  • hashed_passwd
  • lock_passwd
  • sudo
  • ssh_authorized_keys
  • ssh_redirect_user

Scrittura di file arbitrari

Puoi scrivere file arbitrari usando la sintassi di configurazione di yaml. Il contenuto può essere codificato (base64 o gzip) e specificato in testo normale o binario. Prima che i dati vengano scritti nel percorso definito, vengono decodificati. Il modulo supporta tutte le distribuzioni e ha un modulo di frequenza di una volta per istanza.

Per scrivere file arbitrari con cloud-init, usa la seguente sintassi:

#cloud-config
# Write out arbitrary files
write_files:
  path: The file path to which the content is added.
  content: The content you want to add to the path.
  owner: The user/group that has ownership. By default, the owner is root:root.
  permissions: The permission of the specified path, defined with the appropriate octal string. The default permission is ‘0644’.
  append: Use true or false to choose whether to append the specified content to an existing file if the path provided exists. The default value is false.

Aggiunta di repository YUM

Potrebbe essere necessario configurare un repository yum per assicurarti di utilizzare i pacchetti corretti per installare il software desiderato. Usa cloud-init per aggiungere le configurazioni del repository yum al sistema. Il file di configurazione viene aggiunto a /etc/yum.repos.d .

Per aggiungere una configurazione del repository yum, usa la sintassi:

yum_repos:
  <repo_name>:
            baseurl: Repository URL.
            name: Repository name.
            enabled: true/false
            + any other repository configuration option

Esecuzione dei comandi al primo avvio

Per eseguire comandi arbitrari all'inizio del processo di avvio, puoi utilizzare bootcmd o runcmd modulo.

bootcmd esegui comandi specifici ad ogni avvio, dopo aver eseguito un boothok . Supporta tutte le distribuzioni e accetta i comandi specificati come elenchi o stringhe. La sintassi è:

bootcmd: 
   - array of (array of string)/(string)

Ad esempio:

bootcmd:
  - echo 192.168.1.130 us.archive.ubuntu.com >> /etc/hosts
  - [cloud-init-per, once, mymkfs, mkfs, /dev/vdb ]

runcmd esegue un comando solo al primo avvio. Può eseguire comandi specificati come elenchi o stringhe. Tutti i comandi devono essere nella sintassi yaml (quindi assicurati di citare tutti i caratteri problematici). La sintassi è:

runcmd: 
   - array of (array of string)/(string)

Come nel seguente esempio:

runcmd:
 - [ ls, -l, / ]
 - [ sh, -xc, "echo $(date) ': hello world!'" ]
 - [ sh, -c, echo "=========hello world'=========" ]
 - ls -l /root

Configura chiavi SSH

Puoi gestire la configurazione SSH utilizzando cloud-init.

Le chiavi autorizzate sono chiavi SSH memorizzate nella home directory dell'utente, in .ssh/authorized_keys . Definiscono quali chiavi possono connettersi a quell'account utente specifico sul sistema. Aggiungi le chiavi pubbliche come elenco durante la configurazione di un utente utilizzando ssh_authorized_key :

ssh_authorized_keys:
  - ssh_pub_key_1
  - ssh_pub_key_2

Le chiavi elencate apparterranno all'utente configurato o al primo definito nel modulo utente.

Se disponi già di chiavi SSH private pregenerate, puoi archiviarle sul server. Cloud-init supporta i sistemi crittografici a chiave pubblica RSA, DSA ed ECDS. Assicurati di prestare attenzione alla formattazione quando aggiungi le chiavi SSH:usa interruzioni di riga, blocchi, chiavi pipe e specifica sempre la CHIAVE PRIVATA INIZIALE e la CHIAVE PRIVATA FINE.


ssh_keys:
  rsa_private: |
    -----BEGIN RSA PRIVATE KEY-----
    your_rsa_private_key
    -----END RSA PRIVATE KEY-----

  rsa_public: your_rsa_public_key

Imposta una lingua

Per impostare e applicare una locale di sistema a livello di sistema, utilizzare cc_locale modulo. Utilizzare il seguente schema di configurazione per definire:

locale: What you want to configure as the system's locale.
locale_configfile: The path to the file where you want to write the locale configuration.

Definisci il nome host

Con cloud-init, puoi impostare il nome host e l'FQDN (nome di dominio completo). Esistono diversi modi per farlo:

  • Specifica il nome di dominio completo utilizzando il fqdn chiave.
  • Definisci il nome host utilizzando il hostname chiave.
  • Utilizza il hostname chiave per definire fqdn (non consigliato).
  • Utilizza sia il hostname chiave e il fqdn chiave.

Le chiavi di configurazione per la definizione del nome host includono:

preserve_hostname: Use true or false to set whether to preserve the host name or allow altering. 
prefer_fqdn_over_hostname: Use true or false to set whether to force the use of FQDN in all distros.
fqdn: FQDN
hostname: FQDN/hostname

Ubuntu
  1. Che cos'è un utente Linux?

  2. Ogni utente registrato sta facendo?

  3. Cosa sono gli account utente riservati in MySQL

  4. Cosa c'è di vulnerabile in questo codice C?

  5. Spiegazione della manipolazione della funzione Bash

Cos'è Jenkins?

Che cos'è 127.0.0.1 Localhost?

Cos'è Localhost?

su Comando in Linux

Useradd vs Adduser:qual è la differenza?

Che cos'è il file /etc/passwd in Linux?