K8s-client-go(Informer机制)
K8s-client-go(Informer机制) 基于1.25 什么是InformerInformer实现了组件之间使用HTTP通信,但是不依赖任何中间件的情况下,实现了保证消息的实时性、可靠性、顺序性等 使用示例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990package mainimport ( "flag" "fmt" "path/filepath" "time" v1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" &quo...
K8s-client-go
K8s-client-go什么是Client-goClient-go是K8s提供的调用K8s对西那个的客户端,实现了访问kube-apiserver,对K8s集群中的资源对象管理 Link:https://github.com/kubernetes/client-go 客户端client-go支持Client Set、DynamicClient、Discovery Client、RESTClient四种 RESTClient是最基础的客户端,对HTTP请求进行了封装 ClientSet对在RESTClient基础上,封装了Resource和Version的管理方法 ClientSet只能处理K8s内置资源 通过client-gen代码生成器生成 DynamicClient:DynamicClient可以处理所有的资源,包括CRD DiscoveryClient:用于发现kube-apisever所支持的Group、Versions、Resources kuebconfig配置管理kubeconfig就是管理访问kube-apiserver的配置信息,支持管理访问多个k...
K8s核心资源对象-CRD
K8s核心资源对象-CRD 基于1.25 什么是CRDK8s的拓展主要通过几类实现: 客户端拓展:实现kubectl插件 API拓展:包含使用CRD API访问拓展:在请求到达kube-apiserver之前,经过的认证、授权、动态准入都可以拓展 基础设施拓展:设备拓展啊发现新的节点资源、存储插件、网络插件 最广泛使用的目前还是从1.7版本出现的CRD,属于资源组apiextension.k8s.io Ref:https://github.com/kubernetes/apiextensions-apiserver/blob/cb213f096359711547f69316aeac67982b626b07/pkg/apis/apiextensions/v1/types.go#L390 1234567891011121314151617181920// +genclient// +genclient:nonNamespaced// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// +...
K8s核心资源对象-配置和存储资源
K8s核心资源对象-配置和存储资源 基于1.25 卷什么是卷容器中的文件在磁盘上是临时存放,Pod重启数据可能就会消息,卷就是为了实现持久化而出现 卷的类型emptyDir卷当Pod被分配到某个节点上的时候,emptyDir卷会被创建 Pod在节点运行中,emptyDir卷一直存在 emptyDir卷最初是空的 emptyDir卷在Pod在该节点被删除之后,也会消失 hostPath卷能把主机节点系统上的文件目录挂载到Pod configMap卷提供向Pod注入ConfigMap的方法 ConfigMap对象中存储的数据可以被ConfigMap卷引用,之后被Pod中运行的容器化应用使用 downwardAPI卷为应用服务器提供DownwardAPI数据 允许容器在不使用K8s客户端的情况下,获得到自己或者集群的信息 secret卷用来给Pod传递一些敏感的信息 可以通过文件的形式挂到Pod中 nfs卷把NFS挂到Pod中 nfs数据不会随着Pod消减,而消减 cephfs卷允许把现存的cephfs卷挂载到Pod中 cephfs卷数据不随着Pod消减,而消减...
K8s发现和负载均衡-NetworkPolicy
K8s发现和负载均衡-NetworkPolicy 基于1.25 什么是NetworkPolicyK8s的网络模型和各种网络方法关心是容器之间的联通,而NetworkPolicy负责网络隔离 NetworkPolicy网络隔离,在多租户和安全性要求比较高的情况下使用 NetworkPolicy使用在一端或者俩端于Pod的连接 NetworkPolicy的作用范围:Pod、命名空间、Ingress、Egress流量等 NetworkPolicy作为在L3/4层,目的是限制IP地址和端口的访问,如果需要对应用层访问限制,需要使用Istio这类的Service Mesh NetworkPolicy对象 需要NetworkPolicy控制器才能生效 Pod的隔离类型Pod有俩种隔离类型:出口隔离和入口隔离 默认情况下,没有出口隔离 通过设置NetworkPolicy在PolicyType设置为Egress,进行出口隔离 默认情况下,没有入口隔离 通过设置NetworkPolicy在PolicyType设置为Igress,进行入口隔离 网络策略是相加的 Netwo...
K8s发现和负载均衡-Endpoints和EndpointSlice
K8s发现和负载均衡-Endpoints和EndpointSlice 基于1.25 什么是EndPointsEndPoints定义了网络端点的列表 K8s限制单个EndPoints对象容纳的端点数量 Endpoints字段 Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/core/v1/types.go#L4768 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960// Endpoints is a collection of endpoints that implement the actual service. Example://// Name: "mysvc",// Subsets: [// {// Addresses: [...
K8s发现和负载均衡-Ingress
K8s发现和负载均衡-Ingress 基于1.25 什么是Ingress对集群中服务的外部访问进行管理的API对象,典型的访问时间是HTTP Ingress:提供了负载均衡、SSL终结和基于名称的虚拟托管 Ingress公开集群外部到集群内部的HTTP服务和HTTPS路由 Inress不会随意公开端口和协议 仅仅创建Ingress不会有效果,需要Ingress控制器 IngressSpec Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/networking/v1/types.go#L302 12345678910111213141516171819202122232425262728293031323334353637383940414243// IngressSpec describes the Ingress the user wishes to exist.type IngressSpec struct { // IngressCl...
K8s发现和负载均衡-Service
K8s发现和负载均衡-Service 基于1.25 什么是ServiceK8s中,Pod随时消亡,控制器Pod集合不断变化,每个服务调用者不知道发送到哪个IP,Service就是为了解决这个问题,提供了以下的能力: Pod有自己的IP Service被赋予唯一的DNS Name Service通过标签选择器选择一组Pod Service实现负载均衡,可以将请求均衡放到一组Pod ServiceSpec Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/core/v1/types.go#L4359 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596...
K8s工作负载-CronJob
K8s工作负载-CronJob 1.25 什么是CronJobCronJob按照预定时间计划创建Job CronJob的限制CronJob在时间计划中执行,但是Job依旧还可能失败,所以Job不是唯一的,因此Job必须是幂等的,当满足以下俩个条件,Job至少运行一次 StartingDeadlineSeconds:设置为一个较大的值,或者不设置该值(有默认值) ConcurrencyPolicy:设置为Allow 如果设置了StaringDeadlineSeconds,CronJob控制器按照从StaringDeadlineSeconds之前到现在为止的时间段计算错过的执行次数 CronJobSpec Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/batch/v1/types.go#L504 1234567891011121314151617181920212223242526272829303132333435363738394041424344...
K8s工作负载-Job
K8s工作负载-Job 基于1.25 什么是JobJob会创建一个或多个Pod,并持续重试Pod的执行,直至指定数量的Pod成功终止 随着Pod成功终止,Job会记录成功的Pod个数,Pod到达指定数量,Job终止 删除Job,会删除Job的所有Pod JobSpec Ref:https://github.com/kubernetes/api/blob/f7b7ea4f0fcc6cb8c8dd42eb46a94c7e163d1b9d/batch/v1/types.go#L206 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912...