GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Was ist Cloud-Init?

Einführung

Cloud-Instanzen basieren auf Standard-Cloud-Images. Da jede Instanz ein Vorlagenbetriebssystem verwendet, ist es Sache des Benutzers, anhand von Benutzerdaten eine eindeutige Instanz zu konfigurieren und einzurichten.

Anstatt jedes nach dem Hochfahren zu konfigurieren, gibt es ein Open-Source-Tool, das die Initialisierung automatisiert - cloud-init .

Was ist cloud-init?

Cloud-init ist ein Dienst, der zum Anpassen von Linux-basierten Betriebssystemen in der Cloud verwendet wird. Sie können virtuelle Maschinen anpassen, die von einem Cloud-Anbieter bereitgestellt werden, indem Sie die generische Betriebssystemkonfiguration beim Booten ändern. Canonical hat Cloud-Init zunächst für Ubuntu entwickelt, aber auf die meisten wichtigen Linux- und FreeBSD-Betriebssysteme ausgeweitet. Heute unterstützt es offiziell 8 Unix-Betriebssysteme – Ubuntu, Arch Linux, CentOS, Red Hat, FreeBSD, Fedora, Gentoo Linux und openSUSE.

Der Dienst wird als Industriestandard für die Initialisierung einer VM in der Frühphase verwendet, sobald sie bereitgestellt wurde. Daher können Sie eine VM so einrichten, dass sie beim ersten Start nach Bedarf funktioniert.

Die meisten Anbieter haben den Dienst auf Unix-OS-Images vorinstalliert. Wenn Sie eine virtuelle Maschine mit dem Cloud-Anbieter-Dashboard erstellen, haben Sie höchstwahrscheinlich eine cloud-init oder Benutzerdaten Abschnitt, um die gewünschte Konfiguration anzugeben.

Cloud-init wird verwendet, um Pakete zu installieren, Benutzer und Sicherheit zu konfigurieren, Dateien zu schreiben und andere Aufgaben auszuführen, die automatisch beim ersten oder nachfolgenden Booten ausgeführt werden sollen.

Wie funktioniert Cloud-Init?

Cloud-init ist ein Dienst, der Ihre VM-Instanz mit der gewünschten Konfiguration und einsatzbereiten Software einrichtet. Der Dienst startet beim Booten und verwendet die Metadaten, die vom Cloud-Anbieter oder dem direkten Benutzer bereitgestellt werden.

Dies geschieht durch Ausführen von Skripten, am häufigsten aus der cloud-config Datei. Um Standardeinstellungen zu ändern, müssen Sie daher die cloud-config-Datei auf Ihrem VM-Image bearbeiten. Dies ist eine YAML-Datei, die den grundlegenden YAML-Syntaxregeln folgt, wie zum Beispiel:

  • Beziehungen zwischen Elementen werden durch Einrückungen mit Leerzeichen definiert .
  • Ein Pipe-Zeichen (| ), bevor ein Text angibt, dass er unverändert interpretiert werden sollte.
  • Textblöcke sind eingerückt .
  • Ein führender Bindestrich (- ) identifiziert Mitglieder einer Liste.
  • Ein Doppelpunkt (: ) + Leerzeichen + Wert wird verwendet, um assoziative Array-Einträge zu erstellen.

Sie können die cloud-config-Datei hinzufügen:

  1. In der Benutzeroberfläche der Steuerungsebene, wenn zusätzliche Optionen ausgewählt werden. Der Anbieter wird eine Cloud-Init haben oder Benutzerdaten Option, wo Sie die Konfigurationsdatei einfügen können.
  2. Durch eine Datei im JSON-Objekt in einer API-Anfrage.

Cloud-Init-Fähigkeiten

Der cloud-init-Dienst wird für eine Vielzahl von Dingen verwendet, darunter:

  • Hinzufügen von Benutzern und Gruppen.
  • Schreiben beliebiger Dateien.
  • Hinzufügen von YUM-Repositories.
  • Ausführen von Befehlen beim ersten Booten.

Lesen Sie die folgenden Unterabschnitte, um die für die einzelnen Funktionen verwendete Syntax zu lernen.

Benutzer und Gruppen mit Cloud-Init hinzufügen

Verwenden Sie zum Hinzufügen von Benutzern und Gruppen zu einer VM während der Bereitstellung die folgende Syntax in Ihrer cloud-config-Datei:

#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.

Sie müssen nicht alle Optionen angeben, wenn Sie einen neuen Benutzer hinzufügen. Die oben aufgeführten Konfigurationen gelten nur, wenn der Benutzer neu ist. Wenn der Benutzer bereits existiert, ändert das System nur die folgenden Optionen:

  • plain_text_passwd
  • hashed_passwd
  • lock_passwd
  • sudo
  • ssh_authorized_keys
  • ssh_redirect_user

Beliebige Dateien schreiben

Sie können beliebige Dateien mit der yaml-Konfigurationssyntax schreiben. Der Inhalt kann kodiert (base64 oder gzip) und im Klartext oder binär angegeben werden. Bevor die Daten auf den definierten Pfad geschrieben werden, werden sie dekodiert. Das Modul unterstützt alle Distributionen und hat ein Frequenzmodul von einmal pro Instanz.

Um beliebige Dateien mit cloud-init zu schreiben, verwenden Sie die folgende Syntax:

#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.

Hinzufügen von YUM-Repositories

Möglicherweise müssen Sie ein Yum-Repository konfigurieren, um sicherzustellen, dass Sie die richtigen Pakete verwenden, um die gewünschte Software zu installieren. Verwenden Sie cloud-init, um Yum-Repository-Konfigurationen zum System hinzuzufügen. Die Konfigurationsdatei wird zu /etc/yum.repos.d hinzugefügt .

Um eine Yum-Repository-Konfiguration hinzuzufügen, verwenden Sie die Syntax:

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

Ausführen von Befehlen beim ersten Booten

Um beliebige Befehle früh im Startvorgang auszuführen, können Sie bootcmd verwenden oder runcmd Modul.

bootcmd Führen Sie bestimmte Befehle bei jedem Start aus, nachdem Sie einen Boothook ausgeführt haben . Es unterstützt alle Distributionen und akzeptiert Befehle, die als Listen oder Zeichenfolgen angegeben sind. Die Syntax lautet:

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

Zum Beispiel:

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

runcmd führt einen Befehl nur beim ersten Booten aus. Es kann Befehle ausführen, die als Listen oder Zeichenfolgen angegeben sind. Alle Befehle müssen in der Yaml-Syntax vorliegen (stellen Sie daher sicher, dass Sie alle problematischen Zeichen in Anführungszeichen setzen). Die Syntax lautet:

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

Wie im folgenden Beispiel:

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

SSH-Schlüssel konfigurieren

Sie können die SSH-Konfiguration mit cloud-init verwalten.

Autorisierte Schlüssel sind SSH-Schlüssel, die im Home-Verzeichnis des Benutzers unter .ssh/authorized_keys gespeichert sind . Sie definieren, welche Schlüssel sich mit diesem bestimmten Benutzerkonto auf dem System verbinden können. Fügen Sie die öffentlichen Schlüssel als Liste hinzu, wenn Sie einen Benutzer mit ssh_authorized_key konfigurieren :

ssh_authorized_keys:
  - ssh_pub_key_1
  - ssh_pub_key_2

Die aufgelisteten Schlüssel gehören dem konfigurierten Benutzer oder dem ersten, der im Benutzermodul definiert ist.

Wenn Sie bereits vorab generierte private SSH-Schlüssel haben, können Sie diese auf dem Server speichern. Cloud-init unterstützt RSA-, DSA- und ECDS-Public-Key-Kryptosysteme. Achten Sie beim Hinzufügen der SSH-Schlüssel auf die Formatierung - verwenden Sie Zeilenumbrüche, Blöcke, Pipe-Schlüssel und geben Sie immer den BEGINING PRIVATE KEY und END PRIVATE KEY an.


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

  rsa_public: your_rsa_public_key

Ein Gebietsschema einrichten

Um ein Systemgebietsschema systemweit einzurichten und anzuwenden, verwenden Sie cc_locale Modul. Verwenden Sie das folgende Konfigurationsschema, um Folgendes zu definieren:

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.

Definieren Sie den Hostnamen

Mit cloud-init können Sie den Hostnamen und den FQDN (vollständig qualifizierter Domänenname) festlegen. Dazu gibt es mehrere Möglichkeiten:

  • Geben Sie den vollständigen Domänennamen an mit dem fqdn Schlüssel.
  • Definieren Sie den Hostnamen unter Verwendung des hostname Schlüssel.
  • Verwenden Sie den hostname Schlüssel zum Definieren von fqdn (nicht empfohlen).
  • Verwenden Sie sowohl den hostname Schlüssel und den fqdn Schlüssel.

Die Konfigurationsschlüssel zum Definieren des Hostnamens umfassen:

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. Was ist ein Linux-Benutzer?

  2. Was ist Web 3.0?

  3. Was sind reservierte Benutzerkonten in MySQL

  4. Was ist der Zweck des Benutzers „mysql.sys@localhost“.

  5. Was ist an diesem C-Code anfällig?

Was ist Jenkins?

Was ist 127.0.0.1 Localhost?

Was ist Localhost?

su-Befehl unter Linux

Useradd vs. Adduser:Was ist der Unterschied?

Was ist die Datei /etc/passwd unter Linux?