(Jin Qing's Column, Nov. 3, 2021)
When deployed to a cluster of nodes, Orleans internally implements a protocol to manage it's silos, including discovery, failure and reconfigure, which is called cluster membership management.
Orleans has clustering membership providers for: Azure, SQL server, Zookeeper.
Clustering provider is one of key aspects of silo configuration.
OrleansContrib/Orleans.Clustering.Kubernetes is a clustering provider for running Orleans cluster on Kubernetes.
Tell silo to use Kubernetes as the Cluster Membership Provider:
var silo = new SiloBuilder() ... .UseKubeMembership() ... .Build();
UseKubeMembership() instantiates a KubeMembershipTable which implements IMembershipTable.
UseKubeMembership()
KubeMembershipTable
IMembershipTable
public interface IMembershipTable { Task InitializeMembershipTable(bool tryInitTableVersion); Task DeleteMembershipTableEntries(string clusterId); Task CleanupDefunctSiloEntries(DateTimeOffset beforeDate); Task<MembershipTableData> ReadRow(SiloAddress key); Task<MembershipTableData> ReadAll(); Task<bool> InsertRow(MembershipEntry entry, TableVersion tableVersion); Task<bool> UpdateRow(MembershipEntry entry, string etag, TableVersion tableVersion); Task UpdateIAmAlive(MembershipEntry entry); }
KubeMembershipTable access Kubernetes API server to read and write silo entry CRD.
InitializeMembershipTable()
TryInitClusterVersion()
DeleteMembershipTableEntries(string clusterId)
InsertRow(...)
ReadAll()
GetClusterVersion()
GetSilos()
ReadRow(SiloAddress key)
UpdateIAmAlive(MembershipEntry entry)
UpdateRow(...)
CleanupDefunctSiloEntries(DateTimeOffset beforeDate)
The operators to NamespacedCustomObject are:
Two CRDs, ClusterVersion and Silo are defined in files:
ClusterVersion
Silo
Custom resource objects are stored in etcd of Kubernetes.
Powered by: C++博客 Copyright © 金慶