首页 > 其他分享 >kubernetes 客户端KubeClient使用及常用api

kubernetes 客户端KubeClient使用及常用api

时间:2022-10-24 16:33:22浏览次数:123  
标签:kubernetes service api Ocelot KubeClient using kubeRegistryConfiguration 客户端

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


标签:kubernetes,service,api,Ocelot,KubeClient,using,kubeRegistryConfiguration,客户端
From: https://blog.51cto.com/shanyou/5790249

相关文章

  • 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 web
    ​​2018.NET开发者调查报告:.NETCore是怎么样的状态​​,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议。这仅代表我的个人意见,我有充分的理由......
  • C# WebAPI 项目
    备注:对于C#开发人员,接口服务大部分是WCF(需要配置很多),WebService(走的XML,相比json同样的内容大很多),一般应用程序(大量接口可能会有点麻烦),WebAPi则借鉴了以上的有点,屏蔽了......
  • Kubernetes--资源注解
    资源注解除了标签(label)之外,Pod与其他各种资源还能使用资源注解(annotation)。与标签类似,注解也是“键值”类型的数据,不过它不能用于标签及挑选Kubernetes对象,仅可用于为资......
  • 使用API网关构建微服务
     使用传统的异步回调方法编写API组合代码会让你迅速坠入回调地狱。代码会变得混乱、难以理解且容易出错。一个更好的方法是使用响应式方法以一种声明式样式编写API网关代码......
  • PuppeteerSharp: 更友好的 Headless Chrome C# API
    前端就有了对headless浏览器的需求,最多的应用场景有两个UI自动化测试:摆脱手工浏览点击页面确认功能模式爬虫:解决页面内容异步加载等问题也就有了很多杰出的实现,前端经常......
  • ASP.NET Web API和依赖注入
    ASP.NETWebAPI中自带了一个​​依赖解析器​​​(DependencyResolver)接口,允许我们向控制器注入依赖关系。不过,​​MarkSeemann​​​建议要达到此目的最好还是使用​​IH......
  • 【kubernetes入门到精通】Kubernetes架构分析介绍篇「进阶篇」
    意志的出现不是对愿望的否定,而是把愿望合并和提升到一个更高的意识水平上。——罗洛·梅官方网站​​Kubernetes中文官方网站​​​​Kubernetes英文官方网站​​Kubernetes......
  • kubernetes Service
    Service介绍运行于pod中的容器化应用绝大多数是服务类的守护进程,它们受控于控制器资源对象,在自愿或非自愿中断后只能由重构的、具有相同功能的新pod对象所取代,属于非可再生......
  • chooseLocation:fail the api need to be declared in the requiredPrivateInfos fiel
    错误描述在使用uni-app开发微信小程序的时候,想要通过uni.chooseLocation获取用户地理位置的时候出现chooseLocation:failtheapineedtobedeclaredintherequiredPr......
  • SAP UI5 的声明式初始化 Component 定义(Declarative API for Initial Components)
    一套适合SAPUI5初学者循序渐进的学习教程本专栏计划的文章数在​​300​​​篇左右,到​​2022年10月14日​​​为止,目前已经更新了​​141​​​篇,专栏完成度为​......