cgroup相关 subsystem 一个subsystem就是一个内核模块,他被关联到一颗cgroup树之后,就会在树的每个节点(进程组)上做具体的操作。subsystem经常被称作"resource controller",因为它主要被用来调度或者限制每个进程组的资源,但是这个说法不完全准确,因为有时我们将进程分组只是为了做一些监控,观察一下他们的状态,比如perf_event subsystem。到目前为...
k8s oom 这段代码就是讲的如何计算每个容器的oom score的。首先看这个容器所属的Pod是属于什么级别的,如果是Guaranteed级别的直接返回-998也是最高级最后被Kill掉的,如果是BestEffort级别则直接返回1000是最低级别的,最有可能被杀掉。如果是Burstable则是中间级别需要按照资源的申请量来计算oom score。oomScoreAdjust := 1000 - (1...
k8s HorizontalPodAutoscaler k8s scale其实就是调用apiserver提供的api接口,然后更新replicationcontroller,然后由rc controler进行控制pod的数量。 HorizontalPodAutoscaler:客户端; 通过kubectl创建一个horizontalPodAutoscaler对象,并存储到etcd中服务端: api server:负责接...
linux父子进程 (1)父进程先退出 当父进程退出,子进程必须找到父进程才能释放掉子进程占用的进程信息,如果父进程先退出,则子进程首先从当前线程组里寻找适合做父进程的进程,不然就让init 1作为父进程。(2)子进程先退出 子进程先退出,需要父进程进行“收尸”,收尸就是父进程调用wait函数,(或者父进程想内核传递不进行收尸信号)。避免生成僵尸进程。...
ISTIO中包含有四种流量管理配置资源 Istio 中包含有四种流量管理配置资源,分别是 VirtualService、DestinationRule、ServiceEntry、以及 Gateway。下面会讲一下这几个资源的一些重点。在网络参考中可以获得更多这方面的信息。 在请求被 VirtualService 路由之后,DestinationRule 配置的一系列策略就生效了。这些策略由服务属主编写,包含断路器、负载均衡以及 ...
kubernets eviction策略 pod eviction当资源使用情况触发了驱逐条件时,kubelet会启动一个任务去轮流停止运行中的pod,直到资源使用状况恢复到阈值以下。以硬驱逐为例,整体流程是:每隔一段时间从cadvisor中获取资源使用情况,发现触发了阈值; 从运行中的pod里找到QoS策略最开放的一个,比如策略为bestEffort的一个pod(即便这个pod没有吃多少内存,大部分内存是另一个策略为burst...
statefulset创建 所有Pod的Volume必须使用PersistentVolume或者是管理员事先创建好 为了保证数据安全,删除StatefulSet时不会删除VolumeStatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现 稳定的网络标志...
kubernetes dns功能 创建dns记录的必要条件,创建出endpoint,无endpoint无dns记录SVC创建dns记录(1)正常的service创建的dns a记录,通过my-svc.my-namespace.svc.cluster.local与clusterip映射(2)headless service创建dns a记录,通过service的域名(如上),返回的是pod与pod domain对应的dn...
kubernetes service headless service:使用场景:(1)statefulset中进行pod的网络功能域名的,如创建的pod的名字为web-0,web-1那网络一致性其对应的dns存储就是以web-0,web-1打头(2)进行跨namespace的访问服务(service),只有headless中的pod设置spec.hostname字段的pod才会在dns中单独记录pod的dns值(3)...
golang引号 Golang的双引号和反引号都可用于表示一个常量字符串,不同在于: 双引号用来创建可解析的字符串字面量(支持转义,但不能用来引用多行) 反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式 而单引号则用于表示Golang的一个特殊类型:rune,类似其他语言的byte但又不完全一样,是指:...
kubernetes中跨namespace访问服务 问题的场景: kubernetes中的namespace=A中的Pod需要访问namespace=B中的Pod所提供service=service_B解决办法: 在namespace_A中创建一个service_c, service_c里面不指定selector, 采用type=ExternalName的方式,externalName定义成为指向namespace=B中的service_B...
k8s APIservice 他是通过创建kind:APIservice来创建的;APIserver通过创建APIservice controller来进行监控创建APIservice资源,然后通过注册path转到proxy,proxy通过获取APIservice指定的server,获取其对应endpoint,获取到相应的host。通过将请求发送到对应pod获得返回结果,然后将结果copy到请求的返回结果,完成功能。...
kubelete对pod中容器的探测分为liveness,失败则重启容器;readiness失败则不作为service的后端pod进行服务,等待; 本文将向展示如何配置容器的存活和可读性探针。Kubelet使用liveness probe(存活探针)来确定何时重启容器。例如,当应用程序处于运行状态但无法做进一步操作,liveness探针将捕获到deadlock,重启处于该状态下的容器,使应用程序在存在bug的情况下依然能够继续运行下去(谁的程序还没几个bug呢)。Kubelet使用readiness probe(就绪探针)来确定容器是...
通过nsenter进入容器命令 $ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。$ sudo nsenter --target 3326 --mount --uts --ipc --net --pid如果想用tcpdump,一般docker没有bash所以:由于DNS容器往往不具备ba...
k8s volumn与配置管理 1pod定义详解下面是一个完整的yaml格式定义的文件,注意格式,子集包含关系,不要有tab,要用空格。不是所有的元素都要写,按照实际应用场景配置即可。apiVersion: v1 //版本kind: pod //类型,podmetadata: //元数据 name: String ...
Docker数据卷 转载自简书 Docker数据卷 岦_ 关注2015.11.11 17:52* 字数 385 阅读 5322评论 2喜欢 5Docker数据管理和网络基础默认情况下,当用户退出容器而容器中又没有非守护进程在运行时,容器会进入关闭状态,同时,数据的修改会保留在层级的可写文件系统内。当用户需要重新开启一个容器时,是无法访问原来所做的修改的,而是恢复到镜像的初始化状态。为了解决数据持久化的问题,Doc...
docker privileged privileged参数$ docker help run ...--privileged=false Give extended privileges to this container...大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普...
k8s认证 RBAC可以设置subject:user,group和serviceaccount.user不是k8s管理的,可以通过具体的服务进行管理。对应k8s中就是secret。serviceaccount是通过k8s管理的。就是每个pod访问api server的权限。 api启动参数分为--client的各种crt,key kubelete各种证书,tls(api srever自己用于客...
k8sproxy原理 pod 访问service服务这里涉及到k8s里面一个重要的概念service。它是一个服务的抽象,通过label(k8s会根据service和pod直接的关系创建endpoint,可以通过kubectl get ep查看)关联到后端的pod容器。Service分配的ip叫cluster ip是一个虚拟ip(相对固定,除非删除service),这个ip只能在k8s集群内部使用,如果serv...