文章图片
在客户端中 , 模型的名称以 apiVersion 版本做前缀 , 并且通过 V1NamespaceList获取这类对象的列表 。
如果要获取某类资源 , 其接口都是以 List 开头的 , 如 client.ListNamespaceAsync、client.ListAPIServiceAsync、client.ListPodForAllNamespacesAsync等 。
看来 , 学习已经步入正轨了 , 让我们来实验练习吧!
文章图片
实践1:如何解析一个 Service
这里笔者贴心给读者准备了一些练习 , 第一个练习是解析一个 Service 的信息出来 。
查看前面创建的 Servicie:
kubectl get svc kube-apiserver-master -n kube-system -o yaml
对应结构如下:
apiVersion:v1
kind:Service
metadata:
creationTimestamp:"2022-01-24T12:51:32Z"
labels:
component:kube-apiserver
tier:control-plane
name:kube-apiserver-master
namespace:kube-system
resourceVersion:"24215604"
uid:ede0e3df-8ef6-45c6-9a8d-2a2048c6cb12
spec:
clusterIP:10.101.230.138
clusterIPs:
-10.101.230.138
externalTrafficPolicy:Cluster
internalTrafficPolicy:Cluster
ipFamilies:
-IPv4
ipFamilyPolicy:SingleStack
ports:
-nodePort:32263
port:6443
protocol:TCP
targetPort:6443
selector:
component:kube-apiserver
tier:control-plane
sessionAffinity:None
type:NodePort
status:
loadBalancer:{}
我们在 C# 中定义一个这样的模型类:
publicclassServiceInfo
{
///<summary>
///SVC 名称
///</summary>
publicstringName { get; set; } = null!;
///<summary>
///三种类型之一 <see cref="ServiceType"/>
///</summary>
publicstring? ServiceType { get; set; }
///<summary>
///命名空间
///</summary>
publicstringNamespace { get; set; } = null!;
///<summary>
///有些 Service 没有此选项
///</summary>
publicstringClusterIP { get; set; } = null!;
///<summary>
///外网访问 IP
///</summary>
publicstring[]? ExternalAddress { get; set; }
【使用 C# 获取 Kubernetes 集群资源信息】publicIDictionary< string, string>? Labels { get; set; }
publicIDictionary< string, string>? Selector { get; set; }
///<summary>
///name,port
///</summary>
publicList< string>? Ports { get; set; }
publicstring[]? Endpoints { get; set; }
publicDateTime? CreationTime { get; set; }
// 关联的 Pod 以及 pod 的 ip
}
下面 , 指定获取哪个命名空间的 Service 及其关联的 Endpoint 信息 。
staticasyncTask Main
{
varresult = awaitGetServiceAsync( "kube-apiserver-master", "kube-system");
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(result));
}
publicstaticasyncTask<ServiceInfo> GetServiceAsync( stringsvcName, stringnamespaceName )
{
varclient = GetClient;
varservice = awaitclient.ReadNamespacedServiceAsync(svcName, namespaceName);
// 获取 service 本身的信息
ServiceInfo info = newServiceInfo
{
Name = service.Metadata.Name,
Namespace = service.Metadata.NamespaceProperty,
ServiceType = service.Spec.Type,
Labels = service.Metadata.Labels,
ClusterIP = service.Spec.ClusterIP,
CreationTime = service.Metadata.CreationTimestamp,
Selector = service.Spec.Selector.ToDictionary(x => x.Key, x => x.Value),
ExternalAddress = service.Spec.ExternalIPs?.ToArray,
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
