Mise à jour permanentes

Prérequis

Assurez-vous que vous êtes dans le bon espace de noms :

kubectl config set-context --current --namespace=myspace

Déployez l’application Spring Boot si nécessaire :

kubectl apply -f apps/kubefiles/myboot-deployment-resources-limits.yml
kubectl apply -f apps/kubefiles/myboot-service.yml

Terminal 1 : regardez les Pods.

watch kubectl get pods

Terminal 2: curl loop the service.

IP=$(minikube ip -p devnation)
PORT=$(kubectl get service/myboot -o jsonpath="{.spec.ports[*].nodePort}")

Réaliser une requete sur le service :

curl $IP:$PORT

Et lancez le script de la boucle :

while true
do curl $IP:$PORT
sleep .3
done

Terminal 3 : Exécuter des commandes.

Décrire le déploiement :

kubectl describe deployment myboot
.
.
.
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
.
.
.

Les options StrategyType comprennent RollingUpdate et Recreate :

Modifier les repliquas :

kubectl edit deployment myboot

Recherchez les “réplicas” :

spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: myboot

Et mettez à jour à “2” :

spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: myboot

Enregistrez et un nouveau pod prendra vie :

kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
myboot-d78fb6d58-2fqml   1/1     Running   0          25s
myboot-d78fb6d58-ljkjp   1/1     Running   0          3m

Modifiez l’image associée au déploiement :

kubectl edit deployment myboot

Trouvez l’attribut de l’image :

    spec:
      containers:
      - image: quay.io/rhdevelopers/myboot:v1
        imagePullPolicy: IfNotPresent
        name: myboot

et changez l’image myboot:v2 :

    spec:
      containers:
      - image: quay.io/rhdevelopers/myboot:v2
        imagePullPolicy: IfNotPresent
        name: myboot
kubectl get pods
NAME                      READY   STATUS              RESTARTS   AGE
myboot-7fbc4b97df-4ntmk   1/1     Running             0          9s
myboot-7fbc4b97df-qtkzj   0/1     ContainerCreating   0          0s
myboot-d78fb6d58-2fqml    1/1     Running             0          3m29s
myboot-d78fb6d58-ljkjp    1/1     Terminating         0          8m

Et la sortie du terminal 2 :

Aloha from Spring Boot! 211 on myboot-d78fb6d58-2fqml
Aloha from Spring Boot! 212 on myboot-d78fb6d58-2fqml
Bonjour from Spring Boot! 0 on myboot-7fbc4b97df-4ntmk
Bonjour from Spring Boot! 1 on myboot-7fbc4b97df-4ntmk

Vérifiez l’état du déploiement :

kubectl rollout status deployment myboot
deployment "myboot" successfully rolled out

Remarquez qu’il y a un nouveau RS :

kubectl get rs
NAME                DESIRED   CURRENT   READY   AGE
myboot-7fbc4b97df   2         2         2       116s
myboot-d78fb6d58    0         0         0       10m

Décrire le déploiement :

kubectl describe deployment myboot

Et consultez la section “Événements” :

...
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  16m    deployment-controller  Scaled up replica set myboot-d78fb6d58 to 1
  Normal  ScalingReplicaSet  6m15s  deployment-controller  Scaled up replica set myboot-d78fb6d58 to 2
  Normal  ScalingReplicaSet  2m55s  deployment-controller  Scaled up replica set myboot-7fbc4b97df to 1
  Normal  ScalingReplicaSet  2m46s  deployment-controller  Scaled down replica set myboot-d78fb6d58 to 1
  Normal  ScalingReplicaSet  2m46s  deployment-controller  Scaled up replica set myboot-7fbc4b97df to 2
  Normal  ScalingReplicaSet  2m37s  deployment-controller  Scaled down replica set myboot-d78fb6d58 to 0

Retour à la version 1 :

kubectl set image deployment myboot myboot=quay.io/rhdevelopers/myboot:v1