Použití aktualizací zabezpečení a jádra u linuxových uzlů v Azure Kubernetes Service (AKS)

Kvůli ochraně clusterů se aktualizace zabezpečení automaticky použijí na uzly s Linuxem v AKS. Tyto aktualizace zahrnují opravy zabezpečení operačního systému nebo aktualizace jádra. Některé z těchto aktualizací vyžadují k dokončení procesu restartování uzlu. AKS automaticky nerestartuje tyto linuxové uzly, aby se proces aktualizace dokončil.

Postup udržování uzlů Windows Serveru v aktuálním stavu je trochu jiný. Uzly Windows Serveru nedostávají denní aktualizace. Místo toho provedete upgrade AKS, který nasadí nové uzly s nejnovější základní imagí a opravami Windows Serveru. Informace o clusterech AKS, které používají uzly Windows Serveru, najdete v tématu Upgrade fondu uzlů v AKS.

V tomto článku se dozvíte, jak pomocí opensourcového kuredu (KUbernetes REboot Démonem) watch pro uzly s Linuxem, které vyžadují restartování, a pak automaticky zpracovat přeplánování spuštěných podů a procesu restartování uzlu.

Poznámka

Kured je opensourcový projekt ve službě Cloud Native Computing Foundation. Nasměrujte problémy na kured GitHub. Další podporu najdete v kanálu #kured na CNCF Slacku.

Než začnete

Potřebujete nainstalovat a nakonfigurovat Azure CLI verze 2.0.59 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Seznámení s prostředím aktualizace uzlů AKS

V clusteru AKS běží uzly Kubernetes jako virtuální počítače Azure. Tyto virtuální počítače s Linuxem používají image Ubuntu nebo Azure Linux, přičemž operační systém je nakonfigurovaný tak, aby každý den automaticky kontroloval aktualizace. Pokud jsou k dispozici aktualizace zabezpečení nebo jádra, automaticky se stáhnou a nainstalují.

Proces aktualizace a restartování uzlu AKS s využitím kured

Některé aktualizace zabezpečení, například aktualizace jádra, vyžadují k dokončení procesu restartování uzlu. Uzel s Linuxem, který vyžaduje restartování, vytvoří soubor s názvem /var/run/reboot-required. K tomuto procesu restartování nedojde automaticky.

Ke zpracování restartování uzlů můžete použít vlastní pracovní postupy a procesy nebo je můžete použít kured k orchestraci procesu. V kurednástroji se nasadí DaemonSet , který spustí pod na každém uzlu Linuxu v clusteru. Tyto pody v daemonSet watch existenci souboru /var/run/reboot-required a pak zahájí proces restartování uzlů.

Upgrady imagí uzlů

Bezobslužné upgrady nainstalují aktualizace operačního systému uzlu Linux, ale image použitá k vytvoření uzlů pro váš cluster zůstane beze změny. Pokud se do clusteru přidá nový linuxový uzel, použije se k jeho vytvoření původní image. Tento nový uzel obdrží všechny aktualizace zabezpečení a jádra dostupné během automatické kontroly každý den, ale zůstane bez aktualizace, dokud se nedokončí všechny kontroly a restartování.

Případně můžete použít upgrade image uzlu ke kontrole a aktualizaci imagí uzlů používaných vaším clusterem. Další informace o upgradu imagí uzlu najdete v tématu Upgrade bitové kopie uzlu Azure Kubernetes Service (AKS).

Upgrady uzlů

V AKS je další proces, který umožňuje upgradovat cluster. Upgradem je obvykle přechod na novější verzi Kubernetes, ne jenom aktualizace zabezpečení uzlů. Upgrade AKS provede následující akce:

  • Nasadí se nový uzel s nejnovějšími aktualizacemi zabezpečení a použitou verzí Kubernetes.
  • Starý uzel je prováděný a vyprázdněný.
  • Pody jsou naplánované na novém uzlu.
  • Starý uzel se odstraní.

Během události upgradu nemůžete zůstat ve stejné verzi Kubernetes. Musíte zadat novější verzi Kubernetes. Pokud chcete upgradovat na nejnovější verzi Kubernetes, můžete upgradovat cluster AKS.

Nasazení kured v clusteru AKS

Pokud chcete nasadit kured DaemonSet, nainstalujte následující oficiální graf Kureda Helma. Tím se vytvoří role a role clusteru, vazby a účet služby a pak nasadí daemonSet pomocí 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

Můžete také nakonfigurovat další parametry pro kured, jako je integrace se službou Prometheus nebo Slack. Další informace o konfiguračních parametrech najdete v grafu Kured Helm.

Aktualizace uzlů clusteru

Ve výchozím nastavení kontrolují linuxové uzly v AKS aktualizace každý večer. Pokud nechcete čekat, můžete ručně provést aktualizaci a zkontrolovat, jestli kured funguje správně. Nejprve postupujte podle pokynů k připojení SSH k jednomu z uzlů AKS. Jakmile budete mít připojení SSH k uzlu s Linuxem, vyhledejte aktualizace a použijte je následujícím způsobem:

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

Pokud byly použity aktualizace, které vyžadují restartování uzlu, soubor se zapíše do /var/run/reboot-required. Kured kontroluje uzly, které ve výchozím nastavení vyžadují restartování každých 60 minut.

Monitorování a kontrola procesu restartování

Když jedna z replik v daemonSet zjistí, že se vyžaduje restartování uzlu, umístí se na uzel zámek prostřednictvím rozhraní API Kubernetes. Tento zámek zabraňuje naplánování dalších podů v uzlu. Zámek také označuje, že by se měl najednou restartovat jenom jeden uzel. Když je uzel vypnutý, spuštěné pody se z uzlu vyprázdní a uzel se restartuje.

Stav uzlů můžete monitorovat pomocí příkazu kubectl get nodes . Následující příklad výstupu ukazuje uzel se stavem SchedulingDisabled , jak se uzel připravuje na proces restartování:

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

Po dokončení procesu aktualizace můžete stav uzlů zobrazit pomocí příkazu kubectl get nodes s parametrem --output wide . Tento výstup umožňuje zobrazit rozdíl v kernel-VERSION podkladových uzlů, jak je znázorněno v následujícím příkladu výstupu. Aks-nodepool1-28993262-0 byl aktualizován v předchozím kroku a zobrazuje verzi jádra 4.15.0-1039-azure. Uzel aks-nodepool1-28993262-1 , který nebyl aktualizován, zobrazuje verzi jádra 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

Další kroky

Tento článek podrobně popisuje, jak v rámci procesu aktualizace zabezpečení automaticky kured restartovat uzly s Linuxem. Pokud chcete upgradovat na nejnovější verzi Kubernetes, můžete upgradovat cluster AKS.

Informace o clusterech AKS, které používají uzly Windows Serveru, najdete v tématu Upgrade fondu uzlů v AKS.