Tillämpa säkerhets- och kerneluppdateringar på Linux-noder i Azure Kubernetes Service (AKS)

För att skydda dina kluster tillämpas säkerhetsuppdateringar automatiskt på Linux-noder i AKS. Dessa uppdateringar omfattar os-säkerhetskorrigeringar eller kerneluppdateringar. Vissa av dessa uppdateringar kräver en omstart av noden för att slutföra processen. AKS startar inte automatiskt om dessa Linux-noder för att slutföra uppdateringsprocessen.

Processen för att hålla Windows Server-noder uppdaterade är lite annorlunda. Windows Server-noder får inte dagliga uppdateringar. I stället utför du en AKS-uppgradering som distribuerar nya noder med den senaste grundläggande Windows Server-avbildningen och korrigeringarna. Information om AKS-kluster som använder Windows Server-noder finns i Uppgradera en nodpool i AKS.

Den här artikeln visar hur du använder den kured med öppen källkod (KUbernetes REboot Daemon) för att watch för Linux-noder som kräver en omstart och sedan automatiskt hanterar omplaneringen av att köra poddar och omstart av noder.

Anteckning

Kured är ett projekt med öppen källkod i Cloud Native Computing Foundation. Skicka ärenden till den kured GitHub. Ytterligare stöd finns i #kured-kanalen på CNCF Slack.

Innan du börjar

Du behöver Azure CLI version 2.0.59 eller senare installerad och konfigurerad. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Förstå uppdateringsupplevelsen för AKS-noder

I ett AKS-kluster körs kubernetes-noderna som virtuella Azure-datorer (VM). Dessa Linux-baserade virtuella datorer använder en Ubuntu- eller Azure Linux-avbildning med operativsystemet konfigurerat för att automatiskt söka efter uppdateringar varje dag. Om säkerhets- eller kerneluppdateringar är tillgängliga laddas de ned och installeras automatiskt.

AKS-noduppdatering och omstartsprocess med kured

Vissa säkerhetsuppdateringar, till exempel kerneluppdateringar, kräver en omstart av noden för att slutföra processen. En Linux-nod som kräver en omstart skapar en fil med namnet /var/run/reboot-required. Den här omstartsprocessen sker inte automatiskt.

Du kan använda dina egna arbetsflöden och processer för att hantera omstarter av noder eller använda kured för att samordna processen. Med kureddistribueras en DaemonSet som kör en podd på varje Linux-nod i klustret. Dessa poddar i DaemonSet watch för förekomsten av filen /var/run/reboot-required och initierar sedan en process för att starta om noderna.

Nodbilduppgraderingar

Obevakade uppgraderingar tillämpar uppdateringar på Linux-nodoperativsystemet, men avbildningen som används för att skapa noder för klustret förblir oförändrad. Om en ny Linux-nod läggs till i klustret används den ursprungliga avbildningen för att skapa noden. Den här nya noden tar emot alla säkerhets- och kerneluppdateringar som är tillgängliga under den automatiska kontrollen varje dag, men förblir oskickade tills alla kontroller och omstarter har slutförts.

Du kan också använda nodavbildningsuppgradering för att söka efter och uppdatera nodavbildningar som används av klustret. Mer information om uppgradering av nodbild finns i Azure Kubernetes Service (AKS) noduppgradering.

Noduppgraderingar

Det finns en annan process i AKS som gör att du kan uppgradera ett kluster. En uppgradering är vanligtvis att flytta till en nyare version av Kubernetes, inte bara tillämpa nodsäkerhetsuppdateringar. En AKS-uppgradering utför följande åtgärder:

  • En ny nod distribueras med de senaste säkerhetsuppdateringarna och Kubernetes-versionen tillämpad.
  • En gammal nod är avspärrad och dränerad.
  • Poddar schemaläggs på den nya noden.
  • Den gamla noden tas bort.

Du kan inte behålla samma Kubernetes-version under en uppgraderingshändelse. Du måste ange en nyare version av Kubernetes. Om du vill uppgradera till den senaste versionen av Kubernetes kan du uppgradera AKS-klustret.

Distribuera kured i ett AKS-kluster

Installera följande officiella Kured Helm-diagram för att distribuera kured DaemonSet. Detta skapar en roll och klusterroll, bindningar och ett tjänstkonto och distribuerar sedan DaemonSet med hjälp av kured.

# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/

# Update your local Helm chart repository cache
helm repo update

# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured

# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux

Du kan också konfigurera extra parametrar för kured, till exempel integrering med Prometheus eller Slack. Mer information om konfigurationsparametrar finns i det kurerade Helm-diagrammet.

Uppdatera klusternoder

Som standard söker Linux-noder i AKS efter uppdateringar varje kväll. Om du inte vill vänta kan du manuellt utföra en uppdatering för att kontrollera att den kured körs korrekt. Följ först stegen för att SSH till en av dina AKS-noder. När du har en SSH-anslutning till Linux-noden söker du efter uppdateringar och tillämpar dem på följande sätt:

sudo apt-get update && sudo apt-get upgrade -y

Om uppdateringar tillämpades som kräver en nodomstart skrivs en fil till /var/run/reboot-required. Kured söker efter noder som kräver en omstart var 60:e minut som standard.

Övervaka och granska omstartsprocessen

När en av replikerna i DaemonSet har upptäckt att en omstart av noden krävs, placeras ett lås på noden via Kubernetes API. Det här låset förhindrar att fler poddar schemaläggs på noden. Låset anger också att endast en nod ska startas om i taget. När noden är avspärrad töms poddar som körs från noden och noden startas om.

Du kan övervaka statusen för noderna med kommandot kubectl get nodes . Följande exempelutdata visar en nod med statusen SchedulingDisabled när noden förbereder sig för omstartsprocessen:

NAME                       STATUS                     ROLES     AGE       VERSION
aks-nodepool1-28993262-0   Ready,SchedulingDisabled   agent     1h        v1.11.7

När uppdateringsprocessen är klar kan du visa status för noderna med kommandot kubectl get nodes med parametern --output wide . Med de här utdata kan du se en skillnad i KERNEL-VERSION av de underliggande noderna, som du ser i följande exempelutdata. aks-nodepool1-28993262-0 uppdaterades i ett tidigare steg och visar kernelversion 4.15.0-1039-azure. Noden aks-nodepool1-28993262-1 som inte har uppdaterats visar kernelversion 4.15.0-1037-azure.

NAME                       STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-28993262-0   Ready     agent     1h        v1.11.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1039-azure   docker://3.0.4
aks-nodepool1-28993262-1   Ready     agent     1h        v1.11.7   10.240.0.5    <none>        Ubuntu 16.04.6 LTS   4.15.0-1037-azure   docker://3.0.4

Nästa steg

Den här artikeln beskriver hur du använder kured för att starta om Linux-noder automatiskt som en del av säkerhetsuppdateringsprocessen. Om du vill uppgradera till den senaste versionen av Kubernetes kan du uppgradera AKS-klustret.

Information om AKS-kluster som använder Windows Server-noder finns i Uppgradera en nodpool i AKS.