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?
3 Réponses :
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"
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é.
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
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!
Enfin, j'ai trouvé la solution:
kubectl patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'