随笔分类 -  kubernetes

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