kubernetes
文章平均质量分 82
ywq935
这个作者很懒,什么都没留下…
展开
-
Kubernetes源码-公共库-01-wait-定时(条件)轮询库
Kubernetes源码-公共库-01-wait-定时(条件)轮询库前言在前面的主要组件分析过程中,有数次提及到的wait库让我记忆犹新,这是一个被高频引用的库,各个主要组件如scheduler、controller、kubelet等都常常使用wait库中的function轮询间隔(或条件)触发执行动作。整个wait库只有一个代码文件,代码行数不过400余行,本篇就来完整地分析一下这个库。代码路径: vendor/k8s.io/apimachinery/pkg/util/wait/wait.go分类原创 2021-11-21 23:13:36 · 961 阅读 · 0 评论 -
Kubernetes源码学习-Kubelet-P1-启动流程
前言在大致分析过k8s的Scheduler、Controller、APIServer三个控制平面组件后,本篇开始进入数据交互平面的daemon组件kubelet部分,看看kubelet是如何在控制平面和数据平面中以承上启下的模式工作的。启动流程启动入口照旧,位于项目的cmd路径下,使用cobra做cmd封装:cmd/kubelet/kubelet.go:39func main() { rand.Seed(time.Now().UnixNano()) command := app.NewKub原创 2021-05-05 22:16:27 · 545 阅读 · 0 评论 -
Kubernetes源码学习-APIServer-P4-APIServer的鉴权机制
前言在上一篇APIServer-P3-APIServer的认证机制中,讲述了请求进入后的认证过程,在通过认证之后,请求将进入鉴权环节,本篇就此展开。审查请求属性Kubernetes 仅审查以下 API 请求属性:用户 - 身份验证期间提供的 user 字符串。组 - 经过身份验证的用户所属的组名列表。额外信息 - 由身份验证层提供的任意字符串键到字符串值的映射。API - 指示请求是否针对 API 资源。请求路径 - 各种非资源端点的路径,如 /api 或 /healthz。API 请求原创 2021-02-04 12:12:19 · 958 阅读 · 0 评论 -
Kubernetes源码学习-APIServer-P3-APIServer的认证机制
前言在上一篇APIServer-P2-启动流程中,把APIServer预启动、加载配置、启动 的流程大致过了一遍,其中也有提到,APIServer的认证机制分为多种,以组合的形式遍历认证,任一机制认证成功,则判定请求认证成功,顺利进入下一个授权判定的环节。那么在本篇,就来详细看看这些认证机制。Kubernetes用户所有 Kubernetes 集群都有两类用户:由 Kubernetes 管理的服务账号和普通用户。其中服务账号(ServiceAccount)是提供给集群中的程序使用,以Secret资源原创 2021-02-03 12:28:19 · 912 阅读 · 1 评论 -
Kubernetes源码学习-APIServer-P2-启动流程
Kubernetes源码学习-APIServer-P2-启动流程前言在前一篇开胃菜-基础结构信息对APIServer各类基础信息、结构铺垫的基础上,开始进入APIServer源码的探讨环节。本篇拆分为 预启动、启动种两部分来分析。预启动资源注册前面的基础篇有讲过,scheme是一种内存型的注册表,提供给各类gvk进行注册。在APIServer http服务启动前的第一步,就是将所支持的gvk注册到scheme中,后面的步骤会依赖scheme注册表信息。值得注意的是,并没有函数方法来显示地注册sc原创 2020-12-01 16:45:03 · 343 阅读 · 0 评论 -
Kubernetes源码学习-APIServer-P1-基础结构信息
Kubernetes源码学习-APIServer-P1-基础结构信息前言APIServer的工作主要围绕着对各类资源对象的管控,因此,在开始阅读APIServer的源码之前,有必要笼统地列举一下它在运行中所用到的核心数据结构等基础性信息,当作是开胃菜篇吧。Group/Version/Kind/Resource在K8s的设计中,resource是其最基础、最重要的概念,也是最小的管理单位,所有的管理对象都承载在一个个的resource实例上,为了实现这些resource的复杂管理逻辑,又进一步地将他们原创 2020-12-01 16:44:22 · 431 阅读 · 0 评论 -
Kubernetes源码学习-APIServer-总览篇
Kubernetes源码学习-APIServer-总览篇开胃菜-基础结构信息APIServer的启动流程APIServer的认证机制APIServer的授权机制概述APIServer提供了 k8s各类资源对象的CURD/watch、认证授权、准入控制等众多核心功能,在k8s中定位类似于大脑和心脏,它的功能包括:提供了集群管理的REST API接口(包括资源CURD、认证授权、数据校验以及集群状态变更);是所有模块的数据交互和通信的枢纽,各模块的运作都依赖于APIS原创 2020-12-01 16:43:30 · 314 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P8-踩到的坑
前言一路下来踩了不少坑,有一些没有印象了,还有印象的就记录下来,想起来再补充.metadata.resourceVersion: Invalid value: 0x0: must be specified for an update对unit执行scale的时候报错:#~ kubectl scale unit unit-sample --replicas=2The unit "unit-sample" is invalid: metadata.resourceVersion: Invalid va原创 2020-05-24 10:47:27 · 2399 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P7-本地调试和发布Controller
本地调试和发布Controller前言前面几篇已经完成了初步的代码编写,但随后还需要 调试测试 --> 正式发布 到K8s集群内。这个步骤是官方文档内简笔带过的,极易带来困扰,写代码很难一气呵成,总会有error需要调试,但不可能每次为了调试一两行代码或加个打印输出,重复进行打镜像、推镜像、重启pod这一系列繁杂的操作,本篇专门讲述如何使用本地开发环境连接K8s集群进行调试,以及测试完毕后正式发布到K8s集群中运行。调试/测试众所周知,APIServer交互是需要TLS加密的,CRD cont原创 2020-05-24 10:46:50 · 2833 阅读 · 6 评论 -
《 Kubebuilder v2 使用指南 》-P6-CRD Admission Webhook
CRD Admission Webhook前言前面的文章中,实现了Unit资源对象实例持久化之后的controller管理的过程。除此之外,Kubernetes额外支持了一些很有趣且实用的功能,例如经常被用在资源准入控制上的Adminssion Webhook,它是对APIServer接收准入请求的扩展。详情请参考官方文档:extensible-admission-controllers认识Adminssion Webhook什么是Adminssion Webhook?在官方文档里对的话来说就是原创 2020-05-24 10:46:06 · 1282 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P5-实现CRD控制逻辑
实现CRD控制逻辑前言上一篇已经设定了Unit所要实现的目标,完成了Unit结构体各子字段、ownResource字段的填充,为控制逻辑的实现做了基础铺垫。本篇主要解决和实现的控制逻辑:如何管理Unit下属的own Resources如何使Unit和own Resources生命周期绑定删除Unit资源前能否做一些自定义操作逐一来实现。管理own Resources如前文所说,一共设计了5种ownResource分别对应StatefulSet/Deployment/Ingress/Se原创 2020-05-24 10:44:13 · 1462 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P4-从零开始设计一个CRD
从零开始设计一个CRD前言经过前面的铺垫,相信现在对kubebuilder的工作模式已初具了解,那么从本篇开始,正式设计一个CRD。本文对于Unit的设计,是基于我的个人场景下的需求提炼出来的,不一定适合你,但着重点在于思路,希望能有帮助。面临的现状在我的场景下,应该也是大多数人的场景下,通常一个运行服务(姑且这么称呼),使用一系列build-in 类型资源进行组合,来保障运行和提供服务,例如,最常用的组合有:StatefulSet/Deployment/Ingress/Service/Ingres原创 2020-05-24 10:43:19 · 1014 阅读 · 2 评论 -
《 Kubebuilder v2 使用指南 》-P3-认识Kubebuilder
认识Kubebuilder前言没有人会喜欢黑盒,在使用一个工具之前,我习惯于尽可能多地去了解它,不然用起来会觉得不踏实。Controller的工作流程已经很熟悉了,理解kubebuilder的源码应该也比较容易。因此,大概阅读了一下了kubebuilder的源码,本篇圈出其中几个重点,用以帮助理解和认识kubebuilder。概念名词下面几个概念名词非常的重要,文中会多次提及。Own ResourceCRD一般设计用作管理k8s内置的各类资源组合,用以实现自定义的部署和运行逻辑,是一种上层封装,原创 2020-05-24 10:42:27 · 4157 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P2-环境准备
环境准备Requirementsgo version v1.13+.docker version 17.03+.kubectl version v1.11.3+.kustomize v3.1.0+除了上面的工具和环境以外,需要有一套可连接的kubernetes环境,要求配置好kubectl config,以便能直连进行调试。由于Feature gates的 --CustomResourceWebhookConversion参数是在v1.15及以上的版本k8s才默认为true,为了避免版本导原创 2020-05-24 10:41:56 · 556 阅读 · 0 评论 -
《 Kubebuilder v2 使用指南 》-P1-总览篇
《 Kubebuilder v2 使用指南 》前言K8s内置的build-in 资源类型,可以组合使用以满足绝大部分场景的部署需求,更进一步地,对于追求更高自由度、有特殊需求的场景下,在kubernetes v1.7 后的版本开始支持CRD(CustomResourceDefinition),无需修改组件代码,即可通过CRD向APIServer注入自定义资源的方式,对内置资源进行上层封装,实现自定义环境部署和运行逻辑。APIServer会根据CRD的指定,自动生成CRD的restful路径,有关此路径的原创 2020-05-24 10:40:58 · 2838 阅读 · 2 评论 -
kubeadm修改默认证书有效期,解决证书过期问题
kubeadm 修改默认证书有效期前言出于安全考虑,k8s 团队推荐定期更新版本,因此kubeadm生成的证书,有效期默认在代码中写死为1年,一旦证书过期,k8s集群将会崩溃,因此,续期 or 升级,成了一个一年一度必选题。但在生产环境中,每一次版本更新可能存在未知的风险,给已经稳定运行的集群带来诸多不确定性,而每年续期一次证书,对管理不太友好,频繁手动操作也可能会带来额外的风险。去年部署的1.14的集群,证书快要到期了,现在决定修改kubeadm的源码重新编译,将续期证书的有效期进行延长。本篇记载分析原创 2020-05-12 09:01:29 · 4789 阅读 · 0 评论 -
Kubernetes源码学习-Controller-P5-StatefulSet Controller
P5-StatefulSet Controller前言在前面的几篇文章中,先对deployment controller进行了初步分析:Controller-P3-Deployment Controller严格来讲deployment的管理pod的逻辑是基于replicaSet来实现的,因此接下来结合replicaSet controller进行了深入:Controller-P3-Rep...原创 2020-04-08 20:59:38 · 959 阅读 · 0 评论 -
Kubernetes源码学习-Controller-P4-ReplicaSet-Controller
P4-ReplicaSet Controller前言在上一篇文章中,对deployment controller的工作模式进行了详细地分析:[Controller-P3-Controller](https://github.com/yinwenqin/kubeSourceCodeNote/blob/master/controller/Kubernetes源码学习-Controller-P3-...原创 2020-03-24 19:42:27 · 466 阅读 · 0 评论 -
Kubernetes源码学习-Controller-P3-Controller分类与Deployment Controller
P3-Controller分类与Deployment Controller前言Controller部分的第一篇文章中,我们从cobra启动命令入口开始,进入到了多实例leader选举部分的代码,对leader选举流程做了详细地分析:Controller-P1-多实例leader选举接着在第二篇中,文字和图解简单描述了controller是如何结合client-go模块中的informer工...原创 2020-01-31 16:05:26 · 412 阅读 · 0 评论 -
Kubernetes源码学习-Controller-P2-Controller与client-go
病毒肆虐,阴雨连绵,门房紧闭,亲友不问,冷冷清清,甚是无趣。坐下写写代码,总结下过去一年所学,整理两篇文章,倒也算是乐得自在。盼疫情早日控制,春回大地,愿同胞们身体安康,祝新年快乐!P2-Controller与client-go前言Controller作为k8s的资源控制组件,必定要实时地监控对比资源的目标状态和当前状态,这其中会与apiserver产生大量的交互。在k8s中,k8s各个组件...原创 2020-01-26 14:15:18 · 585 阅读 · 0 评论 -
kubernetes挂载cephfs带来的mds卡顿问题及引入cephfs storageClass
kubernetes挂载cephfs带来的mds卡顿问题及引入cephfs storageClass前言前面的文章中,有写过如何在kubernets中组合pv/pvc,使用cephfs进行数据的持久化存储:cephfs 在kubernetes中的使用但是在经过一段时间的使用后,发现此方式意外地会造成ceph mds严重的性能问题,本文将介绍如何使用cephfs storageClass避免...原创 2020-01-06 08:45:08 · 3096 阅读 · 4 评论 -
Kubernetes源码学习-Controller-P1-多实例leader选举
P1-多实例leader选举.md前言Kubernetes多master场景下,核心组件都是以一主多从的模式来运行的,在前面scheduler部分的文章中,并没有分析其主从选举及工作的流程,那么在本篇中,以controller为例,单独作一篇分析组件之间主从工作模式。入口如scheduler一样,controller的cmd启动也是借助的cobra,对cobra不了解可以回到前面的文章中查...原创 2019-12-10 19:23:43 · 834 阅读 · 2 评论 -
Kubernetes源码学习-Controller-总览篇
Controller源码分段阅读导航多实例leader选举Informer工作流程Deployment ControllerStafulSet Controller待补充概述kube-controller的作用引述首先依照惯例,贴两篇官方对 于controller的设计逻辑和运行机制的说明文档:https://github.com/kubernetes/communi...原创 2019-12-10 19:22:32 · 562 阅读 · 0 评论 -
Kubernetes各组件参数配置优化建议
Kubernetes各组件参数配置优化建议kubernetes虽然默认配置下已经足够可用满足常见的中小规模场景,但是若是将各组件参数、内核参数进行适当的调整,以达到更贴合使用场景的参数值,对集群运行的稳定性、故障切换能力等方面会有不小的提升。下面介绍一下各组件生产运行常做的一些参数调整。Kubelet参数配置kubelet在各个组件之中,作为唯一的分布在每个节点上的daemon控制程序,应该...原创 2019-11-18 16:16:02 · 4461 阅读 · 0 评论 -
Kubernetes源码学习-Scheduler-P4-Node优先级算法
P4-Node优先级算法前言在上一篇文档中,我们过了一遍node筛选算法:p3-Node筛选算法按调度规则设计,对筛选出的node,选择优先级最高的作为最终的fit node。那么本篇承接上一篇,进入下一步,看一看node优先级排序的过程。Tips: 本篇篇幅较长,因调度优选算法较为复杂,但请耐心结合本篇阅读源码,多看几次,一定会有收获。正文1. 优先级函数1.1 优先级函数入口...原创 2019-08-22 17:03:31 · 564 阅读 · 0 评论 -
Kubernetes源码学习-Scheduler-P5-Pod优先级抢占调度
P5-Pod优先级抢占调度1. 前言前面的两篇文章中,已经讲过了调度pod的算法(predicate/priority),在kubernetes v1.8版本之后可以指定pod优先级(v1alpha1),若资源不足导致高优先级pod匹配失败,高优先级pod会转而将其驱逐,抢占低优先级pod的资源,那么本篇就从代码的层面展开看一看pod抢占部分的逻辑。2. 抢占调度入口在P1-入口篇中我们找...原创 2019-09-03 18:17:18 · 369 阅读 · 0 评论 -
k8s(十六): VXLAN和Flannel
前言目前k8s中比较常用的cni有calico、flannel、kube-router等,个人比较熟悉的是kube-router的bgp纯直通方案,flannel则是另一款使用较多的比较简单易用的方案,这里着重了解一下flannel的vxlan这一常用模式VXLAN在了解flannel之前,有必要掌握vxlan的基础知识。首先来看看vxlan协议的报文封装格式:说明:vxlan,给数据...原创 2019-07-17 16:57:41 · 4164 阅读 · 1 评论 -
k8s(五)、微服务框架istio流量策略控制
前言承接上节k8s(四)、微服务框架istio安装测试 本节实验通过在k8s上部署istio,实现微服务的基础功能。其中会涉及到服务的限流,超时,熔断,降级,流量分隔,A/B测试等功能。注意本次实验环境已开启istio的自动注入功能。**本实验的服务问调用关系如下:**实验采用时下流行的前后端分离模式,每个svc分别对应两个不同语言版本实例的后端pod前端项目基于vue/react...原创 2018-06-06 15:29:22 · 9781 阅读 · 3 评论 -
Kubernetes源码学习-Scheduler-总览篇
调度器总体设计调度器源码分段阅读目录调度器入口调度器框架Node筛选算法待补充概览首先列出官方md链接,讲解颇为生动:https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduler.md这里用结合自己阅读代码的理解做一下翻译。工作模...原创 2019-08-20 15:34:42 · 289 阅读 · 0 评论 -
Kubernetes源码学习-Scheduler-P3-Node筛选算法
P3-Node筛选算法前言在上一篇文档中,我们找到调度器筛选node的算法入口pkg/scheduler/core/generic_scheduler.go:162 Schedule()方法p2-调度器框架那么在本篇,由此Schedule()函数展开,看一看调度器的node筛选算法,优先级排序算法留作下一篇.正文Schedule()的筛选算法核心是findNodesThatFit()方...原创 2019-08-20 15:33:30 · 297 阅读 · 0 评论 -
k8s部署zookeeper/kakfa集群
问题: 在制作好zk的docker镜像后,测试docker直接运行起3个实例,zk集群选举建立都是正常的,但是,通过k8s部署后,发现zk集群选举无论如何都不能成功,各种google都无法解决,最终通过headless service这一方式完美解决,在此记录一下解决过程。首先,贴一下manifest.yaml文件,整合成了一个完整的yaml文件:---kind: Deployment...原创 2018-08-16 20:28:46 · 12702 阅读 · 7 评论 -
k8s(十)、微服务--istio1.0抢鲜测试
前言此前写了三篇文章,介绍了istio的工作原理、流量调度策略、服务可视化以及监控: k8s(四)、微服务框架istio安装测试 k8s(五)、微服务框架istio流量策略控制 k8s(六)、微服务框架istio服务可视化与监控 istio项目成立1年多以来,鲜有生产上的用例,但这次最新的1.0版本,在官网介绍上赫然写着: All of our core features are...原创 2018-08-02 15:52:48 · 7020 阅读 · 0 评论 -
k8s(九)、监控--Prometheus扩展篇(mysqld-exporter、服务发现、监控项、联邦、relabel)
前言上一篇主要介绍prometheus基础告警相关,本篇再进行扩展,加入mysql监控,列出一些监控告警表达式及配置文件,以及新版prometheus上的联邦特性,支持多prometheus分支数据聚合,在多集群环境中很适用。mysqld-exporter部署:在公司的环境中,大部分的DB已迁移至K8S内运行,因此再以常见的节点二进制安装部署mysqld-exporter的方式不再...原创 2018-06-28 20:25:13 · 11258 阅读 · 10 评论 -
k8s(八)、监控--Prometheus告警篇(告警消息对接钉钉接口)
前言承接上章k8s(七)、Prometheus部署篇,在上章的基础上,本章介绍Prometheus告警相关配置。一、Querying expr & PromQL在了解告警规则之前,首先得了解Prometheus的数据查询表达式,来获取metric数据是否到达告警阈(ps:这个字儿念yu,第四声,不念第二声的fa)值。Overview Prometheus提供了一种功能...原创 2018-06-26 19:50:47 · 9958 阅读 · 1 评论 -
k8s(七)、监控--Prometheus部署篇
前言前面几篇文章介绍了k8s的部署、对外服务、集群网络、微服务支持,在生产环境中使用,离不开运行状态监控,本篇开始部署使用prometheus,被各大公司广泛使用的容器监控工具。工作方式Prometheus工作示意图: 在k8s中,关于集群的资源有metrics度量值的概念,有各种不同的exporter可以通过api接口对外提供各种度量值的及时数据,prometheus在与k...原创 2018-06-26 17:30:17 · 26036 阅读 · 26 评论 -
k8s(六)、微服务框架istio服务可视化与监控
前言: 承接上文k8s(五)、微服务框架istio流量策略控制 ,测试环境需保留上文中的环境,在本文将重点展示istio微服务调用链关系展示,以及微服务工作状态监测,涉及组件有: prometheus \ grafana \ jaeger等非常感谢文章作者这几天耐心地解答疑惑: http://www.maogx.win/posts/26/微服务调用链追踪 安装jaeger# ...原创 2018-06-06 18:37:42 · 7749 阅读 · 1 评论 -
k8s(四)、微服务框架istio安装测试
一、前言Istio是Google/IBM/Lyft联合开发的开源项目,2017年5月发布第一个release 0.1.0,Service Mesh微服务新秀,采用sidecar的实现方式,有着高性能、极低的资源开销、无代码入侵等优秀特性,扛起微服务大旗,并与当下火热的k8s Paas容器云平台深度整合。官方描述为:An open platform to connect, manage, a...原创 2018-06-06 11:04:37 · 5336 阅读 · 0 评论 -
k8s(三)、kube-router: K8S BGP直通网络CNI方案
前言上一篇讲到,k8s使用traefik代理集群内部服务,灵活地注入代理配置的方式,提供对外服务(参考:k8s(二)、对外服务)。在本篇,使用gns3思科模拟器IOU,搭建BGP网络环境,通过vmware桥接的方式,直接对接虚拟机内的k8s集群,与集群内部BGP网络实现互通。拓扑图:1.路由器配置####router1:IOU1#show running-config...原创 2018-05-13 12:46:41 · 8373 阅读 · 15 评论 -
Kubernetes踩坑(一): 部署问题记录
一、etcd服务启动后报错etcd cluster ID mismatch: 检车service配置cluster选项有无问题,若无问题,则可能是此前的etcd bootstrap加速启动缓存残留导致,坑爹的是rm -rf /var/lib/etcd/* 删除完了之后还是报错,必须 rm -rf /var/lib/etcd/才能彻底清除,删除完成后记得再创建该路径mkdir /...原创 2018-04-27 15:45:24 · 21178 阅读 · 2 评论 -
docker、k8s常用命令速查及k8s restful api接口
docker: - docker ps -a - docker images - docker exec -it {ID\NAME} /bin/bash | /bin/sh - docker run -it {ID\NAME} -p -v - docker start {ID\NAME} - docker stop {ID\NAME} - docker rm {ID...原创 2018-04-27 15:33:44 · 5029 阅读 · 0 评论