![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
K8S
文章平均质量分 68
傅里叶、
业精于勤荒于嬉,行成于思毁于随
展开
-
etcd之读写性能主要影响因素
etcd读写性能核心影响因素原创 2023-09-15 14:50:43 · 790 阅读 · 1 评论 -
k8s之Informer Store、Indexer、ThreadStore详解
Indexer 和 Store 都是基于 ThreadSafeStore 来实现的。Store实例和Indexer实例初始化的区别,就是没有 Indexers,Store 算是阉割版的 Indexer。ThreadSafeStore 的操作时需要使用 key 来对对象进行操作的,而 cache 的作用便是使用 cache.keyFunc 来计算对象的 key。原创 2023-07-02 22:14:24 · 558 阅读 · 1 评论 -
k8s之审计日志
k8s在 v1.7 版本中发布了审计(Audit)日志功能,审计(Audit)提供了时序操作记录(包括时间、来源、操作结果、发起操作的用户、操作的资源以及请求/响应的详细信息等)。K8s 中的审计日志是标准的 JSON 格式,APIServer 会根据具体的日志策略将对应的审计日志保存本地,并可以设置最大保存周期、时间、轮转策略等,一般在/var/log/kube-apiserver目录下。原创 2023-05-03 16:44:11 · 1469 阅读 · 1 评论 -
k8s之apiserver
k8s之apiserver原创 2023-02-12 17:17:44 · 2537 阅读 · 0 评论 -
k8s-List机制及resourceVersion语义
kube-apiserver 核心职责提供Restful API;代理集群组件,如dashboard、流式日志、kubectl exec 会话;缓存全量的etcd 数据且无状态服务可水平扩展。原创 2022-11-20 22:57:14 · 2665 阅读 · 0 评论 -
k8s之hpa v2beta2
k8s之hpa v2beta2,弹性伸缩原创 2022-11-13 20:32:02 · 426 阅读 · 0 评论 -
k8s之滚动更新及pod流量分析
Pod 被删除后,状态被 endpoint-controller 和 kubelet 订阅,并分别执行移除 Endpoint 和删除 Pod 操作,但是两个操作并非我们预期的先移除 Endpoint 后再删除 Pod,而是是同时进行的,因此有可能会出现在 Pod 已经接收到了 SIGTERM 信号但仍然有流量进入的情况。原创 2022-11-06 21:43:02 · 2176 阅读 · 0 评论 -
k8s之三大探针
livenessProbe存活性探针,用于判断容器是不是健康,如果不满足健康条件,那么 Kubelet 会杀死容器,并根据restartPolicy重启策略(Always,OnFailure,Never)来判断Pod 是否要进行重启操作;readinessProbe 就绪性探针,用于判断容器内的程序是否存活,如果不满足健康条件,那么会自动从Service的 EndPoint 列表中去除该pod的 IP:Port;startupProbe启动探针,k8s1.16新增,主要解决在慢启动程序或复杂程序中rea原创 2022-09-20 21:25:13 · 2425 阅读 · 0 评论 -
k8s之容器内存与JVM内存
容器内存与JVM内存原创 2022-09-07 21:44:30 · 7509 阅读 · 2 评论 -
k8s之client-go和ctrl的各种k8s client
k8s之client-go和ctrl的各种k8s client原创 2022-09-04 10:33:34 · 706 阅读 · 0 评论 -
k8s之从internal version到runtime.codec
介绍k8s internal version 和 runtime.serializer 以及 runtime.codec原创 2022-09-03 18:28:49 · 452 阅读 · 0 评论 -
k8s之选主机制
k8s client-go选主机制原创 2022-08-21 22:03:27 · 1156 阅读 · 0 评论 -
Prometheus简单理解
Prometheus 覆盖指标暴露,到指标抓取、存储和可视化以及监控告警。原创 2022-07-20 15:23:27 · 422 阅读 · 0 评论 -
k8s之client-go的update和patch
k8s之update和patch原创 2022-07-10 10:43:39 · 4305 阅读 · 0 评论 -
k8s之controller-runtime与kubebuilder
k8s之controller-runtime或kubebuilder原创 2022-07-03 16:04:29 · 1093 阅读 · 0 评论 -
k8s之client-go的工作逻辑
client-go的工作逻辑原创 2022-06-27 20:40:15 · 893 阅读 · 0 评论 -
k8s之限流机制
k8s限流与APF原创 2022-06-19 19:28:42 · 3363 阅读 · 0 评论 -
k8s之删除机制
1、finalizers: 对象终结器,列表内的键为空时资源才可被删除。当我们删除带有 finalizers 字段的对象时,该对象首先会被添加 deletionTimestamp(删除时间戳)字段,并一直处于预删除只读状态(删除终结器键更新除外),直到某些控制器删除或使用 Kubectl 删除该对象终结器之前,真正的删除都不会完成,同时一旦终结器列表为空,k8s gc就会回收该对象,将其放入要从注册表中删除的队列中。2、owner references: 所有者引用,即父资源对象是谁...原创 2022-05-30 10:52:59 · 2038 阅读 · 1 评论 -
k8s之认证鉴权准入控制
k8s认证,Authentication,检查用户是否为合法用户。认证方式有很多,常用的是 X509 Client Certs(用于外部用户如kubectl)和Service Accout Tokens(用于pod中进程),kubeconfig使用X509 Client Certs方式。同时ServiceAccount Resource中主要包含了三个内容:namespace、token和ca.crt,其中namespace表示当前管理的命名空间;ca.crt用于校验服务端的的证书信息,即apiserve原创 2022-04-29 16:57:09 · 809 阅读 · 0 评论 -
社区的代码规范及e2e测试
golangci-lint静态代码检查工具,是对golint、gofmt的集成,速度更快。1、安装go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.38.0golangci-lint run [目录]/[文件]最新的版本是1.42.0,社区使用的是1.38.0,总体来说是规则越来越严,和社区保持一致;Lintersdeadcode,未使用函数和方法的检查; errcheck,未处理错误,例子+1;原创 2022-03-13 17:26:24 · 1867 阅读 · 1 评论 -
k8s之wsl2+kind搭建kubevela开发集群
wsl2+kind+docker desktop搭建kubevela测试集群;原创 2022-03-06 16:45:04 · 1131 阅读 · 0 评论 -
k8s之VelaQL简单理解
Application对象对底层资源进行封装,屏蔽了底层基础架构,但是这样对Application创建资源状态的监控,只能依赖Application的状态透出,但状态信息简略、状态实时反馈性差,VelaQL就是为了提升Application的可观测性,用于查询应用级别的资源状态。velaQL 对标的是 PromQL ,我们期望能够成为应用监控领域的 Prometheus原创 2022-02-28 11:15:00 · 379 阅读 · 0 评论 -
k8s之cue模板
CUE能够安全地更改可修改配置中成千上万个对象的值。1、数据类型:int、float、bool、string、array、struct、null2、运算符#定义变量: #abc: string3、运算符...定义开放的结构体和数组: 数组对象[...string],说明该对象可以容纳多个字符串元素结构体对象{abc: string ...}说明结构体可以包含未知字段4、运算符 | 表示两种类型的值。a: string | int说明变量 a 表示类型可以是字......原创 2022-02-12 16:43:02 · 1187 阅读 · 0 评论 -
kubevela随笔
自定义component、自定义trait、自定义workflow原创 2022-02-11 12:57:21 · 1480 阅读 · 1 评论 -
K8s之workQueue简单理解
1、RateLimiter实现了对于队列元素的重试规则,包括三个函数When获取某个元素应该等待的时间,Forget释放某个元素不再监测,NumRequeues返回该元素已经失败重试的次数。2、RateLimiter主要有四种类型:主要行为表现在当某一事件元素失败后,等待时间的计算规则不一致。BucketRateLimiter令牌桶算法,可以控制在一定频率来执行; ItemExponentialFailureRateLimiter根据失败次数按指数延时; ItemFastSlowRate原创 2022-02-10 09:38:13 · 1365 阅读 · 1 评论 -
k8s之kubebuilder简单理解
kubebuilder流程1、创建manager,ctrl.NewManager,包括设置 shemme和端口、选主信息等配置、NewCluster(用来访问k8s,主要包括newCache和New读写client)、newEventRecorder。1.1、newCache包括创建informerMap,分为structured、unstructured与metadata,其实最终都是调用newSpecificInformersMap,在newSpecificInformersMap中通过creat原创 2022-01-29 17:04:57 · 2590 阅读 · 0 评论 -
k8s之listwatch与informer简单理解
informer简介Informer是一个能够缓存apiserver的对象到本地、具有索引机制、并可以注册 EventHandler 的 client。使用 informer 的目的是为了减轻 apiserver 数据交互的压力,其中本地缓存被称为 Store,索引被称为 Index。Informer流程:informer的listandwatch机制,默认是每10h从apiserver中整体list一次,有add、delete等事件时会通过watch机制把这个事件+对象放到deltaFIFO中,然后原创 2022-01-18 19:53:40 · 3627 阅读 · 0 评论 -
k8s之patch
1、JsonPatch创建数组 imagePullPolicy4 := "44" patch := []byte(fmt.Sprintf(`[ { "op": "add", "path": "/spec/sysctlInit/command", "value": ["%s"] }] `, imagePullPolicy4)) if err := kubeCli.Patch(context.Background(), &v1alpha1.M原创 2021-11-22 14:42:51 · 1863 阅读 · 0 评论 -
k8s之CRD定义map[string]interface{}类型
11原创 2021-11-01 17:28:08 · 1009 阅读 · 3 评论 -
K8s随笔
1、CRD.yaml编写:CRD的type:integer类型--reconcile的int类型,CRD的format:float64 type:number类型--reconcile的float64类型原创 2021-10-22 13:49:00 · 1617 阅读 · 2 评论 -
YAML字段详解
规则:大小写敏感通过缩进表示层级关系禁止使用tab缩进,只能使用空格键缩进的空格数目不重要,只要相同层级左对齐使用#表示注释引号的区别:单引号(''): 特殊字符作为普通字符串处理双引号(""): 特殊字符作为本身想表示的意思锚点与引用:使用&定义数据锚点,即要复制的数据使用*引用锚点数据,即数据的复制目的地数据类型:YAML允许使用感叹号(!)强制转换数据类型,单叹号通常是自定义类型,双叹号是内置类型数据类型分为纯量、数组(用-表示)、对象apiVersio原创 2021-07-28 09:09:11 · 917 阅读 · 0 评论 -
为什么k8s中docker容器的启动命令必须是前台执行?
k8s中docker容器的启动命令(在yaml的command字段中配置)必须是前台执行,不能使用后台执行程序,nohup ./start.sh &否则kubelet创建了包含这个容器的pod之后运行该后台命令后,就认为pod执行结束了,然后立即销毁该pod,如果该pod定义了RC,还会根据RC中定义的replicas重新生成pod,从而陷入无限循环。...原创 2021-07-24 16:37:24 · 1829 阅读 · 0 评论 -
Pod定义YAML文件详解
原创 2021-07-24 16:19:30 · 391 阅读 · 0 评论 -
CRI的机制
CRI工作在kubelet与container runtim之间,其实就是三组gRPC的接口,其中Sandbox 接口为Container提供一定的运行环境,包括pod的网络等;Container接口包括容器生命周期的具体操作;Image接口则提供对镜像的操作。常见的容器运行时有docker、containnerd等。PodSandbox是K8s为兼容不同运行时环境预留的空间,即K8s 允许 low-level runtime 依据不同的是实现去创建不同的 PodSan...原创 2021-07-24 11:28:32 · 405 阅读 · 0 评论 -
kubelet创建容器的步骤
1、Kubelet 通过 CRI 接口(gRPC)调用 dockershim,请求创建一个容器。CRI 即容器运行时接口,目前 dockershim 的代码其实是内嵌在 Kubelet 中的,所以接收调用的也是 Kubelet 进程;2、dockershim收到请求后,转化成 Docker Daemon 能听懂的请求,并发送给Docker Daemon 请求创建一个容器;3、Docker Daemon 早在 1.12 版本中就已经将针对容器的操作移到另一个守护进程containerd 中了,因此 .原创 2021-07-24 11:27:52 · 435 阅读 · 0 评论 -
k8s创建pod的步骤
1、通过 kubectl 命令向 apiserver 提交, apiserver 将资源保存在 etcd 中;2、controllermanager 通过控制循环,获取新创建的资源,并创建 pod 信息。这里只创建pod并未调度和创建容器;3、kube-scheduler 也会循环获取新创建但未调度的pod,并在执行一系列调度算法后,将 pod 绑定到一个 node上,并更新 etcd 中的信息。具体方式是在 pod 的 spec 中加入nodeName字段;4、Kubelet监视所有Po...原创 2021-07-24 11:27:12 · 2328 阅读 · 0 评论 -
k8s CRD相关
1、CRD的意义Kubernetes 1.7之后,提供了CRD(CustomResourceDefinitions)自定义资源的二次开发能力来扩展kubernetes API,通过此扩展可以向kubernetes API中增加新的资源类型,会比修改kubernetes apiserver的源代码或创建自定义的apiserver来的更加的简洁和容易,2、在k8s上创建资源的过程用户创建一个资源,实际上是把k8s抽象的资源根据资源清单(yaml文件)做实例化。具体过程如下...原创 2021-07-21 20:57:19 · 8264 阅读 · 0 评论 -
k8s的概念梳理
1、Pod是k8s中可以创建和部署的最小单位。一个pod可以看作一个逻辑主机,一个pod代表一个应用实例,可以包含多个容器。2、label和label selector:label能够以key/value的形式可以给pod等资源对象创建一组或多组标签,实现资源分组管理功能。Label selector能够识别一组有共同特征或属性(label)的资源对象。(Label Selector有两种形式:等式方式:= 、 == 、 !=和集合方式:in、notin)。Label和Label Selector共同构成原创 2021-07-19 16:27:57 · 572 阅读 · 0 评论