Utilisation de Kubernetes avec Code Engine

IBM Cloud® Code Engine est conçu de telle sorte que vous n'ayez pas besoin d'interagir avec la technologie sous-jacente sur laquelle il s'appuie. Toutefois, si vous disposez d'outils existants basés sur Kubernetes ou Knative, vous pouvez toujours l'utiliser avec Code Engine. Code Engine prend en charge les API Kubernetes (et Knative) et leurs commandes CLI. Pour plus d'informations sur Knative, voir Utilisation de Knative avec Code Engine.

Si vous décidez d'utiliser Kubernetes avec Code Engine, veuillez tenir compte des informations suivantes :

  • La plupart des conteneurs ou des pods qui s'exécutent sur Kubernetes s'exécutent également sous Code Engine.
  • Les constructions Kubernetes, telles que les déploiements, s'exécutent sous Code Engine s'ils n'utilisent pas de fonctions à l'échelle du cluster, telles que les règles de sécurité. Code Engine s'applique à ce qui peut s'exécuter dans un espace de nom Kubernetes.

Code Engine ne prend pas en charge les ressources spécifiques à OpenShift ou les autres plateformes d'orchestration de conteneur, telles que Docker Swarm ou Compose Swarm.

Installation de l'interface de ligne de commande Kubernetes

Pour installer l'interface de ligne de commande (CLI) d' Kubernetes, téléchargez et installez le fichier kubectl CLI.

N'oubliez pas d'ajouter le binaire kubectl à la variable d'environnement PATH de votre système.

Interaction avec l'API Kubernetes

Pour interagir avec votre projet à partir de l'interface de ligne de commande Kubernetes, kubectl, ou avec Knative, kn vous devez configurer votre environnement pour interagir avec l'API Kubernetes de Code Engine.

Avant de commencer

Vous pouvez configurer votre environnement selon les méthodes suivantes :

  • Vous pouvez ajouter l'option --kubecfg à votre commande project select. Par exemple :

    ibmcloud ce project select --name PROJECT_NAME --kubecfg
    
  • Vous pouvez exporter le fichier kubeconfig directement. Exécutez la commande ibmcloud ce project current pour rechercher le projet que vous ciblez actuellement. Cette commande renvoie également la commande export pour votre fichier kubeconfig. Par exemple :

    ibmcloud ce project current
    

    Exemple de sortie

    Getting the current project context...
    OK
    Name:       myproject
    ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Subdomain:  aabon2dfwa0
    Domain:     us-south.codeengine.appdomain.cloud
    Region:     us-south
    Kubectl Context:  4svg40kna19
    Kubernetes Config:
    Context:             aabon2dfwa0
    Environment Variable: export KUBECONFIG=/user/myusername/.bluemix/plugins/code-engine/myproject-01234567-abcd-abcd-abcd-abcdabcd1111.yaml
    

    Ensuite, copiez la commande export et collez-la dans votre interface de ligne de commande, puis exécutez-la.

Vérifiez que votre environnement a été correctement configuré en exécutant la commande kubectl config.

kubectl config current-context

Si le contexte est correctement défini, la sortie correspond à la valeur Kubectl Context de votre projet. Par exemple, si la valeur Kubectl Context de votre projet est 4svg40kna19, la commande renvoie 4svg40kna19.

Pour plus d'informations sur Kubernetes et son fonctionnement avec l'architecture Code Engine, voir Découvrir l'architecture de Code Engine et l'isolement des charges de travail.

Droits d'accès requis pour l'utilisation de l'API Kubernetes

Après avoir configuré votre environnement, vous pouvez interagir avec l'API Kubernetes. Vous devez disposer du niveau d'accès approprié pour effectuer certaines tâches. Ces rôles sont définis dans Identity and Access Management. Voir Rôles de service IBM Cloud.

Autorités deKubernetes
Ressource Rôle Gestionnaire Rôle Auteur Rôle Lecteur
serviceaccounts get, list, watch get, list, watch Aucun
secrets get, list, watch, create, delete, update, patch, apply, edit get, list, watch, create, delete, update, patch, apply, edit Aucun
configmaps get, list, watch, create, delete, update, patch, apply, edit get, list, watch, create, delete, update, patch, apply, edit Aucun
events get, list, watch get, list, watch Aucun
pods/log get, list, watch get, list, watch get, list, watch
pods get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
services get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
pods/exec create create Aucun
pods/portforward create create Aucun
pods/attach create Aucun Aucun
pods/status get, list get, list Aucun
resourcequotas get, list, watch get, list, watch get, list, watch
limitranges get, list, watch get, list, watch Aucun
deployments get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
daemonset get, list, watch get, list, watch get, list, watch
pods.metrics.k8s.io list list list

Extraction de votre configuration Kubernetes

Vous pouvez extraire votre configuration Kubernetes à l'aide de l'API REST ou de l'interface de ligne de commandeCode Engine.

Extraction de la configuration Kubernetes à l'aide d'une API REST

Pour extraire votre configuration Kubernetes à l'aide d'une API REST :

  1. Authentifiez-vous à l'aide d'IBM Cloud® Identity and Access Management (IAM) afin de recevoir un jeton d'accès IAM.
  2. Interrogez le catalogue IBM Cloud et le contrôleur de ressources IBM Cloud afin de recevoir un identificateur global unique pour votre projet.
  3. Utilisez l'API IBM Cloud Code Engine pour recevoir une configuration Kubernetes.

Authentification à l'aide de Cloud Identity and Access Management

Créez votre IBM Cloud en soumettant une demande POST à https://iam.cloud.ibm.com/identity/token.

Identification de l'identificateur global unique de votre projet Code Engine

Identifiez l'identificateur global unique de votre projet Code Engine en interrogeant le catalogue IBM Cloud et IBM Cloud. Etant donné que cet identificateur global unique ne change pas, vous ne devez effectuer cette étape qu'une seule fois. Si vous connaissez déjà l'identificateur global unique de votre projet Code Engine, vous pouvez ignorer cette étape.

Pour utiliser l'interface de ligne de commande Code Engine afin de reconnaître l'identificateur global unique de votre projet Code Engine, procédez comme suit.

  1. Connectez-vous à IBM Cloud et ciblez une région, un compte et un groupe de ressources.

    ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
    
  2. Exécutez la commande ibmcloud resource.

    ibmcloud resource service-instances --service-name codeengine --long
    
  3. Identifiez l'instance de service qui représente votre projet Code Engine et déterminez l'identificateur global unique à partir de la sortie.

Pour utiliser l'API REST afin de découvrir l'identificateur global unique de votre projet Code Engine, procédez comme suit.

Avant de commencer, vous devez disposer du jeton d'accès (access_token) identifié lors de l'étape précédente.

  1. Utilisez la méthode d'API de catalogue IBM Cloud suivante: Renvoie des entrées de catalogue parent.

    Exemple de sortie

    curl -X GET \
      'https://globalcatalog.cloud.ibm.com/api/v1?include=*&q=name:codeengine+active:true' \
      -H 'Authorization: Bearer ACCESS_TOKEN'
    

    Identifiez l'ID de ressource unique dans la liste de ressources. Le nom de zone est ID et le chemin JSON est resources[].id.

  2. Interrogez le contrôleur de ressources « IBM Cloud » à l'aide de la méthode API du contrôleur de ressources « IBM Cloud » permettant d'obtenir la liste de toutes les instances de ressources. Vous devez connaître le nom du projet Code Engine, la région dans laquelle votre projet réside et l'ID de ressource unique de Code Engine dans le catalogue global. Utilisez le nom de votre projet Code Engine comme paramètre de requête.

    Exemple de sortie

    curl -X GET \
        'https://resource-controller.cloud.ibm.com/v2/resource_instances?name=MY_PROJECT&resource_id=RESOURCE_ID' \
        -H 'Authorization: Bearer ACCESS_TOKEN'
    
  3. Identifiez le projet Code Engine à partir de votre région dans la liste de résultats. Recherchez l'identificateur global unique (guid) à utiliser dans les étapes suivantes.

Interrogation de l'API IBM Code Engine

Avant de commencer, vous devez disposer des informations suivantes :

  • Le jeton d'accès (access_token) et le jeton d'actualisation (refresh_token) obtenus lors des étapes précédentes.
  • L'identificateur global unique (guid) de votre projet Code Engine.
  • La région dans laquelle se trouve votre projet Code Engine.

Utilisez la get kubeconfig for the specified projectCode Engine méthode API pour récupérer la configuration de l' Kubernetes.

Exemple de sortie

curl -X GET \
    'https://resource-controller.cloud.ibm.com/v2/resource_instances?name=MY_PROJECT&resource_id=RESOURCE_ID' \
    -H 'Authorization: Bearer ACCESS_TOKEN'

Récupérez la configuration de votre Kubernetes à l'aide de l'interface de ligne de commande (CLI) d' Code Engine

  1. Connectez-vous à IBM Cloud et ciblez une région, un compte et un groupe de ressources.

    ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
    
  2. Créez votre projet Code Engine :

    ibmcloud ce project create --name PROJECT
    
  3. Sélectionnez votre projet Code Engine comme contexte actuel et ajoutez-le au fichier de configuration Kubernetes par défaut.

    ibmcloud ce project select --name PROJECT --kubecfg
    

Vous êtes maintenant prêt à utiliser les commandes kubectl avec votre projet.

Pour plus d'informations sur l'utilisation des API Code Engine, de l'API Kubernetes et de kubectl, voir les rubriques suivantes :

Définition de ressource personnalisée

Les sections suivantes répertorient les méthodes de définition de ressource personnalisée qu'il convient d'utiliser avec Code Engine.

Méthodes de définition de ressource personnalisée par lots

Vous pouvez utiliser des CRD par lots lorsque vous utilisez des travaux et des exécutions de travail dans Code Engine.

CRD par lots pour Code Engine
Groupe Version Catégorie
codeengine.cloud.ibm.com v1beta1 JobDefinition
codeengine.cloud.ibm.com v1beta1 JobRun

Après avoir extrait la configuration Kubernetes, vous pouvez afficher les détails des définitions de ressources personnalisées par lots en utilisant les méthodes décrites ci-après.

  1. Utilisez kubectl explain --api-version='codeengine.cloud.ibm.com/v1beta1' <Kind>.
  2. Téléchargez la spécification Swagger ou « OpenAPI » des CRD.

Notez que vous ne pouvez pas supprimer une exécution de travail sans supprimer également les pods associés. Toute tentative de suppression avec l'option propagationPolicy=Orphan est rejetée.

Méthodes CRD de fonction

Vous pouvez utiliser des CRD de fonction lorsque vous utilisez des fonctions dans Code Engine.

CRD de fonction pour Code Engine
Groupe Version Catégorie
codeengine.cloud.ibm.com v1beta1 Function

Méthodes de définition de ressource personnalisée de service

Vous pouvez utiliser des CRD de service lorsque vous utilisez des applications dans Code Engine.

Prise en charge des CRD pour Code Engine
Groupe Version Catégorie
serving.knative.dev v1 Configuration
serving.knative.dev v1 Revision
serving.knative.dev v1 Route
serving.knative.dev v1 Service

Pour plus d'informations sur ces CRD, consultez la spécification de l'API Knative Serving.

Méthodes de définition de ressource personnalisée source-image

Vous pouvez utiliser des CRD source-to-image lorsque vous utilisez des générations et des exécutions de génération dans Code Engine.

CRD source-to-image pour Code Engine
Groupe Version Catégorie
shipwright.io v1beta1 Build
shipwright.io v1beta1 BuildRun

Après avoir extrait la configuration Kubernetes, vous pouvez afficher les détails des définitions de ressources personnalisées source-image en utilisant les méthodes décrites ci-après.

Méthodes de définition de ressource personnalisée d'abonnement

Vous pouvez utiliser des CRD d'abonnement lorsque vous utilisez des abonnements dans Code Engine.

CRD d'abonnement pour Code Engine
Groupe Version Catégorie
sources.codeengine.cloud.ibm.com v1alpha1 CosSource
sources.knative.dev v1beta1 KafkaSource
sources.knative.dev v1 PingSource

Après avoir extrait la configuration Kubernetes, vous pouvez afficher les détails des définitions de ressources personnalisées d'abonnement en utilisant l'une des méthodes suivantes.