kubernetesクライアントKubeClient使用および常用api

4482 ワード

KubeClientはkubernetesのC#言語クライアントが簡単で使いやすく、KubeClientは.NET Core(ターゲット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に関連する仕事をするだけです.操作は比較的簡単です.