Úvod
Kubernetes vám umožňuje automatizovat nasazení softwaru, spravovat kontejnerizované aplikace a snadno škálovat vaše clustery. Široká škála objektů Kubernetes, včetně DaemonSets, poskytuje další úroveň kontroly.
Použijte Kubernetes DaemonSets k nasazení konkrétních Podů do každého jednotlivého uzlu ve vašem clusteru.
Tento článek vysvětluje, co je DaemonSet, kdy ji použít a jak ji vytvořit.
Co je Kubernetes DaemonSet?
Kubernetes zajišťuje, že aplikace má dostatek prostředků, běží spolehlivě a udržuje vysokou dostupnost po celou dobu svého životního cyklu. Umístění aplikace v rámci clusteru není prioritou.
DaemonSet vám umožňuje překonat plánovací omezení Kubernetes a zajišťuje nasazení konkrétní aplikace na všechny uzly v rámci clusteru.m Nasazené moduly obvykle obsahují procesy na pozadí, které je třeba šířit v celém clusteru.
DaemonSet je obvykle popsán pomocí souboru YAML. Pole v souboru YAML vám poskytují další kontrolu nad procesem nasazení modulu Pod. Dobrým příkladem je použití štítků ke spuštění konkrétních modulů na omezené podmnožině uzlů.
Jak DaemonSets fungují?
DaemonSet je aktivní objekt Kubernetes spravovaný řadičem. Můžete deklarovat požadovaný stav, což znamená, že na každém uzlu musí být přítomen konkrétní modul. Kontrolní smyčka odsouhlasení porovná požadovaný stav se současným pozorovaným stavem. Pokud pozorovaný uzel nemá odpovídající modul, řadič DaemonSet ho automaticky vytvoří.
Tento automatizovaný proces zahrnuje existující uzly a všechny nově vytvořené uzly. Pody vytvořené ovladači DaemonSet jsou ignorovány plánovačem Kubernetes a existují tak dlouho jako samotný uzel.
DaemonSet ve výchozím nastavení vytváří pod na každém uzlu. V případě potřeby můžete omezit počet přijatelných uzlů pomocí selektoru uzlů. Ovladač DaemonSet vytvoří pody pouze na uzlech, které odpovídají předdefinovanému nodeSelector pole v souboru YAML.
Proč používat DaemonSet?
DaemonSets mohou zlepšit výkon clusteru nasazením modulů, které provádějí úkoly údržby a podpůrné služby, do každého uzlu. Specifické procesy na pozadí, monitorovací aplikace Kubernetes a další agenti musí být přítomni v celém clusteru, aby poskytovaly relevantní a včasné služby.
DaemonSets jsou výjimečně vhodné pro dlouhotrvající služby, které mohou zahrnovat:
- Sbírka protokolů
- Monitorování prostředků uzlů (rámce, jako je Prometheus)
- Clusterové úložiště
- Pods související s infrastrukturou (systémové operace)
Je běžné, že jedna DaemonSet nasadí jeden typ démona napříč všemi uzly. Více sad démonů však může také ovládat jeden typ démona pomocí různých štítků. Štítky Kubernetes určují pravidla nasazení na základě charakteristik jednotlivých uzlů.
Jak vytvořit DaemonSet?
DaemonSet můžete popsat v souboru YAML a použít soubor na cluster pomocí příkazů kubectl.
Například daemonset-node-exporter.yaml soubor níže nasazuje Prometheusnode-exporter, v rámci monitorování jmenný prostor pro sledování metrik využití hardwaru na každém uzlu v clusteru.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitoring
labels:
name: node-exporter
spec:
template:
metadata:
labels:
name: node-exporter
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9100"
spec:
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- ports:
- containerPort: 9100
protocol: TCP
resources:
requests:
cpu: 0.15
securityContext:
privileged: true
image: prom/node-exporter:v0.15.2
args:
- --path.procfs
- /host/proc
- --path.sysfs
- /host/sys
- --collector.filesystem.ignored-mount-points
- '"^/(sys|proc|dev|host|etc)($|/)"'
name: node-exporter
volumeMounts:
- name: dev
mountPath: /host/dev
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: rootfs
mountPath: /rootfs
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
Otevřete rozhraní příkazového řádku Kubernetes a použijte nově vytvořený soubor YAML:
kubectl apply -f daemonset-node-exporter.yaml
Systém potvrdí, že DaemonSet byla vytvořena.
Jakmile odešlete daemonset-node-exporter DaemonSet, potvrďte jeho aktuální stav pomocí describe
příkaz:
kubectl describe daemonset node-exporter -n monitoring
Výstup nabízí základní informace o DaemonSet a indikuje, že modul byl nasazen na všech dostupných uzlech.
Můžete to navíc potvrdit výpisem všech běžících podů pomocí následujícího příkazu:
kubectl get pod -o wide -n monitoring
DaemonSet nyní bude neustále nasazovat node-exporter Pod do všech nově vytvořených uzlů.
Jak omezit DaemonSet na konkrétní uzly
DaemonSets ve výchozím nastavení vytvářejí moduly na každém uzlu v clusteru, pokud je selektory uzlů neomezují. Zpočátku je nutné přidat požadovanou sadu štítků do podmnožiny uzlů.
Dosáhnete toho pomocí kubectl label
příkaz. Přidejte ssd=true
štítku na node01
uzel pomocí následujícího příkazu:
kubectl label nodes node01 ssd=true
Selektory uzlů jsou součástí nodeSelector
pole v souboru DaemonSet YAML. V následujícím příkladu se DaemonSet chystá nasadit Nginx pouze na uzlech označených jako ssd=true
.
apiVersion: apps/v1
kind: "DaemonSet"
metadata:
labels:
app: nginx
ssd: "true"
name: nginx-ssd-storage
spec:
template:
metadata:
labels:
app: nginx ssd: "true"
spec:
nodeSelector:
ssd: "true"
containers: -
name: nginx
image: nginx:1.10.0
Přidání ssd=true
label na nový uzel nasadí nginx-ssd-storage Pod do toho uzlu. Pokud je štítek odstraněn z uzlu, řadič DaemonSet odstraní také Pod.
Jak aktualizovat DaemonSet?
OnDelete strategie aktualizace byla jediným způsobem, jak aktualizovat Pody spravované sadou DaemonSet v raných verzích Kubernetes (před verzí 1.6). OnDelete Tento přístup vyžaduje, abyste ručně odstranili každý modul. Teprve poté je DaemonSet schopen vytvořit nový modul pomocí nové konfigurace.
Nejnovější verze Kubernetes ve výchozím nastavení používají průběžné aktualizace. Strategie aktualizace je definována pomocí spec.updateStrategy.type
pole. Výchozí hodnota je nastavena na RollingUpdate
.
Strategie průběžné aktualizace odstraňuje staré moduly a místo nich vytváří nové. Proces je automatický a řízený. Odstranění a vytvoření všech modulů ve stejnou dobu může vést k nedostupnosti a prodlouženým prostojům.
Dva parametry vám umožňují řídit proces aktualizace:
minReadySeconds
definuje období mezi upgrady modulu. Hodnota je definována v sekundách a nastavení přiměřeného časového rámce zajišťuje stav podu, než systém přistoupí k aktualizaci dalšího podu.updateStrategy.rollingUpdate.maxUnavailable
umožňuje definovat počet modulů, které lze současně upgradovat. Hodnota tohoto parametru je velmi závislá na typu nasazované aplikace. Je nutné vyvážit rychlost a bezpečnost, aby byla zajištěna vysoká dostupnost.
Použijte kubectl rollout
příkaz ke kontrole stavu postupného upgradu DaemonSet:
kubectl rollout status ds/daemonset-node-exporter -n monitoring
Systém sleduje aktualizace DaemonSet a informuje vás o aktuálním stavu zavedení node-exporter DaemonSet.
Jak smazat DaemonSet?
Odstraňte DaemonSet pomocí kubectl delete
příkaz. Ujistěte se, že jste správně uvedli název DaemonSet, který chcete odstranit:
kubectl delete -f daemonset-node-exporter.yaml -n monitoring
Tento příkaz by měl být používán opatrně. Smazání DaemonSet také vyčistí všechny moduly, které daný DaemonSet nasadil.