Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kubernetes, Orleans uygulamaları barındırmak için popüler bir seçimdir. Orleans Kubernetes'te belirli bir yapılandırma olmadan çalışır; ancak barındırma platformunun sağladığı ek bilgilerden de yararlanabilir.
Microsoft.Orleans.Hosting.Kubernetes paketi, kubernetes kümesinde bir Orleans uygulaması barındırmak için tümleştirme ekler. Paket, UseKubernetesHostingaşağıdaki eylemleri gerçekleştiren bir uzantı yöntemi sağlar:
- SiloOptions.SiloName öğesini pod adına ayarlar.
- EndpointOptions.AdvertisedIPAddress pod IP adresine ayarlanır.
-
EndpointOptions.SiloListeningEndpoint ve EndpointOptions.GatewayListeningEndpoint, yapılandırılan SiloPort ve GatewayPort kullanılarak herhangi bir adreste dinleme yapmak üzere yapılandırılır.
11111ve30000varsayılan bağlantı noktası değerleri, değerler açıkça ayarlanmadığında kullanılır. -
ClusterOptions.ServiceId öğesini,
orleans/serviceIdadlı pod etiketinin değerine ayarlar. -
ClusterOptions.ClusterId öğesini,
orleans/clusterIdadlı pod etiketinin değerine ayarlar. - Başlangıç sürecinin başlarında, silo karşılık gelen podları olmayan siloları bulmak için Kubernetes'i sorgular ve bu siloları ölü olarak işaretler.
- Kubernetes'in API sunucusundaki yükü azaltmak için tüm siloların bir alt kümesi için çalışma zamanında aynı işlem gerçekleşir. Varsayılan olarak, kümedeki 2 silo Kubernetes'i izler.
Kubernetes barındırma paketinin kümeleme için Kubernetes kullanmadığını unutmayın. Ayrı bir kümeleme sağlayıcısı hala gereklidir. Kümeleme yapılandırma hakkında daha fazla bilgi için Sunucu yapılandırması belgelerine bakın.
ile Kubernetes'e dağıtma Aspire
Aspire Otomatik olarak AppHost yapılandırmanızdan Kubernetes bildirimleri oluşturarak Kubernetes dağıtımını basitleştirir. YAML dosyalarını el ile yazmak yerine, Aspire uygulamanızın bağımlılık grafiğine göre gerekli dağıtım, hizmet ve yapılandırma kaynaklarını üretebilir.
Kubernetes barındırma tümleştirmesini ekleme
İlk olarak, yükleyin Aspire. AppHost projenizde Hosting.Kubernetes NuGet paketi:
dotnet add package Aspire.Hosting.Kubernetes
Ardından AppHost'unuza bir Kubernetes ortamı ekleyin:
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();
İsteğe bağlı olarak Kubernetes ortam özelliklerini özelleştirebilirsiniz:
builder.AddKubernetesEnvironment("k8s")
.WithProperties(k8s =>
{
k8s.HelmChartName = "my-orleans-app";
});
Kubernetes bildirimleri oluşturma
Aspire Projenizden Aspire Kubernetes bildirimleri oluşturmak için CLI'yi kullanın:
aspire publish -o ./k8s-manifests
Bu, belirtilen çıkış dizininde aşağıdakiler dahil olmak üzere eksiksiz bir Kubernetes YAML dosyaları kümesi oluşturur:
- AppHost'unuzda her hizmet için dağıtımlar veya StatefulSets
- Ağ bağlantısı hizmetleri
- Yapılandırma için ConfigMap'ler ve Gizli Anahtarlar
- Daha kolay dağıtım yönetimi için Helm grafikleri
- Depolama kaynakları için PersistentVolumes ve PersistentVolumeClaims
Kümenize dağıtın
Bildirimleri oluşturduktan sonra, onları kubectl veya Helm kullanarak dağıtın.
# 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
Aspire tarafından oluşturulan bildirimlerin avantajları
- Tutarlı yapılandırma: Ortam değişkenleri, bağlantı noktaları ve kaynak başvuruları otomatik olarak eşitlenir.
- Bağımlılık yönetimi: Hizmetler doğru bağlantı dizeleri ve hizmet başvuruları ile yapılandırılır.
- Orleans-aware: Barındırma Orleans tümleştirmesi uygun silo yapılandırmasının dahil edilmesini sağlar.
- Helm desteği: Oluşturulan Helm grafikleri, ortamlar arasında parametreli dağıtımlara izin verir.
Tip
Üretim dağıtımları için, oluşturulan bildirimleri gerektiği gibi gözden geçirin ve özelleştirin. Ortama özgü değerleri yapılandırmak için dış parametreleri kullanın.
Kubernetes tümleştirmesi Aspire hakkında ayrıntılı bilgi için Kubernetes tümleştirme belgelerine bakınAspire.
Orleans öğesini Aspire ile yapılandırma hakkında daha fazla bilgi için AspireOrleans tümleştirmesine bkz.
El ile Kubernetes yapılandırması
Bu işlevsellik, hizmet dağıtımına bazı gereksinimler uygular:
- Silo adları pod adlarla eşleşmelidir.
- Podların, silo
orleans/serviceIdveorleans/clusterIdetiketlerine karşılık gelen ServiceId ve ClusterId etiketleri olmalıdır.UseKubernetesHostingyöntemi, bu etiketleri ortam değişkenlerinden alarak ilgili Orleans seçeneklere yayar. - Podlarda şu ortam değişkenleri ayarlanmalıdır:
POD_NAME,POD_NAMESPACE,POD_IP,ORLEANS_SERVICE_ID,ORLEANS_CLUSTER_ID.
Aşağıdaki örnekte bu etiketlerin ve ortam değişkenlerinin doğru yapılandırılması gösterilmektedir:
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
RBAC özellikli kümeler için podlar için Kubernetes hizmet hesabına gerekli erişimin verilmesi de gerekebilir:
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: ''
Canlılık, hazırlık ve çalıştırma yoklamaları
Kubernetes, hizmet durumunu belirlemek için podları yoklayabilir. Daha fazla bilgi için Kubernetes belgelerindeki Canlılık, Hazırlık ve Başlangıç Yoklamalarını Yapılandırma bölümüne bakın.
Orleans işlem veya ağ hatalarını hemen algılamak ve kurtarmak için bir küme üyeliği protokolü kullanır. Her düğüm, düzenli aralıklarla yoklamalar göndererek diğer düğümlerin bir alt kümesini izler. Bir düğüm, birçok diğer düğümden gelen ardışık birçok yoklamaya yanıt vermezse, küme düğümü zorla kaldırır. Başarısız bir düğüm kaldırıldığını öğrendiği anda hemen sonlanır. Kubernetes sonlandırılan işlemi yeniden başlatır ve ardından kümeye yeniden katılmayı dener.
Kubernetes yoklamaları, poddaki bir işlemin yürütülüp yürütülmediğinin ve zombi durumunda takılmadığının belirlenmesine yardımcı olur. Bu yoklamalar podlar arası bağlantıyı veya yanıt hızını doğrulamaz ve uygulama düzeyinde işlevsellik denetimleri gerçekleştirmez. Bir pod canlılık yoklamasına yanıt vermezse Kubernetes sonunda bu podu sonlandırabilir ve yeniden zamanlayabilir. Bu nedenle Kubernetes yoklamaları ve Orleans yoklamaları tamamlayıcı niteliktedir.
Önerilen yaklaşım, Kubernetes'te uygulamanın amaçlandığı gibi çalıştığını doğrulayan basit, yalnızca yerel bir kontrol yapan Liveness Probe yapılandırmaktır. Bu problar, örneğin bir çalışma zamanı hatası veya nadir bir olay nedeniyle tam donma olması durumunda süreci sonlandırmak için kullanılır.
Kaynak kotaları
Kubernetes , kaynak kotalarını uygulamak için işletim sistemiyle birlikte çalışır. Bu, CPU ve bellek ayırmalarının ve/veya sınırlarının zorunlu tutmasına olanak tanır. Etkileşimli yük sunan bir birincil uygulama için, gerekli olmadıkça kısıtlayıcı sınırların uygulanması önerilmez. İsteklerin ve sınırların anlam ve uygulama konumunda önemli ölçüde farklılık gösterdiğini unutmayın. İstekleri veya sınırları ayarlamadan önce, bunların nasıl uygulandığını ve yürütüldüğünü ayrıntılı olarak anlamak için zaman ayırın. Örneğin, bellek Kubernetes, Linux çekirdeği ve izleme sistemi arasında tekdüzen olarak ölçülemeyebilir. CPU kotaları beklendiği gibi uygulanmayabilir.
Sorun giderme
Podlar, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined ile ilgili bir hata bildirerek çöküyor.
Tüm özel durum iletisi:
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()
-
KUBERNETES_SERVICE_HOSTveKUBERNETES_SERVICE_PORTortam değişkenlerinin Pod içinde ayarlanıp ayarlanmadığını denetleyin. komutunukubectl exec -it <pod_name> /bin/bash -c envyürüterek denetleyin. - Kubernetes
automountServiceAccountTokeniçindetrueolarakdeployment.yamlayarlandığını kontrol edin. Daha fazla bilgi için bkz. Podlar için Hizmet Hesaplarını Yapılandırma.