k8s中以不同的策略删除资源时发生了什么

接上篇gc源码分析,这篇主要总结以在不同的删除策略(孤儿,前台,后台)模式下,删除k8s资源发生了什么。 以下都是以 deployA , rsA, podA作为介绍。(这个可以类比为任何有这种依赖关系的资源) 1. 孤儿模式 孤儿模式删除deployA: deployA会被删除,rsA不会删除,但是rsA的Owner……

阅读全文

k8s gc controller源码分析

1. K8s 的垃圾回收策略 k8s目前支持三种回收策略: (1)前台级联删除(Foreground Cascading Deletion):在这种删除策略中,所有者对象的删除将会持续到其所有从属对象都被删除为止。当所有者被删除时,会进入“正在删除”(deletion in progress)状态,此时: 对象仍然可以通……

阅读全文

k8s rs controller源码分析

1. startReplicaSetController 和deployController一样,kcm中定义了startReplicaSetController,startReplicaSetController和所有的控制器一样,先New一个对象,然后调用run函数。 这里可以看出来,rs控制器监听rs, 和pod的变化。 func startReplicaSetController(ctx ControllerContext) (http.Handler, bool,……

阅读全文

k8s deploy controller源码分析

1. deploy基础概念 root@k8s-master# kubectl get deploy nginx-deployment -oyaml apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "2" // 这个是版本号,说明这是第二个版本。 generation: 4 // 这里有个 generation labels: app: nginx name: nginx-deployment resourceVersion: "59522723" selfLink: /apis/apps/v1/namespaces/default/deployments/nginx-deployment uid: a6830e24-a479-452d-bbb2-3cb3cad82ebf spec: progressDeadlineSeconds: 600 replicas: 2 revisionHistoryLimit: 2 // 这个表明只保留2个版本。 selector: matchLabels: app: nginx strategy: rollingUpdate: maxSurge: 25% // 滚动更新的时候,不是一次就更新完了,而是一批一批的更新 maxUnavailable: 25% // 升级过程中最多有多少个 pod 处于无法提供服……

阅读全文

kubelet事件处理机制详解

本文从kubelet组件源码角度入手,分析kubelet中的事件处理机制 1. kubelet事件处理机制入口 // RunKubelet is responsible for setting up and running a kubelet. It is used in three different applications: // 1 Integration tests // 2 Kubelet binary // 3 Standalone 'kubernetes' binary // Eventually, #2 will be replaced with instances of #3 // 第一步调用 makeEventRecorder,这里就表示 事件处理机制 产生了 func RunKubelet(kubeServer *options.KubeletServer, kubeDeps *kubelet.Dependencies, runOnce bool) error {……

阅读全文

k8s event介绍

k8s集群中,controller-manage、kube-proxy、kube-scheduler、kubelet等组件都会产生大量的event。这些event对查看集群对象状态或者监控告警等等都非常有用。本章写一下自己对k8s中event的理解。 1. event的定义 event定……

阅读全文

自定义metric server

本章重点: 如何基于 custom-metrics-apiserver 项目,打造自己的 metric server 1. custom-metrics-apiserver简介 项目地址: https://github.com/kubernetes-sigs/custom-metrics-apiserver/tree/master 自定义metric server,具体来说需要做以下几个事情: (1)实现 custom-metrics-apiserver 的 三个接口,如下: type CustomMetricsProvider interface { // 定义metric。 例如 pod_cpu_used_1m ListAllMetrics() []CustomMetricInfo // 如何根据 metric的信息,得到具体的值 GetMetricByName(name types.NamespacedName,……

阅读全文

hpa 源码分析

本章重点: 从源码角度分析hpa的计算逻辑 1. hpa介绍 1.1 hpa是什么 hpa指的是 Pod 水平自动扩缩,全名是Horizontal Pod Autoscaler简称HPA。它可以基于 CPU 利用率或其他指标自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 用处: 用户……

阅读全文

k8s的基本组件

目录 (1)k8s简介 (2)k8s组件介绍 背景简介 Docker 项目和容器技术目前还是非常火热,但是Docker 技术栈,有自己的局限性,这是它的出发点决定的。那么在docker层之上,例如 容器编排?调度?容器云?集群管理?这些事情就需要另外一个项目来解决了。 在我最开始接触k8s的时候,我看到的……

阅读全文

go的各种类型转换

golang 中int, float, string 以及interface{}直接的互相转换 int 转float 1 2 3 4 var a int var b float64 a = 10 b = float64(a) //ps: 如果是float32,就使用float32(a) int 转string 1 2 3 4 5 6 7 8 9 //第一种方式通过 fmt.sPrintf() 转换string var str string a := 10 str = fmt.Sprintf("%d", a) //第二种方式通过 strconv包 转换……

阅读全文