4
votes

Sélecteur de service de mise à jour Kubernetes Kubectl

Mon cluster Kubernetes s'exécute sous Google Cloud. J'ai un déploiement qui fonctionne avec le port 443 et LoadBalancer l'expose à Internet.

Je l'ai créé de cette manière:

kubectl expose deployment my-app --target-port=443 --port=443 --type=LoadBalancer

Après avoir exécuté cette commande, l'équilibreur de charge pointe vers le déploiement de my-app . J'ai maintenant créé my-app2 et je souhaite modifier l'équilibreur de charge pour pointer le nouveau déploiement ( my-app2 ).

Remarque: Supprimer et recréer le déploiement libère l'adresse IP externe et je souhaite l'éviter.

Comment patcher le service existant pour pointer un autre déploiement sans perdre l'adresse IP externe?


0 commentaires

3 Réponses :


2
votes

Ceci est traité dans le didacticiel pour GKE ici .

Tout d'abord, vous devez réserver une adresse IP statique, afin qu'elle soit réutilisée entre les déploiements.

Vous pouvez le faire dans la console GCP ou via la commande, comme ceci: gcloud compute addresses create helloweb-ip --region us-central1

Ensuite, vous pouvez trouver l'adresse IP statique qui vous a été attribuée: Les adresses de calcul gcloud décrivent helloweb-ip --region us-central1

Ensuite, vous devez utiliser cette adresse IP lors de la configuration de votre service LoadBalancer . Dans les commandes "impératives", vous tapez:

kubectl expose deployment my-app --target-port = 443 --port = 443 --type = LoadBalancer --loadBalancerIP = YOUR.IP .ADDRESS.HERE

Le formulaire "déclaratif" YAML est pratique car la configuration devient plus complexe, il peut également être sauvegardé pour une réutilisation future. Par exemple:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"


0 commentaires

1
votes

Oui, vous pouvez utiliser un service déjà existant pour pointer un nouveau déploiement.

Tout ce que vous avez à faire, éditez le service YAML avec l'étiquette du service nouvellement déployé.

Exemple

Supposons que vous ayez récemment déployé les services yaml comme ci-dessous.

selector:
    app: my-app-2

Il porte le libellé

selector:
    app: my-app

Si votre service est comme ci-dessous:

kind: Service
apiVersion: v1
metadata:
  name: my-app
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

il vous suffit de changer la section de sélection du service

template:
    metadata:
      labels:
        app: my-app-2

en

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: my-app-2
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80


4 commentaires

Agréable. Et s'il ne s'agit pas d'un nouveau déploiement (existant)?


il vous suffit alors d'ajouter les étiquettes du déploiement existant au sélecteur de service


@ No1Lives4Ever ça aide?


Oui, c'est un type de solution. Je préfère l'autre solution, évoquée ici. Merci pour l'aide!



11
votes

Enfin, j'ai trouvé la solution:

kubectl patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'


0 commentaires