在node节点上 , 节点上各个类型资源可用量 , 体现在node对象的status字段中
12345678910apiVersion: v1kind: Nodemetadata: name: node-1...Status: Capacity: cpu: 2 memory: 2049008Ki.....
那么如何增加一个自定义类型资源的数量呢
增加方法12345678#启动一个代理kubectl proxy#执行pacth操作curl --header "Content-Type: application/json-patch+json" \--request PA...
目前kubernetes的Qos的设置策略有三种:
Guaranteed
就是pod中的container同时设置了requests和limits , 并且requests和limits的值相同
Burstable
当pod不满足Guaranteed的条件, 但是至少有一个container设置了requests (requests和limits不相同)
BestEffort
既没有设置requests , 也没有设置limits
设置了Qos策略的话 , 当主机资源不够的时候 , 就会触发Eviction(资源回收) , 那主机 资源不够的标准是什么呢 , 在kubern...
kubernetes默认的调度器要调度一个pod到一个节点上 , 它的步骤是这样的:
预选过程(Predicate): 排除不符合pod要求的节点 , 选出符合pod调度的node列表
优选过程(Priority): 在符合pod的node列表中 , 给每个node打分(1-10分)
选择(Select) 选出得分最高的那个node作为最终的调度结果
调度器的核心
调度器的核心其实是2个独立的循环
循环一: Informer Path有许多informer会启动起来, 监听etcd中的pod , node , server等相关api对象 , 比如一个刚刚创建出来的node ,...
让pod绑定在cpu上 , 可以大大减少上下文切换的次数 ,容器性能可以得到大幅提升 , 那该如何设置呢
设置的方法很简单
前置条件:
pod必须是Guaranteed类型的Qos
pod的CPU资源设置 , requests和limits必须相同
例子:
1234567891011spec: containers: - name: nginx image: nginx resources: limits: memory: "200Mi" cpu: "2" requests: memory: "200Mi"...
当Eviction阈值达到的时候 , 会进入MemoryPressure或者DiskPressure状态 , 从而避免新pod调度上来
发生的时候, 删除的pod的顺序是:
属于BestEffort类别的pod
Burstable类型的 , 并且超过requests量的pod
Guaranteed类型的 , 并且当pod超过limits设置的值 , 或者触发了MemoryPressure或者DiskPressure状态的pod
kubelet为volume创建的目录是在宿主机的如下路径
1/var/lib/kubelet/pods/<Pod 的 ID>/volumes/kubernetes.io~<Volume 类型 >/<Volume 名字 >
Installing Calico for policy and flannel for networkingIf your cluster has RBAC enabled, issue the following command to configure the roles and bindings that Calico requires.
12kubectl apply -f \https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
Iss...
自定义控制器的工作流程
通过Informer , 从 Kubernetes 的 APIServer 里获取它所关心的对象 , Informer 与 API 对象是一一对应的 , 我们下面的例子的informer就是 Network 对象的 Informer(Network Informer)
而informer通过这个对象资源对象的client的对象来传递参数, 并和APIServer维持连接 , 使用的是一个叫Reflector 包 , client通过ListAndWatch 的方法来”获取”和”监听”要获取对象的变化
在 ListAndWatch 机制下,一旦 APIServer ...
在kubernetes中 , 当一个 Pod 或者任何一个 API 对象被提交给 APISServer 之后,总有一些“初始化”性质的工作需要在它们被处理 , 比如为所有pod加上某些标签 , 在实际中的应用的话, 可以体现在以下方面
为即将创建的每个或者某些特定的pod都自动插入一个SideCar容器
为即将创建的每个或者某些特定的pod都自动添加一些环境变量或者设置
检测secret长度 , 如果不满足就拒绝
Initializers的工作原理和使用方法将一个编写好的 Initializer,作为一个 Pod 部署在kubernetes中, 可以用pod或者deployment部...
一个yaml文件提交之后 , 会交到apiserver那里 , apiserver的handler会更加根据资源定义来找到要创建的类型定义
在创建这个类型的对象的过程中 , APIServer会进行一个Convert工作, 即把用户提交的一个yaml文件转换成一个Super Version的对象 , 它是该API资源类型所有版本的字段全集 , 接下来APIServer会进行Admission()和Validation()操作
Admission操作包括Admission Controller和Initializer
Validation操作是要验证这个API字段是否合法 , 如果在A...