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 ...
K8s工作负载-DaemonSet
K8s工作负载-DaemonSet
基于1.25
什么是DaemonSetDaemonSet 控制器确保所有(或一部分)的节点都运行了一个指定的 Pod 副本,缩写DS
使用场景
在每个节点上运行集群的存储守护进程,例如 glusterd、ceph
在每个节点上运行日志收集守护进程,例如 fluentd、logstash
在每个节点上运行监控守护进程,例如 Prometheus Node Exporter (opens new window)、Sysdig Agent (opens new window)、collectd、Dynatrace OneAgent (opens new window)、APPDynamics Agent (opens new window)、Datadog agent (opens new window)、New Relic agent (opens new window)、Ganglia gmond、Instana Agent (opens new window)等
DaemonSetSpec
Ref:https://github.com/kuber ...