Search code examples
kubernetesazure-aks

How to kubernetes "kubectl apply" does not update existing deployments


I have a .NET-core web application. This is deployed to an Azure Container Registry. I deploy this to my Azure Kubernetes Service using

kubectl apply -f testdeployment.yaml

with the yaml-file below

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: mycontainerregistry.azurecr.io/myweb:latest
        ports:
        - containerPort: 80
      imagePullSecrets:
        - name: my-registry-key

This works splendid, but when I change some code, push new code to container and run the

kubectl apply -f testdeployment

again, the AKS/website does not get updated, until I remove the deployment with

kubectl remove deployment myweb

What should I do to make it overwrite whatever is deployed? I would like to add something in my yaml-file. (Im trying to use this for continuous delivery in Azure DevOps).


Solution

  • I believe what you are looking for is imagePullPolicy. The default is ifNotPresent which means that the latest version will not be pulled.

    https://kubernetes.io/docs/concepts/containers/images/

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myweb
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
          - name: myweb
            image: mycontainerregistry.azurecr.io/myweb
            imagePullPolicy: Always
            ports:
            - containerPort: 80
          imagePullSecrets:
            - name: my-registry-key
    

    To ensure that the pod is recreated, rather run:

    kubectl delete -f testdeployment && kubectl apply -f testdeployment