kubernetesクライアントKubeClient使用および常用api
4482 ワード
KubeClientはkubernetesのC#言語クライアントが簡単で使いやすく、KubeClientは.NET Core(ターゲット
Kubernetes APIのいくつかの動作は、入力されたパラメータに基づいて異なる応答を返すことができる.例えば、aを削除する要求は、呼び出し元が指定した場合、
このタイプのマルチステート応答を処理するために、KubeClientは、
PodV1 existingPod = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Foreground);
//OR: StatusV1 deleteStatus = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Background);
KubeClientのデザインも拡張しやすい.その
単純なコードの例を参照
using KubeClient; using KubeClient.Models; using Ocelot.Logging; using Ocelot.ServiceDiscovery.Providers; using Ocelot.Values; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
namespace Ocelot.Provider.Kubernetes { public class Kube : IServiceDiscoveryProvider { private KubeRegistryConfiguration kubeRegistryConfiguration; private IOcelotLogger logger; private IKubeApiClient kubeApi;
public Kube(KubeRegistryConfiguration kubeRegistryConfiguration, IOcelotLoggerFactory factory, IKubeApiClientFactory kubeClientFactory) { this.kubeRegistryConfiguration = kubeRegistryConfiguration; this.logger = factory.CreateLogger(); this.kubeApi = kubeClientFactory.Get(kubeRegistryConfiguration); }
public async Task> Get() { var service = await kubeApi.ServicesV1() .Get(kubeRegistryConfiguration.KeyOfServiceInK8s, kubeRegistryConfiguration.KubeNamespace); var services = new List(); if (IsValid(service)) { services.Add(BuildService(service)); } else { logger.LogWarning($"namespace:{kubeRegistryConfiguration.KubeNamespace }service:{kubeRegistryConfiguration.KeyOfServiceInK8s} Unable to use ,it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"); } return services; }
private bool IsValid(ServiceV1 service) { if (string.IsNullOrEmpty(service.Spec.ClusterIP) || service.Spec.Ports.Count <= 0) { return false; }
return true; }
private Service BuildService(ServiceV1 serviceEntry) { var servicePort = serviceEntry.Spec.Ports.FirstOrDefault(); return new Service( serviceEntry.Metadata.Name, new ServiceHostAndPort(serviceEntry.Spec.ClusterIP, servicePort.Port), serviceEntry.Metadata.Uid, string.Empty, Enumerable.Empty()); } } }
常用api
1.deployment
https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/DeploymentWithRollback/Program.cs
2.service
上のocelotのコードを参照
3.pod
https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/noob-exec/Program.cs
まとめ
一般的にkubernetesを操作し、二次開発の際にdeployment、serviceに関連する仕事をするだけです.操作は比較的簡単です.
netstandard1.4
)の拡張可能なKubernetes APIクライアント、githubアドレス:https://github.com/tintoy/dotnet-kube-client/あ、もう一つ公式のSDKhttps://github.com/kubernetes-client/csharp/ ,この2つのsdkの設計哲学は異なり、公式のクライアントはコード生成を使用し、コード生成の使用は限られている.生成されたクライアントは非慣用的であり、Kubernetesのような大きなSwagger仕様では、最終的にはクライアントクラスに直接多くの方法が配置される.KubeClientの方法は、モデルクラスを生成し、実際の操作方法を手動で作成して、改善された開発使用体験(すなわち、有用で一貫した例外タイプ)を提供することです.Kubernetes APIのいくつかの動作は、入力されたパラメータに基づいて異なる応答を返すことができる.例えば、aを削除する要求は、呼び出し元が指定した場合、
v1/Pod
は既存のv1/Pod
(PodV1
モデルとして)DeletePropagationPolicy.Foreground
を返すが、他のタイプであればv1/Status
(StatusV1
モデルとして)DeletePropagationPolicy
が指定する.このタイプのマルチステート応答を処理するために、KubeClientは、
KubeResultV1
モデル(およびその派生的な実装、KubeResourceResultV1
およびKubeResourceListResultV1
)を使用する.KubeResourceResultV1
は、a TResource
またはa StatusV1
に暗黙的に変換することができるので、消費コードは、動作がリソースのみを返すことを望んでいるか、またはStatusV1
のみを返すことを望んでいるように、クライアントを引き続き使用することができる.PodV1 existingPod = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Foreground);
//OR: StatusV1 deleteStatus = await client.PodsV1().Delete("mypod", propagationPolicy: DeletePropagationPolicy.Background);
KubeClientのデザインも拡張しやすい.その
KubeApiClient
はKubernetes APIのトップレベルのエントリポイントを提供し、拡張方法はより具体的なリソースクライアントを公開するために使用される.Ocelotのkubernetes統合モジュールはKubeClientを使用し、具体的なコードはhttps://github.com/ThreeMammals/Ocelot/tree/develop/src/Ocelot.Provider.Kubernetesああ、このモジュールはすでに本番環境で使用されています.最近、Ocelotのメインコードに統合されました.ドキュメントは以下を参照してください.https://ocelot.readthedocs.io/en/latest/features/kubernetes.html 単純なコードの例を参照
using KubeClient; using KubeClient.Models; using Ocelot.Logging; using Ocelot.ServiceDiscovery.Providers; using Ocelot.Values; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
namespace Ocelot.Provider.Kubernetes { public class Kube : IServiceDiscoveryProvider { private KubeRegistryConfiguration kubeRegistryConfiguration; private IOcelotLogger logger; private IKubeApiClient kubeApi;
public Kube(KubeRegistryConfiguration kubeRegistryConfiguration, IOcelotLoggerFactory factory, IKubeApiClientFactory kubeClientFactory) { this.kubeRegistryConfiguration = kubeRegistryConfiguration; this.logger = factory.CreateLogger(); this.kubeApi = kubeClientFactory.Get(kubeRegistryConfiguration); }
public async Task> Get() { var service = await kubeApi.ServicesV1() .Get(kubeRegistryConfiguration.KeyOfServiceInK8s, kubeRegistryConfiguration.KubeNamespace); var services = new List(); if (IsValid(service)) { services.Add(BuildService(service)); } else { logger.LogWarning($"namespace:{kubeRegistryConfiguration.KubeNamespace }service:{kubeRegistryConfiguration.KeyOfServiceInK8s} Unable to use ,it is invalid. Address must contain host only e.g. localhost and port must be greater than 0"); } return services; }
private bool IsValid(ServiceV1 service) { if (string.IsNullOrEmpty(service.Spec.ClusterIP) || service.Spec.Ports.Count <= 0) { return false; }
return true; }
private Service BuildService(ServiceV1 serviceEntry) { var servicePort = serviceEntry.Spec.Ports.FirstOrDefault(); return new Service( serviceEntry.Metadata.Name, new ServiceHostAndPort(serviceEntry.Spec.ClusterIP, servicePort.Port), serviceEntry.Metadata.Uid, string.Empty, Enumerable.Empty()); } } }
常用api
1.deployment
https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/DeploymentWithRollback/Program.cs
2.service
上のocelotのコードを参照
3.pod
https://github.com/tintoy/dotnet-kube-client/blob/develop/samples/noob-exec/Program.cs
まとめ
一般的にkubernetesを操作し、二次開発の際にdeployment、serviceに関連する仕事をするだけです.操作は比較的簡単です.