随笔分类 - kubernetes
摘要:alertmanager是与prometheus相关的组件,用于为监控数据配置告警指标,并发送给告警人。 在k8s中运行的alertmanager,其配置文件为容器中的/etc/alertmanager/config/alertmanager.yaml。然而这个文件为只读文件,无法在容器里直接修改,
阅读全文
摘要:有的时候,k8s中挂载了rbd存储的pod重启后会持续处于ContainerCreating的状态,describe后发现有MountVolume.Setup failed以及Unable to mount volumes for pod xxx的错误描述。 这种情况看上去是rbd设备挂载到pod上
阅读全文
摘要:k8s集群的证书包括master节点相关证书(apiserver、etcd、proxy)和node节点相关证书(kubelet),默认的有效期都是1年。两类证书的更新方式有所不同。 一、更新master节点相关证书 1.首先,在master节点上执行: openssl x509 -noout -da
阅读全文
摘要:前提:k8s集群中已正确部署了prometheus和alertmanager。 在prometheus中已经预先定义了很多告警项。当然,我们也可以自定义告警内容。本文以自定义容器的内存和CPU用量告警为例。 一、创建Prometheusrule Prometheusrule是Prometheus在部
阅读全文
摘要:前提:适用于通过prometheus operator在k8s集群中部署的prometheus。 K8s集群内的Prometheus抓取监测数据是通过servicemonitor这个crd来完成的。每个servicemonitor对应Prometheus中的一个target。每个servicemon
阅读全文
摘要:k8s集群运行久了,难免会产生大量无用的镜像和容器文件,因此需要经常进行清理。 一般而言,docker容器默认的本地数据存储路径位于/var/lib/docker路径下,通过df -h /var/lib/docker命令,可以查看其占用情况。如果高于80%,则意味着需要清理了。 一、清理命令 与清理
阅读全文
摘要:本篇文章我们从ServiceConfig的创建和运行开始。 一、ServiceConfig的创建 ServiceConfig是kube-proxy中用于监听service变化的组件,其本质就是informer,进入NewServiceConfig方法可知。 方法为serviceInformer添加了
阅读全文
摘要:kube-proxy是kubernetes中用于实现service与pod之间流量转发的组件。当我们向一个service发送数据包时,实际的接收者是service代理的后端pod,这一功能就是由kube-proxy实现的。 与其它组件一样,kube-proxy的入口函数位于cmd中,具体位置在cmd
阅读全文
摘要:上一篇文章我们发现,kubelet在运行时会通过五种渠道获得pod状态变化的信息,并层层调用,直到调用到kubelet.go里的syncPod方法。 一、kubelet.go的syncPod方法 syncPod方法非常重要,存放了kubelet创建一个pod的基本逻辑。我们来仔细看一下: 可以看到,
阅读全文
摘要:回顾第一篇文章(https://www.cnblogs.com/00986014w/p/10458231.html),我们讲到RunKubelet方法实现kubelet的运行,而RunKubelet方法核心在于先调用CreateAndInitKubelet方法创建并初始化kubelet,后调用sta
阅读全文
摘要:这一篇文章我们先从NewMainKubelet开始。 一、NewMainKubelet 方法非常长,只贴出一部分,但是很重要。主要做了以下几件事: (1)为kubelet加载各种配置,比如pod信息源、垃圾回收相关配置、监听的端口等。其中的podConfig引申一下,它是pod的三种信息来源的聚合(
阅读全文
摘要:前一篇文章中,我们探索了Informer工作的大致逻辑,提到了添加回调函数部分包含了三块,即:Informer的创建、函数调用的逻辑、以及回调函数本身。前两块已在前文谈到过,下面我们来看看第三块,即回调函数自身的处理逻辑: 一、回调函数 这里仍然以deployment为例。首先还是进入NewDepl
阅读全文
摘要:Kubelet是Kubernetes集群中node节点的核心组件之一,其作用是管理运行在Pod中的容器,使其处于正常运行状态。 Kubelet的启动函数代码位于cmd/kubelet/kubelet.go中,仍是通过cobra注册。 一、NewKubeletCommand 在NewKubeletCo
阅读全文
摘要:本篇将着重分析InstallLegacyAPIGroup方法。 首先,判断传入的前缀是否合法。 其次,调用installAPIResources方法。 最后,在/api路径下生成一个WebService,并添加进Container。 进入installAPIResources方法: 前面的逻辑类似于
阅读全文
摘要:API Server是Kubernetes的核心组件之一,其作用是通过RESTFUL的方式,向所有客户端提供一个集群内资源的统一的增改删查的接口,并将资源的状态存储在etcd中。 API Server入口函数的位置在cmd/kube-apiserver/apiserver.go中,也是通过cobra
阅读全文
摘要:上一篇文章主要侧重于Scheduler在正式执行调度任务之前的准备工作。下面,我们将分析Scheduler的核心方法之一:scheduleOne,来学习Scheduler的具体执行方式。 一、scheduleOne 执行过程分为以下几步: (1)从队列中取出下一个Pod。 这一步通过调用sched.
阅读全文
摘要:Scheduler是集群中Master节点的重要组件,其功能是根据集群中各Pod的资源需求、亲和性等指标,将Pod合理调度到Kubernetes集群中的各个节点上。 一、入口函数 入口函数与Controller Manager的入口函数结构相同,同样是应用了cobra包,在命令行中注册了kube-s
阅读全文
摘要:上一篇文章中,我们看到了Controller Manager的基本运行逻辑,但是还有一些问题没有解决,我们将在本篇文章中进行分析。 一、ListAndWatch 首先是Informer。上一篇中写道,启动Informer本质上是调用了controller的reflector的Run方法。下面我们进入
阅读全文
摘要:Controller Manager是Kubernetes的核心组件之一。我们知道,Kubernetes对集群的管理采用的是控制器模式,即针对各种资源运行多个controller(控制器)。控制器的逻辑是运行永不结束的循环,通过apiserver组件时刻获取集群某种资源的状态,并确保资源的当前状态与
阅读全文
摘要:虽然Kubernetes是用go语言编写的,但是安装go client比安装python client复杂很多。python只需要在PyCharm中安装一个kubernetes包即可,而go则需要很复杂的一系列步骤。 主要按照https://github.com/kubernetes/client-
阅读全文

浙公网安备 33010602011771号