|
Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi. |
Dépannage de la réinitialisation
Chaque MachineInventory avec l’annotation elemental.cattle.io/resettable: "true" déclenchera l’exécution d’un plan de réinitialisation, lors de la suppression.
Le finaliseur machineinventory.elemental.cattle.io ne sera supprimé qu’après que le plan a été exécuté avec succès par le elemental-system-agent fonctionnant sur la machine.
Vous pouvez enquêter sur les raisons pour lesquelles un MachineInventory n’a pas encore été supprimé, en l’examinant :
apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventory
metadata:
# deletionTimestamp has been set. This object has been marked for deletion.
deletionTimestamp: "2023-08-04T08:41:25Z"
annotations:
# `resettable` annotation is enabled.
# This means the machine has to go through reset, before deletion of this object.
elemental.cattle.io/resettable: "true"
# `machineinventory.elemental.cattle.io` finalizer is set.
# The `elemental-operator` is going to create a reset plan for the machine to execute.
# After successful execution of the reset plan, the finalizer is removed and the object will be deleted.
finalizers:
- machineinventory.elemental.cattle.io
status:
conditions:
# Most recent condition shows that the MachineInventory is waiting for a plan to be applied.
- lastTransitionTime: "2023-08-04T08:41:25Z"
message: waiting for plan to be applied
reason: WaitingForPlan
status: "False"
type: Ready
# The plan to be executed is referenced.
# Normally it has the same name of the MachineInventory and lives within the same namespace.
plan:
checksum: 5aba8b6b3161bc52d8953b2428e54ecda3b59e8e0043b49d761d1e79174eded6
secretRef:
name: m-bf1008a1-61d6-4355-b5f5-f7d1c527affe
namespace: fleet-default
Vous pouvez également examiner le plan référencé Secret.
Notez que le elemental-system-agent fonctionnant sur la machine surveille ce secret et devrait exécuter le plan.
Vous pouvez également suivre ses progrès à partir des journaux de la machine : journalctl -u elemental-system-agent -f.
apiVersion: v1
kind: Secret
# This is a `elemental.cattle.io/plan` secret plan.
type: elemental.cattle.io/plan
metadata:
annotations:
# This is a `reset` plan type.
elemental.cattle.io/plan.type: reset
labels:
elemental.cattle.io/managed: "true"
name: m-bf1008a1-61d6-4355-b5f5-f7d1c527affe
namespace: fleet-default
# It is owned by the `MachineInventory` waiting for deletion.
ownerReferences:
- apiVersion: elemental.cattle.io/v1beta1
controller: true
kind: MachineInventory
name: m-bf1008a1-61d6-4355-b5f5-f7d1c527affe
uid: 5aa3863c-63a5-4cb9-91fd-7a45191d4842
data:
# The plan has not been applied yet.
applied-checksum: ""
# It also hasn't failed.
failed-checksum: ""
# The actual plan to be executed, base64 encoded.
plan: eyJmaWxlcyI6W3siY29udGVudCI6ImJtRnRaVG9nUld4bGJXVnVkR0ZzSUZKbGMyVjBDbk4wWVdkbGN6b0tJQ0FnSUc1bGRIZHZjbXN1WVdaMFpYSTZDaUFnSUNBZ0lDQWdMU0JqYjIxdFlXNWtjem9LSUNBZ0lDQWdJQ0FnSUNBZ0xTQmxiR1Z0Wlc1MFlXd3RjbVZuYVhOMFpYSWdMUzFrWldKMVp5QXRMWEpsYzJWMENpQWdJQ0FnSUNBZ0lDQnBaam9nSjFzZ0xXWWdMM0oxYmk5amIzTXZjbVZqYjNabGNubGZiVzlrWlNCZEp3b2dJQ0FnSUNBZ0lDQWdibUZ0WlRvZ1VuVnVjeUJsYkdWdFpXNTBZV3dnY21WelpYUUsiLCJwYXRoIjoiL29lbS9yZXNldC1jbG91ZC1jb25maWcueWFtbCIsInBlcm1pc3Npb25zIjoiMDYwMCJ9XSwiaW5zdHJ1Y3Rpb25zIjpbeyJuYW1lIjoiY29uZmlndXJlIG5leHQgYm9vdCB0byByZWNvdmVyeSBtb2RlIiwiYXJncyI6WyIvb2VtL2dydWJlbnYiLCJzZXQiLCJuZXh0X2VudHJ5PXJlY292ZXJ5Il0sImNvbW1hbmQiOiJncnViMi1lZGl0ZW52In0seyJuYW1lIjoic2NoZWR1bGUgcmVib290IiwiYXJncyI6WyItciIsIisxIl0sImNvbW1hbmQiOiJzaHV0ZG93biJ9XX0K
Le plan créé par le elemental-operator devrait contenir les instructions suivantes :
{
"files": [
// A cloud-init config file is created on the default /oem directory.
// This config will be executed once in recovery mode.
{
"content": "bmFtZTogRWxlbWVudGFsIFJlc2V0CnN0YWdlczoKICAgIG5ldHdvcmsuYWZ0ZXI6CiAgICAgICAgLSBjb21tYW5kczoKICAgICAgICAgICAgLSBlbGVtZW50YWwtcmVnaXN0ZXIgLS1kZWJ1ZyAtLXJlc2V0CiAgICAgICAgICBpZjogJ1sgLWYgL3J1bi9jb3MvcmVjb3ZlcnlfbW9kZSBdJwogICAgICAgICAgbmFtZTogUnVucyBlbGVtZW50YWwgcmVzZXQK",
"path": "/oem/reset-cloud-config.yaml",
"permissions": "0600"
}
],
"instructions": [
{
"name": "configure next boot to recovery mode",
"args": [
"/oem/grubenv",
"set",
"next_entry=recovery"
],
"command": "grub2-editenv"
},
{
"name": "schedule reboot",
"args": [
"-r",
"+1"
],
"command": "shutdown"
}
]
}
Si le elemental-system-agent a exécuté le plan avec succès, le finaliseur machineinventory.elemental.cattle.io sur le MachineInventory sera supprimé et le MachineInventory sera supprimé.
Notez que cela n’indique pas que la machine a été complètement réinitialisée.
C’est une limitation de l’implémentation actuelle et cela s’améliorera éventuellement, de sorte qu’il sera possible de suivre complètement l’état de réinitialisation.
Cependant, à ce stade, nous nous attendons à ce que l’hôte redémarre, et redémarre en mode de récupération.
Une fois en mode de récupération, le cos-setup-network devrait exécuter la configuration cloud-init qui a été écrite sur /oem/reset-cloud-config.yaml.
Vous pouvez surveiller l’état avec journalctl -u cos-setup-network -f.
Les instructions cloud-init devraient ressembler à ce qui suit :
name: {elemental-product-name} Reset
stages:
network.after:
- if: '[ -f /run/cos/recovery_mode ]'
name: Runs elemental reset
commands:
- systemctl start elemental-register-reset
Le CLI elemental-register s’enregistrera auprès du elemental-operator en tant que nouvelle machine. Cela conduira à la création d’un nouvel objet MachineInventory.
La configuration MachineRegistration distante sera également récupérée pour appliquer les options de réinitialisation, par exemple reset-persistent, reset-oem, ou les paramètres d’alimentation, soit reboot ou power-off.
Après la réinitialisation, en fonction des paramètres, la machine devrait soit s’éteindre, soit redémarrer et être prête à être adoptée dans un nouveau cluster.
Suppression forcée d’un MachineInventory en cours de réinitialisation
Si la machine est incapable d’exécuter les instructions de réinitialisation et que le MachineInventory associé n’est pas supprimé, il existe deux manières équivalentes de résoudre manuellement le problème.
-
Supprimez l’annotation
elemental.cattle.io/resettable: "true"duMachineInventory. -
Supprimez le finaliseur
machineinventory.elemental.cattle.ioduMachineInventory.
N’oubliez pas de vous occuper également de la machine elle-même, en la reprovisionnant complètement ou en redémarrant en mode de récupération et en utilisant directement la commande elemental reset.