Sperrliste für benutzerdefinierte Dienste

Standardmäßig deaktiviert Migrate to Containers nicht benötigte Dienste auf einer VM, wenn Sie sie in einen Container migrieren. Diese Dienste können manchmal Probleme mit dem migrierten Container verursachen oder werden in einem Containerkontext nicht benötigt.

Sie können auch eine eigene benutzerdefinierte Liste mit Diensten definieren, die in einem migrierten Container mithilfe einer benutzerdefinierten Sperrliste deaktiviert werden sollen. Mit einer Sperrliste geben Sie einen oder mehrere Dienste an, die in einem migrierten Container deaktiviert werden sollen.

Sperrliste definieren

Legen Sie Ihre benutzerdefinierte Sperrliste in einer YAML-Datei im folgenden Format fest:

service_list:
  - name: <var>group-name-1</var>
    services:
      - <var>service-name</var>
  - name: <var>group-name-2</var>
    services:
      - <var>service-name</var>
      - <var>ervice-name</var>

Dabei gilt:

  • Gruppen sind eine logische Sammlung von Diensten, mit denen Sie ähnliche Dienste in einer einzigen Gruppe sammeln können. Geben Sie einen beliebigen Stringwert als Gruppennamen ein.
  • Der Dienstname gibt den Dienst an, der im migrierten Container deaktiviert werden soll.

Definieren Sie die Datei my-blocklist.yaml beispielsweise so:

service_list:
  - name: lvm-related
    services:
      - lvm2-lvmetad
  - name: hardware-related
    services:
      - microcode
      - microcode.ctl

Benutzerdefinierte Sperrliste anwenden

Sie können Ihre benutzerdefinierte Sperrliste auf einen Container anwenden, indem Sie entweder:

  • einen Kubernetes-configmap mit der Sperrliste erstellen und der Bereitstellungsspezifikation des Containers hinzufügen.

    Mit dieser Methode können Sie die Sperrliste hinzufügen, ohne den Container neu erstellen zu müssen. Sie müssen jedoch configmap auf jedem Cluster, der zum Hosten des Containers verwendet wird, neu erstellen.

  • das Dockerfile für den Container bearbeiten und das Container-Image neu erstellen.

    Bei dieser Methode müssen Sie das Container-Image neu erstellen, um die Sperrliste hinzuzufügen. Da die Sperrliste jetzt im Container enthalten ist, müssen Sie vor der Bereitstellung keine weitere Konfiguration im Cluster vornehmen.

ConfigMaps verwenden

So erstellen Sie eine Sperrliste mithilfe eines configmap:

  1. Migrieren Sie die Quell-VM zu einem Container.

  2. Erstellen Sie eine Sperrlistendatei im .yaml-Format wie oben gezeigt, in der der Dienst aufgeführt ist, den Sie deaktivieren möchten. In diesem Beispiel trägt die Datei den Namen my-blocklist.yaml.

  3. Erstellen Sie configmap aus der Sperrliste im .yaml-Format:

    kubectl create configmap configmap-name --from-file=path-to-yaml

    In diesem Beispiel trägt die configmap den Namen blocklistcm:

    kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
  4. configmap aufrufen:

    kubectl describe configmaps
  5. Bearbeiten Sie die deployment_spec.yaml, die beim Migrieren des Containers erstellt wurde:

    vi deployment_spec.yaml
  6. Fügen Sie in der Bereitstellungsspezifikation Folgendes hinzu:

    1. Fügen Sie ein neues Volume für configmap unter volumes hinzu:

      volumes:
      - configMap:
           name: blocklistcm # Name of the config map you created above.
         name: blocklistvol # Name of the configmap volume.
      
    2. Fügen Sie eine Volume-Bereitstellung für die configmap hinzu:

      spec:
        containers:
          volumeMounts:
          - mountPath: /etc/bl # Mount path for the configmap volume.
            name: blocklistvol # Name of the configmap volume.
      
    3. Fügen Sie eine neue Umgebungsvariable mit dem Namen HC_CUSTOM_SERVICE_BLOCKLIST hinzu, die den Pfad zur Sperrliste im .yaml-Format angibt. Der Name der Umgebungsvariablen muss HC_CUSTOM_SERVICE_BLOCKLIST sein:

      containers:
       - image: container-image-location
         env:
         - name: HC_CUSTOM_SERVICE_BLOCKLIST
           value: "/etc/bl/my-blocklist.yaml"
      

      Der durch den Wert angegebene Pfad ist die Verkettung von mountPath der configmap und der Name der Sperrliste im .yaml-Format my-blocklist.yaml.

    4. Speichern Sie die Datei.

  7. Stellen Sie den Container bereit:

    kubectl apply -f deployment_spec.yaml
  8. Nachdem der Container bereitgestellt wurde, können Sie den Container prüfen, um sicherzustellen, dass die Dienste nicht ausgeführt werden. Beispiel:

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all```
    

Dockerfile bearbeiten

In diesem Abschnitt wird beschrieben, wie Sie eine benutzerdefinierte Sperrliste erstellen, indem Sie das von der Migration erstellte Dockerfile bearbeiten.

  1. Migrieren Sie die Quell-VM zu einem Container.

  2. Öffnen Sie das Dockerfile in einem Editor.

  3. Fügen Sie den folgenden COPY-Befehl hinzu, um die Sperrliste im .yaml-Format dem Dateisystem des Containers hinzuzufügen:

    COPY src dest 

    Beispiel:

    COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml

    Der Zielpfad kann ein beliebiger Pfad innerhalb des Containers sein.

  4. Fügen Sie eine neue Umgebungsvariable namens HC_CUSTOM_SERVICE_BLOCKLIST hinzu, die den Pfad zur Sperrliste im .yaml-Format auf der Grundlage des im Befehl COPY angegebenen Dateiziels angibt. Der Name der Umgebungsvariablen muss HC_CUSTOM_SERVICE_BLOCKLIST sein:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path

    Beispiel:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
  5. Aktualisieren Sie das Container-Image.

    Die Art und Weise, wie Sie das Container-Image aktualisieren, hängt von der Build-Umgebung ab. Sie können Folgendes angeben:

    1. gcloud, um das Image zu erstellen und in die Container Registry hochzuladen, wie unter Kurzanleitung: Build beschrieben.

    2. docker build, wie unter Image erstellen und ausführen beschrieben.

  6. Nachdem Sie das neue Image erstellt haben, öffnen Sie die Datei deployment_spec.yaml in einem Editor, um den Image-Speicherort zu aktualisieren:

    spec:
      containers:
      - image: new-image-location
    

    Beispiel: new-image-location könnte gcr.io/my-project/my-new-image:v1.0 sein, wenn Sie das Image mit gcloud erstellt und in Container Registry hochgeladen haben.

  7. Stellen Sie den Container bereit:

    kubectl apply -f deployment_spec.yaml
  8. Nachdem der Container bereitgestellt wurde, können Sie den Container prüfen, um sicherzustellen, dass die Dienste nicht ausgeführt werden. Beispiel:

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all