Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Kubernetes je oblíbenou volbou pro hostování Orleans aplikací. Orleans běží v Kubernetes bez konkrétní konfigurace; může však také využít další znalosti, které poskytuje hostitelská platforma.
Balíček Microsoft.Orleans.Hosting.Kubernetes přidává integraci pro hostování aplikace Orleans v clusteru Kubernetes. Balíček poskytuje rozšiřující metodu, UseKubernetesHosting, která provádí následující akce:
- Nastaví SiloOptions.SiloName jako název podu.
- Nastaví EndpointOptions.AdvertisedIPAddress na IP adresu podu.
- Konfiguruje EndpointOptions.SiloListeningEndpoint a EndpointOptions.GatewayListeningEndpoint tak, aby naslouchaly na libovolné adrese, pomocí konfigurovaného SiloPort a GatewayPort. Výchozí hodnoty portů
11111a30000se používají, pokud nejsou hodnoty explicitně nastaveny. - Nastaví ClusterOptions.ServiceId na hodnotu popisku podu pojmenovaného
orleans/serviceId. - Nastaví ClusterOptions.ClusterId na hodnotu popisku podu pojmenovaného
orleans/clusterId. - V rané fázi procesu spuštění sonduje silo Kubernetes, aby zjistil, které sila nemají odpovídající pody a označí tyto sily jako mrtvé.
- Stejný proces probíhá během běhu programu pro podmnožinu všech sil, aby se snížilo zatížení API serveru Kubernetes. Ve výchozím nastavení 2 sila v clusteru sledují Kubernetes.
Mějte na paměti, že hostitelský balíček Kubernetes nepoužívá Kubernetes pro clustering. Stále je potřeba samostatný poskytovatel clusteringu. Další informace o konfiguraci clusteringu najdete v dokumentaci ke konfiguraci Serveru.
Nasazení do Kubernetes pomocí .NET Aspire
.NET Aspire zjednodušuje nasazení Kubernetes automatickým generováním manifestů Kubernetes z vaší konfigurace AppHost. Místo ručního zápisu souborů Aspire YAML může vytvořit potřebné prostředky nasazení, služby a konfigurace na základě grafu závislostí vaší aplikace.
Přidejte integraci pro hostování Kubernetes
Nejprve nainstalujte balíček NuGet Aspire.Hosting.Kubernetes v projektu AppHost:
dotnet add package Aspire.Hosting.Kubernetes
Pak do hostitele AppHost přidejte prostředí Kubernetes:
var builder = DistributedApplication.CreateBuilder(args);
// Add the Kubernetes environment
var k8s = builder.AddKubernetesEnvironment("k8s");
// Add your Orleans silo project
var silo = builder.AddProject<Projects.MySilo>("silo");
builder.Build().Run();
Volitelně můžete přizpůsobit vlastnosti prostředí Kubernetes:
builder.AddKubernetesEnvironment("k8s")
.WithProperties(k8s =>
{
k8s.HelmChartName = "my-orleans-app";
});
Generování manifestů Kubernetes
Pomocí příkazového řádku Aspire vygenerujte manifesty Kubernetes pro Váš projekt Aspire.
aspire publish -o ./k8s-manifests
Tím se vygeneruje úplná sada souborů YAML Kubernetes v zadaném výstupním adresáři, včetně:
- Nasazení nebo stavové sady pro každou službu v AppHostu
- Služby pro připojení k síti
- Objekty ConfigMap a tajné kódy pro konfiguraci
- Charty Helm pro snadnější správu nasazení
- PersistentVolumes a PersistentVolumeClaims pro prostředky úložiště
Nasazení do clusteru
Po vygenerování manifestů je nasaďte pomocí kubectl nebo nástroje Helm.
# Using kubectl
kubectl apply -f ./k8s-manifests
# Or using Helm (if Helm charts were generated)
helm install my-orleans-app ./k8s-manifests/charts/my-orleans-app
AspireVýhody vygenerovaných manifestů
- Konzistentní konfigurace: Proměnné prostředí, porty a odkazy na prostředky se automaticky synchronizují.
- Správa závislostí: Služby jsou nakonfigurované se správnými připojovacími řetězci a odkazy na služby.
- Orleans-aware: Integrace Orleans hostování zajišťuje, aby byla zahrnuta správná konfigurace sila.
- Podpora Helmu: Vygenerované grafy Helm umožňují parametrizovaná nasazení napříč prostředími.
Návod
V případě produkčních nasazení zkontrolujte a podle potřeby upravte vygenerované manifesty. Ke konfiguraci hodnot specifických pro prostředí použijte externí parametry .
Podrobné informace o Aspire integraci Kubernetes najdete v Aspire dokumentaci k integraci Kubernetes.
Další informace o konfiguraci Orleans s .NET Aspire najdete v tématu .NET AspireOrleans integrace.
Ruční konfigurace Kubernetes
Tato funkce vynucuje některé požadavky na nasazení služby:
- Názvy sila musí odpovídat názvům podů.
- Pody musí mít
orleans/serviceIdaorleans/clusterIdštítky odpovídající štítkům sila ServiceId a ClusterId. MetodaUseKubernetesHostingpropaguje tyto popisky do odpovídajících možností Orleans z proměnných prostředí. - Pody musí mít nastavené následující proměnné prostředí:
POD_NAME,POD_NAMESPACE,POD_IP,ORLEANS_SERVICE_ID,ORLEANS_CLUSTER_ID.
Následující příklad ukazuje, jak správně nakonfigurovat tyto štítky a proměnné prostředí:
apiVersion: apps/v1
kind: Deployment
metadata:
name: dictionary-app
labels:
orleans/serviceId: dictionary-app
spec:
selector:
matchLabels:
orleans/serviceId: dictionary-app
replicas: 3
template:
metadata:
labels:
# This label identifies the service to Orleans
orleans/serviceId: dictionary-app
# This label identifies an instance of a cluster to Orleans.
# Typically, this is the same value as the previous label, or any
# fixed value.
# In cases where you don't use rolling deployments (for example,
# blue/green deployments),
# this value can allow for distinct clusters that don't communicate
# directly with each other,
# but still share the same storage and other resources.
orleans/clusterId: dictionary-app
spec:
containers:
- name: main
image: my-registry.azurecr.io/my-image
imagePullPolicy: Always
ports:
# Define the ports Orleans uses
- containerPort: 11111
- containerPort: 30000
env:
# The Azure Storage connection string for clustering is injected as an
# environment variable.
# You must create it separately using a command such as:
# > kubectl create secret generic az-storage-acct `
# --from-file=key=./az-storage-acct.txt
- name: STORAGE_CONNECTION_STRING
valueFrom:
secretKeyRef:
name: az-storage-acct
key: key
# Configure settings to let Orleans know which cluster it belongs to
# and which pod it's running in.
- name: ORLEANS_SERVICE_ID
valueFrom:
fieldRef:
fieldPath: metadata.labels['orleans/serviceId']
- name: ORLEANS_CLUSTER_ID
valueFrom:
fieldRef:
fieldPath: metadata.labels['orleans/clusterId']
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: DOTNET_SHUTDOWNTIMEOUTSECONDS
value: "120"
request:
# Set resource requests
terminationGracePeriodSeconds: 180
imagePullSecrets:
- name: my-image-pull-secret
minReadySeconds: 60
strategy:
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
U clusterů s podporou RBAC může být také nutné udělit požadovaný přístup k účtu služby Kubernetes pro pody:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: orleans-hosting
rules:
- apiGroups: [ "" ]
resources: ["pods"]
verbs: ["get", "watch", "list", "delete", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: orleans-hosting-binding
subjects:
- kind: ServiceAccount
name: default
apiGroup: ''
roleRef:
kind: Role
name: orleans-hosting
apiGroup: ''
Sondy životaschopnosti, připravenosti a zaváděcí
Kubernetes dokáže testovat pody a určit stav služby. Další informace najdete v tématu Konfigurace sond životaschopnosti, připravenosti a spuštění v dokumentaci Kubernetes.
Orleans používá protokol členství clusteru k okamžitému zjištění selhání procesu nebo sítě a jejich obnovení. Každý uzel monitoruje podmnožinu jiných uzlů a odesílá pravidelné sondy. Pokud uzel nereaguje na několik po sobě jdoucích sond z více dalších uzlů, cluster ho vynuceně odebere. Jakmile se uzel, který selhal, dozví o jeho odebrání, okamžitě se ukončí. Kubernetes restartuje ukončený proces, který se pak pokusí znovu připojit ke clusteru.
Sondy Kubernetes pomáhají určit, jestli se proces v podu spouští a není zablokovaný v zombie stavu. Tyto sondy neověřují připojení mezi pody ani rychlost odezvy ani neprovádějí kontroly funkčnosti na úrovni aplikace. Pokud pod nereaguje na liveness probe, Kubernetes může tento pod nakonec ukončit a přeplánovat. Sondy Kubernetes a Orleans sondy se proto doplňují.
Doporučeným přístupem je konfigurace sond zjištění dostupnosti v Kubernetes, které provádějí výhradně místní jednoduchou kontrolu, zda aplikace běží dle očekávání. Tyto sondy slouží k ukončení procesu, pokud dojde například k úplnému zablokování, například kvůli chybě za běhu nebo jiné nepravděpodobné události.
Kvóty prostředků
Kubernetes spolupracuje s operačním systémem na implementaci kvót prostředků. To umožňuje vynucovat rezervace procesoru a paměti nebo limity. Pro primární aplikaci, která obsluhuje interaktivní zatížení, se implementace omezujících limitů nedoporučuje, pokud není potřeba. Je důležité si uvědomit, že požadavky a limity se podstatně liší ve smyslu a umístění implementace. Než nastavíte požadavky nebo limity, potřebujete čas, abyste získali podrobné informace o tom, jak se implementují a vynucují. Paměť se například nemusí měřit jednotně mezi Kubernetes, jádrem Linuxu a monitorovacím systémem. Kvóty procesoru se nemusí vynucovat podle očekávání.
Řešení problémů
Pody havarují a hlásí chybu KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined
Úplná zpráva o výjimce:
Unhandled exception. k8s.Exceptions.KubeConfigException: unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined
at k8s.KubernetesClientConfiguration.InClusterConfig()
- Zkontrolujte, zda jsou proměnné prostředí
KUBERNETES_SERVICE_HOSTaKUBERNETES_SERVICE_PORTnastaveny uvnitř podu. Zkontrolujte spuštěním příkazukubectl exec -it <pod_name> /bin/bash -c env. - Ujistěte se, že
automountServiceAccountTokenje nastaveno natruev Kubernetesdeployment.yaml. Další informace najdete v tématu Nastavení účtů služeb pro pody.