K8s-client-go(Informer机制)
K8s-client-go(Informer机制)
基于1.25
什么是InformerInformer实现了组件之间使用HTTP通信,但是不依赖任何中间件的情况下,实现了保证消息的实时性、可靠性、顺序性等
使用示例package mainimport ( "flag" "fmt" "path/filepath" "time" v1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "k8s.io/clien ...
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的配置信息,支持管理访问多个kube ...
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
// +genclient// +genclient:nonNamespaced// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// +k8s:prerelease-lifecycle-gen:intro ...
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消减,而消减
p ...
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,进行入口隔离
网络策略是相加的
NetworkP ...
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
// Endpoints is a collection of endpoints that implement the actual service. Example://// Name: "mysvc",// Subsets: [// {// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],// Ports: ...
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
// IngressSpec describes the Ingress the user wishes to exist.type IngressSpec struct { // IngressClassName is the name of an IngressClass cluster resource. Ingress // controller i ...
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
// ServiceSpec describes the attributes that a user creates on a service.type ServiceSpec struct { // The list of ports that are exposed by this service. // More info: https://kuber ...
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
// CronJobSpec describes how the job execution will look like and when it will act ...
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
// JobSpec describes how the job execution will look like.type JobSpec struct { // Specifies the maximum desired number of pods the job should // run at any given time. The actual number of pods running in steady state will // be less than this numb ...