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
:
Migrieren Sie die Quell-VM zu einem Container.
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
.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
configmap aufrufen:
kubectl describe configmaps
Bearbeiten Sie die
deployment_spec.yaml
, die beim Migrieren des Containers erstellt wurde:vi deployment_spec.yaml
Fügen Sie in der Bereitstellungsspezifikation Folgendes hinzu:
Fügen Sie ein neues Volume für
configmap
untervolumes
hinzu:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
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.
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 mussHC_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
.Speichern Sie die Datei.
Stellen Sie den Container bereit:
kubectl apply -f deployment_spec.yaml
Nachdem der Container bereitgestellt wurde, können Sie den Container prüfen, um sicherzustellen, dass die Dienste nicht ausgeführt werden. Beispiele:
# 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.
Migrieren Sie die Quell-VM zu einem Container.
Öffnen Sie das Dockerfile in einem Editor.
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.
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 BefehlCOPY
angegebenen Dateiziels angibt. Der Name der Umgebungsvariablen mussHC_CUSTOM_SERVICE_BLOCKLIST
sein:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
Beispiel:
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
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:
gcloud
, um das Image zu erstellen und in die Container Registry hochzuladen, wie unter Kurzanleitung: Build beschrieben.docker build
, wie unter Image erstellen und ausführen beschrieben.
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 mitgcloud
erstellt und in Container Registry hochgeladen haben.Stellen Sie den Container bereit:
kubectl apply -f deployment_spec.yaml
Nachdem der Container bereitgestellt wurde, können Sie den Container prüfen, um sicherzustellen, dass die Dienste nicht ausgeführt werden. Beispiele:
# 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