首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes 客户端KubeClient使用及常用api

kubernetes 客户端KubeClient使用及常用api

作者头像
张善友
发布2019-07-02 16:28:21
2.4K0
发布2019-07-02 16:28:21
举报
文章被收录于专栏:张善友的专栏张善友的专栏

KubeClient是kubernetes 的C#语言客户端简单易用,KubeClient是.NET Core(目标netstandard1.4)的可扩展Kubernetes API客户端, github地址: https://github.com/tintoy/dotnet-kube-client/,还有一个官方的SDK https://github.com/kubernetes-client/csharp/ ,这两个sdk的设计哲学上是不一样的, 官方的客户端使用代码生成,代码生成的使用是有限的; 生成的客户端倾向于非惯用,并且对于像Kubernetes那样大的Swagger规范,最终会在客户端类上直接放置太多方法。KubeClient的方法是生成模型类并手动编写实际操作方法,以提供改进的开发使用体验(即有用且一致的异常类型)。

Kubernetes API中的某些操作可以根据传入的参数返回不同的响应。例如,删除a的请求如果调用者指定则v1/Pod返回现有v1/Pod(作为PodV1模型)DeletePropagationPolicy.Foreground但是如果任何其他类型则返回v1/Status(作为StatusV1模型)的DeletePropagationPolicy指定。

为了处理这种类型的多态响应,KubeClient使用KubeResultV1模型(及其派生的实现,KubeResourceResultV1<TResource>KubeResourceListResultV1<TResource>)。

KubeResourceResultV1<TResource>可以隐式地转换为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<Kube>(); this.kubeApi = kubeClientFactory.Get(kubeRegistryConfiguration); }

public async Task<List<Service>> Get() { var service = await kubeApi.ServicesV1() .Get(kubeRegistryConfiguration.KeyOfServiceInK8s, kubeRegistryConfiguration.KubeNamespace); var services = new List<Service>(); 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<string>()); } } }

常用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做相关工作。操作起来还是比较简便的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用api
    • 1.deployment
      • 2.service
        • 3.pod
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档