Kubernetes-üzemeltetés
A Kubernetes népszerű választás alkalmazások üzemeltetéséhez Orleans . Orleans a Kubernetesben konkrét konfiguráció nélkül fog futni, azonban az üzemeltetési platform által biztosított további ismereteket is kihasználhatja.
A Microsoft.Orleans.Hosting.Kubernetes
csomag integrációt biztosít egy Orleans alkalmazás Kubernetes-fürtön való üzemeltetéséhez. A csomag egy bővítménymetódust biztosít, UseKubernetesHostingamely a következő műveleteket hajtja végre:
- SiloOptions.SiloName a pod nevére van állítva.
- EndpointOptions.AdvertisedIPAddress a pod IP-címére van állítva.
- EndpointOptions.SiloListeningEndpoint > EndpointOptions.GatewayListeningEndpoint bármely cím figyelésére van konfigurálva, a konfigurált SiloPort és GatewayPorta . Az alapértelmezett portértékek
11111
, ha30000
nincsenek explicit módon beállítva. - ClusterOptions.ServiceId a podcímke értékére van állítva a névvel
orleans/serviceId
. - ClusterOptions.ClusterId a podcímke értékére van állítva a névvel
orleans/clusterId
. - Az indítási folyamat korai szakaszában a siló mintavételt végez a Kubernetesen, hogy megtudja, mely silók nem rendelkeznek megfelelő podokkal, és halottként jelöli meg ezeket a silókat.
- Ugyanez a folyamat az összes siló egy részhalmazának futtatókörnyezetében történik, hogy eltávolítsa a Terhelést a Kubernetes API-kiszolgálóján. Alapértelmezés szerint a fürt 2 silója figyeli a Kubernetes-t.
Vegye figyelembe, hogy a Kubernetes üzemeltetési csomagja nem használja a Kubernetes-t a fürtözéshez. A fürtözéshez továbbra is külön fürtszolgáltatóra van szükség. A fürtözés konfigurálásával kapcsolatos további információkért tekintse meg a kiszolgáló konfigurációs dokumentációját.
Ez a funkció bizonyos követelményeket támaszt a szolgáltatás üzembe helyezésének módjával kapcsolatban:
- A silóneveknek egyeznie kell a podok nevével.
- A podoknak olyan
orleans/serviceId
címkévelorleans/clusterId
kell rendelkezniük, amely megfelel a silóénakServiceId
ésClusterId
a . A fent említett módszer ezeket a címkéket a környezeti változók megfelelő beállításaiba Orleans propagálja. - A podoknak a következő környezeti változókkal kell rendelkezniük: , , , ,
ORLEANS_CLUSTER_ID
ORLEANS_SERVICE_ID
.POD_IP
POD_NAMESPACE
POD_NAME
Az alábbi példa bemutatja, hogyan konfigurálhatja helyesen ezeket a címkéket és környezeti változókat:
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 is used to identify the service to Orleans
orleans/serviceId: dictionary-app
# This label is used to identify an instance of a cluster to Orleans.
# Typically, this will be the same value as the previous label, or any
# fixed value.
# In cases where you are not using rolling deployments (for example,
# blue/green deployments),
# this value can allow for distinct clusters which do not communicate
# directly with each others,
# but which 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 which Orleans uses
- containerPort: 11111
- containerPort: 30000
env:
# The Azure Storage connection string for clustering is injected as an
# environment variable
# It must be created 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 is 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
Az RBAC-kompatibilis fürtök esetében előfordulhat, hogy a podok Kubernetes-szolgáltatásfiókjának is rendelkeznie kell a szükséges hozzáféréssel:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: orleans-hosting
rules:
- apiGroups: [ "" ]
resources: ["pods"]
verbs: ["get", "watch", "list", "delete"]
---
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: ''
Élesség, felkészültség és indítási mintavételek
A Kubernetes mintavételt végezhet a podokon a szolgáltatás állapotának meghatározásához. További információt a Kubernetes dokumentációjában az élőség, a készültség és az indítási mintavételek konfigurálása című témakörben talál.
Orleans Fürttagsági protokollt használ a folyamat vagy hálózati hibák azonnali észleléséhez és helyreállításához. Minden csomópont figyeli a többi csomópont egy részét, és rendszeres mintavételeket küld. Ha egy csomópont nem válaszol több egymást követő mintavételre több másik csomópontról, akkor a rendszer kényszerítetten eltávolítja azt a fürtből. Miután egy sikertelen csomópont megtudja, hogy eltávolították, azonnal leáll. A Kubernetes újraindítja a leállított folyamatot, és megkísérli újracsatlakozni a fürtöt.
A Kubernetes mintavételei segíthetnek annak meghatározásában, hogy egy podban lévő folyamat fut-e, és nem ragadt-e zombi állapotban. a mintavételek nem ellenőrzik a podok közötti kapcsolatot vagy a válaszképességet, és nem végeznek alkalmazásszintű funkcióellenőrzéseket. Ha egy pod nem tud válaszolni egy élőségi mintavételre, akkor a Kubernetes végül leállíthatja a podot, és átütemezheti azt. A Kubernetes mintavételei és Orleansmintavételei ezért egymást kiegészítőek.
Az ajánlott módszer a Kubernetes liveness-mintavételeinek konfigurálása, amelyek egyszerű, csak helyi ellenőrzéssel ellenőrzik, hogy az alkalmazás a kívánt módon működik-e. Ezek a mintavételek a folyamat leállítására szolgálnak, ha például futásidejű hiba vagy más valószínűtlen esemény miatt teljes lefagyás történik.
Erőforráskvóták
A Kubernetes az operációs rendszerrel együttműködve valósítja meg az erőforráskvótákat. Ez lehetővé teszi a processzor- és memóriafoglalások és/vagy korlátok kényszerítását. Az interaktív terhelést kiszolgáló elsődleges alkalmazások esetében javasoljuk, hogy szükség esetén ne alkalmazzanak korlátozó korlátozásokat. Fontos megjegyezni, hogy a kérelmek és a korlátok lényegileg eltérnek jelentésükben és megvalósításuk helyén. A kérelmek vagy korlátok beállítása előtt szánjon időt a végrehajtásuk és érvényre juttatásuk részletes megismerésére. Előfordulhat például, hogy a memória nem mérhető egységesen a Kubernetes, a Linux kernel és a monitorozási rendszer között. Előfordulhat, hogy a cpu-kvóták nem a várt módon lesznek érvényesítve.
Hibaelhárítás
Podok összeomlanak, panaszkodnak, hogy KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined
Teljes kivételüzenet:
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()
- Ellenőrizze, hogy a
KUBERNETES_SERVICE_HOST
környezeti változók ésKUBERNETES_SERVICE_PORT
a környezeti változók be vannak-e állítva a podon belül. Az ellenőrzést a következő parancs végrehajtásávalkubectl exec -it <pod_name> /bin/bash -c env
végezheti el. - Győződjön meg arról, hogy a
automountServiceAccountToken
Kubernetesendeployment.yaml
igaz értékre van állítva. További információ: Szolgáltatásfiókok konfigurálása podokhoz
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: