Personnalisation des pods via la création d'un patch d'injection de spécifications de ressources

Vous pouvez utiliser l'injection de spécifications de ressources (RSI) pour créer des correctifs permettant de personnaliser les pods de votre IBM® Software Hub environnement.

Qui doit s'acquitter de cette tâche?
Pour effectuer cette tâche, vous devez :
  • administrateur de cluster
  • Un administrateur d'instance
Quand devez-vous réaliser cette tâche?
Effectuez cette tâche si vous souhaitez créer ou modifier un patch RSI.
Important : ne créez des patchs RSI que si vous êtes un utilisateur expérimenté de Red Hat® OpenShift® Container Platform. Il vous incombe de vous assurer que les correctifs que vous appliquez ne provoquent pas de problèmes dans votre IBM Software Hub installation.

Avant de commencer

Vous pouvez utiliser la cpd-cli manage create-rsi-patch commande pour créer ou mettre à jour des correctifs.

Créer un nouveau correctif
Si vous créez un nouveau patch, indiquez les options suivantes :
  • --cpd_instance_ns
  • --description
  • --patch_name
  • --patch_spec
  • --patch_type
  • --include_labels ou --select_all_pods
  • --skip_apply
  • --spec_format
  • --state
Mise à jour d'un correctif
Si vous mettez à jour un correctif existant, les options que vous spécifiez dépendent de ce que vous souhaitez faire. Vous devez au minimum indiquer :
  • --cpd_instance_ns
  • --patch_name
Vous pouvez modifier les éléments suivants d'un correctif existant :
--description
Vous pouvez mettre à jour la description du correctif.
--patch_spec
Vous pouvez modifier le contenu du fichier JSON qui définit le correctif.
--state
Vous pouvez activer ou désactiver le correctif.
étiquettes
Si vous utilisez l'une des options suivantes, vous pouvez modifier les pods auxquels le correctif s'applique :
  • --include_labels
  • --exclude_labels
Restriction : vous ne pouvez pas passer de l'option --include_labels à l'option --select_all_pods .
Conseil : si vous prévoyez d'appliquer plusieurs correctifs RSI à une instance de IBM Software Hub, il est préférable de les appliquer par lots afin de minimiser les perturbations.

Quels types d'écussons pouvez-vous créer?

Recommandation : avant de créer un correctif RSI, vérifiez le contenu actuel des pods que vous souhaitez corriger :
oc get -n=${PROJECT_CPD_INST_OPERANDS} pod <pod-name> -o yaml
Ajouter des variables d'environnement aux conteneurs de pod
Pour ajouter des variables d'environnement aux conteneurs de pod, vous devez créer un rsi_pod_env_var patch :
--patch_type=rsi_pod_env_var
jsonexemple
Vous pouvez créer un JSON fichier contenant les opérations de patch à appliquer successivement aux conteneurs du pod. Dans cet exemple, les variables d'environnement seront ajoutées à certains conteneurs de pod.
Important : pour appliquer le correctif à des conteneurs de pod spécifiques, vous devez connaître l'index du conteneur.
[
    {
        "op":"add",
        "path":"/spec/containers/0/env/-",
        "value":{
            "name":"replicaset-test-env-json-one","value":"replicaset-test-env-json-one"
        }
    },
    {
        "op":"add",
        "path":"/spec/containers/0/env/-",
        "value":{
            "name":"replicaset-test-env-json-two","value":"replicaset-test-env-json-two"
        }
    }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
specCe json-merge format n'est pas recommandé pour rsi_pod_env_var les correctifs, car le correctif remplace l'intégralité env de la section du pod.
set-envexemple
Vous pouvez créer un JSON fichier contenant un tableau de paires clé-valeur qui définissent les variables d'environnement pour tous les conteneurs du pod.
[
    {
        "name": "myapp-set-env-name-one",
        "value": "myapp-set-env-value-one"
    },
    {
        "name": "myapp-set-env-name-two",
        "value": "set-env-value-two"
    },
    {
        "name": "myapp-set-env-name-four",
        "value": "myapp-set-env-value-four"
    }
]
Le format de votre JSON fichier est set-env:
--spec_format=set-env
Ajouter des étiquettes aux pods
Pour ajouter des étiquettes aux pods, vous devez créer un rsi_pod_label patch :
--patch_type=rsi_pod_label
jsonexemple
Vous pouvez créer un JSON fichier contenant des opérations de modification à appliquer successivement aux étiquettes des métadonnées du pod. Dans cet exemple, le correctif ajoute une nouvelle étiquette aux étiquettes existantes.
[
    {
        "op":"add",
        "path":"/metadata/labels/zen-metastoredb-label-json-one",
        "value":"zen-metastoredb-label-json-one"
    }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
Vous pouvez créer un JSON fichier qui définit les étiquettes à utiliser dans les métadonnées du pod. Dans cet exemple, le correctif écrase toutes les étiquettes existantes et les remplace par la nouvelle étiquette.
{
    "metadata":{
        "labels":{
            "zen-metastoredb-label-merge-one": "zen-metastoredb-label-merge-one"
        }
    }
}

Le format de votre JSON fichier est json-merge:

--spec_format=json-merge
Ajouter des annotations aux pods
Pour ajouter des annotations aux pods, vous devez créer un rsi_pod_annotation patch :
--patch_type=rsi_pod_annotation
jsonexemple
Vous pouvez créer un JSON fichier contenant des opérations de modification à appliquer successivement aux annotations présentes dans les métadonnées du pod. Dans cet exemple, le correctif ajoute une nouvelle annotation aux annotations existantes.
[
    {
        "op":"add",
        "path":"/metadata/annotations/zen-watchdog-anno-json-one",
        "value":"zen-watchdog-anno-json-one"
    }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
Vous pouvez créer un JSON fichier qui définit les annotations à utiliser dans les métadonnées du pod. Dans cet exemple, le correctif écrase toutes les annotations existantes et les remplace par la nouvelle annotation.
{
    "metadata":{
        "annotations":{
            "zen-watchdog-anno-json-merge-one": "zen-watchdog-anno-json-merge-one"
        }
    }
}

Le format de votre JSON fichier est json-merge:

--spec_format=json-merge
Ajouter des champs à la spec section des pods
Pour ajouter des champs à la spec section des pods, vous devez créer un rsi_pod_spec patch :
--patch_type=rsi_pod_spec
jsonexemple
specVous pouvez créer un JSON fichier contenant les opérations de correction à appliquer successivement au pod. Dans cet exemple, le correctif ajoute une classe d'exécution qui définit le moteur d'exécution pour tous les conteneurs du pod.
[
    {
        "op":"add",
        "path":"/spec/runtimeClassName",
        "value":"selinux"
    }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
specVous pouvez créer un JSON fichier qui définit les paramètres à ajouter au pod. specDans cet exemple, le correctif ajoute une stratégie DNS ou remplace la stratégie DNS existante dans le pod.
{
    "spec":{
        "dnsPolicy": "ClusterFirst"
    }
}

Le format de votre JSON fichier est json-merge:

--spec_format=json-merge
Ajouter un init conteneur aux pods
Pour ajouter un init conteneur à des pods, vous devez créer un rsi_pod_init_container patch :
--patch_type=rsi_pod_init_container
jsonexemple
specVous pouvez créer un JSON fichier contenant des opérations de patch qui doivent être appliquées les unes après les autres à la initContainers section du pod. Dans cet exemple, le correctif ajoute un nouveau init conteneur à la liste des conteneurs existants init .
[
   {
      "op":"add",
      "path":"/spec/initContainers",
      "value":[
         {
            "command":[
               "sh",
               "-c",
               "echo The app init"
            ],
            "image":"busybox:1.28",
            "name":"init-svr"
         }
      ]
   }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
specVous pouvez créer un JSON fichier qui définit les paramètres à utiliser dans la initContainers section du pod. Dans cet exemple, le correctif remplace tous les conteneurs existants init par un nouveau init conteneur.
{
    "spec":{
        "initContainers":[
            {
                "command":["sh","-c","echo The app init"],
                "image":"busybox:1.28",
                "name":"init-svr"
            }
        ]
    }
}
Le format de votre JSON fichier est json-merge:
--spec_format=json-merge
Ajouter un sidecar conteneur aux pods
Pour ajouter un sidecar conteneur à des pods, vous devez créer un rsi_pod_side_car_container patch :
--patch_type= rsi_pod_side_car_container
jsonexemple
specVous pouvez créer un JSON fichier contenant des opérations de patch qui doivent être appliquées les unes après les autres à la containers section du pod. Dans cet exemple, le correctif ajoute un nouveau sidecar conteneur à la liste des conteneurs existants.
[
    {
        "op":"add",
        "path":"/spec/containers/-1",
        "value":{ 
            "command":["sh","-c","echo \"The app sidecar\"  \u0026\u0026 sleep 3600 "], 
            "image":"busybox:1.28", 
            "name":"sidecar"
        }
    }
]
Le format de votre JSON fichier est json:
--spec_format=json
json-mergeexemple
specCe json-merge format n'est pas recommandé pour rsi_pod_side_car_container les correctifs, car le correctif remplace l'intégralité containers de la section du pod.

Référence des options

Le tableau suivant fournit des informations détaillées sur les options que vous pouvez spécifier pour la cpd-cli manage create-rsi-patch commande.

Tableau 1 : Options de commande
Option Descriptif
--cpd_instance_ns Le projet (espace de noms) dans lequel vous souhaitez créer ou mettre à jour le correctif. Si d'autres projets sont liés à ce projet, le correctif s'appliquera également à ces projets.
Statut
Obligatoire.
Syntaxe
--cpd_instance_ns=<project-name>
Valeur par défaut
No default. User-defined.
Les valeur valides
Le nom du projet dans lequel vous souhaitez créer la fonction RSI. IBM Software Hub doit être installé dans ce projet.
--description Description du correctif.

Utilisez la description pour expliquer l'objectif et l'intention du correctif.

Statut
Facultatif.
Syntaxe
--description=<description>
Valeur par défaut
No default.
Les valeur valides
Une description.
--exclude_labels Spécifiez un sous-ensemble de pods à ignorer en fonction des étiquettes associées à ces pods.

Si vous spécifiez plusieurs paires clé-valeur, le patch ignorera tous les pods qui possèdent toutes les étiquettes spécifiées.

Statut
Facultatif.

Utilisez cette option en combinaison avec l'option --include_labels ou l'option --select_all_pods .

Syntaxe
--exclude_labels=<comma-separated-key-value-pairs-representing-pod-labels>
Valeur par défaut
No default.
Les valeur valides
Indiquez des étiquettes de pod valides sous forme de paires clé-valeur. Séparez la clé et la valeur par deux points. Séparez les différentes paires clé-valeur par une virgule. Par exemple :

--exclude_labels=key1:value1,key2:value2

--include_labels Indiquez à quels pods le correctif doit s'appliquer en fonction des étiquettes associées à ces pods.

Si vous spécifiez plusieurs paires clé-valeur, le correctif ne sera appliqué qu'aux pods qui possèdent toutes les étiquettes spécifiées. Par exemple, si vous indiquez app.kubernetes.io/component:zen-core,component:zen-core, le correctif s'appliquera à tous les pods portant ces deux étiquettes, même s'ils comportent d'autres étiquettes.

Statut
Facultatif.

Si vous n'indiquez pas cette option, vous devez préciser l'option --select_all_pods .

Syntaxe
--include_labels=<comma-separated-key-value-pairs-representing-pod-labels>
Valeur par défaut
No default.
Les valeur valides
Indiquez des étiquettes de pod valides sous forme de paires clé-valeur. Séparez la clé et la valeur par deux points. Séparez les différentes paires clé-valeur par une virgule. Par exemple :

--include_labels=key1:value1,key2:value2

--patch_name Le nom du correctif à créer ou à mettre à jour.
Statut
Obligatoire.
Syntaxe
--patch_name=<patch-name>
Valeur par défaut
No default. User defined.
Les valeur valides
Le nom doit respecter les règles suivantes :
  • Ne doit pas dépasser 50 caractères.
  • Ne doit contenir que des caractères alphanumériques en minuscules, des tirets (-) ou des points (.).
  • Commencez et terminez par un caractère alphanumérique.
--patch_spec Le fichier JSON contenant le correctif.

Enregistrez le fichier dans le répertoire cpd-cli-workspace/olm-utils-workspace/work/rsi/.

Statut
Nécessaire pour créer un correctif.
Syntaxe
--patch_spec=/tmp/work/rsi/<patch-spec-JSON-file>
Valeur par défaut
No default.
Les valeur valides
Indiquez le nom du fichier JSON dans le champ cpd-cli-workspace/olm-utils-workspace/work/rsi/ au format suivant : /tmp/work/rsi/<file-name.json>
--patch_type Le type de correctif à créer.
Statut
Nécessaire pour créer un correctif.
Syntaxe
--patch_type=rsi_pod_env_var|rsi_pod_label|rsi_pod_annotation| rsi_pod_spec|rsi_pod_init_container| rsi_pod_side_car_container
Valeur par défaut
No default.
Les valeur valides
rsi_pod_env_var
Spécifiez cette option pour ajouter des variables d'environnement aux conteneurs du pod.
rsi_pod_label
Spécifiez cette option pour ajouter des étiquettes aux pods.
rsi_pod_annotation
Spécifiez cette option pour ajouter des annotations aux pods.
rsi_pod_spec
Spécifiez cette option pour ajouter des champs à la spec section des pods.
rsi_pod_init_container
Spécifiez cette option pour ajouter un init conteneur aux pods.
rsi_pod_side_car_container
Spécifiez cette option pour ajouter un sidecar conteneur aux pods.
--select_all_pods Indiquez si vous souhaitez appliquer le correctif à tous les pods du projet « operands » et à tous les projets associés à l'instance.
Statut
Facultatif.

Si vous n'indiquez pas cette option, vous devez préciser l'option --include_labels .

Syntaxe
--select_all_pods=true|false
Valeur par défaut
false

Si vous n'indiquez pas cette option, la valeur par défaut sera utilisée.

Les valeur valides
false
N'appliquez pas le correctif à tous les pods du projet « operands » ni à aucun des projets liés à ce dernier.
true
Appliquez le correctif à tous les pods du projet « operands » ainsi qu'à tous les projets liés à ce dernier.
--skip_apply Indiquez si le webhook RSI attend avant d'appliquer le correctif ou s'il l'applique immédiatement.
Statut
Facultatif.
Syntaxe
--skip_apply=true|false
Valeur par défaut
false

Si vous n'indiquez pas cette option, la valeur par défaut sera utilisée.

Les valeur valides
false
Forcer le webhook à appliquer le correctif immédiatement.
true
Attendez que le correctif soit appliqué. Le correctif sera appliqué lors de la prochaine exécution de RSI CronJob ou lorsque vous exécuterez la apply-rsi-patches commande, selon la première éventualité.
--spec_format Le format du fichier JSON contenant les spécifications du correctif.
Statut
Facultatif.
Syntaxe
--spec_format=json|json-merge|set-env
Valeur par défaut
json-merge

Si vous n'indiquez pas cette option, la valeur par défaut sera utilisée.

Les valeur valides
json
Indiquez json si le --patch_spec fichier JSON contient un tableau JSON d'opérations de correction qui doivent être appliquées les unes après les autres. Par exemple :
[{"op":"add","path":"/metadata/labels/label-1","value":"value-1"}]

Assurez-vous que json les correctifs respectent la norme JSON Patch (RFC 6902) de l' JavaScript.

json-merge
Indiquez json-merge si le --patch_spec fichier JSON contient un chemin vers une spécification de pod au format JSON. Par exemple :
{"metadata":{"labels":{"label-1": "value-1"}}}

Assurez-vous que json les correctifs respectent la norme JSON Merge Patch (RFC 7386).

set-env
Précisez set-env si le --patch_spec fichier JSON contient un tableau JSON composé de paires clé-valeur. Par exemple :
[{"name": "env-var-1","value": "env-var-value-1"}]
Restriction : cette option ne s'applique que si vous créez un rsi_pod_env_var correctif.
--state Indiquez si le correctif peut être appliqué via le webhook RSI.
Statut
Facultatif.
Syntaxe
--state=active|inactive
Valeur par défaut
active

Si vous n'indiquez pas cette option, la valeur par défaut sera utilisée.

Les valeur valides
active
Indiquez active pour permettre au webhook d'appliquer le correctif.
inactive
Spécifiez inactive pour empêcher le webhook d'appliquer le correctif.
-v
-vv
-vvv
Afficher un rapport détaillé.

Les options sont classées de la moins détaillée à la plus détaillée.

Statut
Facultatif.
Syntaxe
Sortie prolixe
-v
Sortie très détaillée
-vv
Affichage le plus détaillé
-vvv
Valeur par défaut
Not applicable.
Les valeur valides
Not applicable.