每种探针都支持以下三种探测方式: exec:通过执行命令来检查服务是否正常,针对复杂检测或无HTTP接口的服务,命令返回值为0则表示容器健康; httpGet:通过发送http请求检查服务是否正常,返回...emptyDir: medium: HugePages 注意事项: HugePage 资源的请求和限制必须相同; HugePage 以 Pod 级别隔离,未来可能会支持容器级的隔离...详解 - 快乐嘉年华 - 博客园 Kubernetes中pod详解_人间不值得-的博客-CSDN博客 Pod详解_我的紫霞辣辣的博客-CSDN博客_pod方法 k8s之pod与Pod控制器 - woaiyitiaochai...- 博客园 kubernetes 实践四:Pod详解 - xingyys - 博客园 Pod · Kubernetes指南 K8S实战基础知识之POD - 知乎 K8S Pod详解_ldd儆儆的博客-...CSDN博客_k8s pod k8s之pod详解_爱show的小卤蛋的博客-CSDN博客_k8s pod What is Pod?
,目前Linux常用的HugePage大小为2M和1GB。...Linux的HugePage Linux是如何查看大页的配置?...中的大页使用 那么k8s里的大页是如何计算使用的呢?...Pod使用大页,就在pod的配置中直接写入使用的大页页大小和总量即可: # 可以左右滑动 apiVersion: v1 kind: Pod metadata: name: example spec:...以上就是我自己关于大页的来源和在openstack以及k8s中的使用的小总结,有些地方可能理解的比较片面,对于运维来说应该是够用了,但是对于开发来说可能需要更深入的挖掘。
#include int munmap(void *addr, size_t len); mumap:该调用在进程地址空间中解除一个映射关系,addr是调用mmap()时返回的地址...because we are not locking * memory so no accounting is necessary */ //在hugetlbfs文件系统中创建文件“anon_hugepage...len) return -ENOMEM; /* offset overflow?...can_do_mlock()) return -EPERM; if (mlock_future_check(mm, vm_flags, len)) return -EAGAIN; //...实例 else if (flags & MAP_HUGETLB) {//如果是匿名巨型页映射 hugetlb_file_setup//在hugetlbfs文件系统中创建文件“anon_hugepage
所谓透明巨页,无非就是应用程序在运行的时候,神不知鬼不觉地偷偷地就使用到了Hugepage的功能,这个过程对用户是透明的。...程序执行的时候会返回错误,打印如下: $ ./a.out Hugetlb: Cannot allocate memory 原因很简单,因为现在系统里面2MB的巨页数量和free的数量都是0: ?...所以,透明巨页在实际的工程中,又引入了一个半透明的因子,就是内核可以只针对用户通过madvise()暗示了需要巨页的区间进行透明巨页分配,暗示的时候使用的参数是MADV_HUGEPAGE: ?...madvise >/sys/kernel/mm/transparent_hugepage/defrag 或者干脆把透明巨页的功能关闭掉: echo never >/sys/kernel/mm/transparent_hugepage.../enabled echo never >/sys/kernel/mm/transparent_hugepage/defrag 如果我们只对madvise的区域采用透明巨页,则用户的代码可以这么写: ?
k8s集群角色分配 部署k8s集群的节点按照用途可以划分为如下2类角色: master:集群的master节点,集群的初始化节点,基础配置不低于2C4G slave:集群的worker节点,可以多台,...基础配置不低于2C4G 安装指定版本k8s 可变参数 # 指定 Kubernetes 版本; 参考https://github.com/kubernetes/kubernetes/releases kubernetes_version..."vm.max_map_count=262144" >>$sysctl_file sysctl -p $sysctl_file } # 禁用透明大页 disable_transparent_hugepage.../enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag'" >>$thp_file echo "" >>$thp_file...kube/config # 查询集群信息 kubectl get cs kubectl get node Worker 节点 bash k8s.sh #woker节点执行;加入到k8s
) error = -EAGAIN; goto out; } break; case MADV_HUGEPAGE...: case MADV_NOHUGEPAGE: error = hugepage_madvise(vma, &new_flags, behavior); if (...mm_slot) return -ENOMEM; /* Check ksm_run too?...out; // 跳过这个 page 转而去处理其他 page if (PageTransCompound(page)) { // 如果 page 是透明大页,返回...PageMlocked(kpage)) { unlock_page(page); lock_page(kpage); mlock_vma_page
能不能VM也当成K8s的一个“工作负载”?...一句话讲明白不绕弯子,直接人话版定义:KubeVirt=在Kubernetes里,把虚拟机当成Pod来管。注意,是“管”,不是把VM变成容器。...:name:legacy-vmspec:running:truetemplate:spec:domain:resources:requests:memory:8Gicpu:4VM和Pod进了同一个调度池...我画个“脑补版”的结构(你肯定见过):同一个K8s集群里Deployment(新服务)StatefulSet(数据库)VirtualMachine(老系统)网络:Pod用CNIVM通过Multus接同一张二层网存储...1️⃣性能≠裸VM多了一层抽象I/O敏感场景要谨慎NUMA、HugePage要认真调适合“能跑就行”的老系统,不适合极致性能场景。
如果无法分配内存,该函数将返回指向已分配内存的指针或 NULL 指针。...---- mmap和mlock操作物理内存 如果要分配物理内存,请使用 mmap()(带选项的 malloc)分配地址空间,并使用 mlock() 将物理页连接到进程中的地址。...如果没有足够的物理内存来满足您的请求,mlock() 将失败。 ---- 嵌入式为什么不执行malloc 这就是为什么某些嵌入式系统不执行 malloc 的原因。...或者使用 mmap & mlock 来验证分配是否成功,但该进程仍然可以随时因任何原因被 OOM 杀死。 在 macOS 上也是如此。...当复制COW 页面确实发生并且现在系统内存不足时,返回 ENOMEM 呢。内存写入不返回错误代码。OOM killer发送一个信号。 这就是为什么您要确保有足够的Swap分区来应对最坏的情况。
get_unmapped_area(NULL, addr, len, 0, MAP_FIXED); if (error & ~PAGE_MASK) return error; error = mlock_future_check...may_expand_vm(mm, len >> PAGE_SHIFT)) return -ENOMEM; if (mm->map_count > sysctl_max_map_count)...return -ENOMEM; if (security_vm_enough_memory_mm(mm, len >> PAGE_SHIFT)) return -ENOMEM; /* Can...第12行代码,get_unmapped_area()函数用来判断虚拟内存空间是否有足够的空间,返回一段没有映射过的空间的起始地址,这个函数会调用到具体的体系结构中实现。...返回0表示查找最合适插入的节点,返回-ENOMEM表示和现有的VMA重叠,这时会调用do_munmap()函数来释放这段重叠的空间。
4 14:41 conf drwxrwxrwx 2 root root 6 1月 4 14:46 data -rwxrwxrwx 1 root root 1558 1月 4 14:48 pod.yml...redis.conf [root@master conf]# cat redis.conf port 6379 timeout 3000 tcp-keepalive 0 databases 99 pod.yml.../bin/bash", "-c", "echo 511 > /proc/sys/net/core/somaxconn; echo never > /sys/kernel/mm/transparent_hugepage...10.110.14.232 6379:30379/TCP 10m 此时用RedisDesk工具连接集群任意节点ip:30379验证即可 # 5.记录报错处理 这里注意由于k8s...随机分配pod在任意node,应在每个node上都创建data/conf目录 比如这里查看pod创建报错信息发现此pod被分配到了node1,但是之前我只在master上创建了data/conf目录 点击查看
Redis On K8s 优势很多: 1、可以通过运维平台对接k8s api,可以提高部署效率 2、扩缩容方便 3、迁移成本低,直连代理即可,和之前使用redis单机一样的配置 为什么这里没有采用小米的...redis on k8s方案?...如果引入predixy on k8s类的专业代理组件,需要投入的人力成本过大(predixy 在非k8s环境下之前也用过,偶发bug,目前我们团队也没有对其二开或bugfix的能力) 参考: https...-xc - |- sysctl -w net.core.somaxconn=10000 echo never > /sys/kernel/mm/transparent_hugepage...(k8s default is 30s) ## https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination-forced
顺带提一嗓子laf这个写代码像写博客一样简单的函数计算平台,写完代码,点击发布,关机走人,什么docker 什么k8s 什么CI/CD 我一个写业务的关心这些干嘛~ Laf是一个被业务逼出来的框架,让前端秒变全栈...pod hello-local-hostpath-pod-4 -oyaml|grep claimName claimName: local-hostpath-pvc-4 获取 pv nodename...instructions below: MongoDB® nodes domain: you can reach MongoDB® nodes on any of the K8s...dochub.mongodb.org/core/prodnotes-filesystem 2022-03-29T08:18:28.460+00:00: /sys/kernel/mm/transparent_hugepage...We suggest setting it to 'never' 2022-03-29T08:18:28.460+00:00: /sys/kernel/mm/transparent_hugepage
mlock系统调用的作用:mlock系统调用允许程序在物理内存上锁住它的部分或全部地址空间,这将阻止Linux将这个内存页调度到交换空间(即阻止系统将某个页面换出到交换分区),即使该程序已有一段时间没有访问这段空间...LogManager.getLogger(JNACLibrary.class); public static final int MCL_CURRENT = 1; public static final int ENOMEM...调用成功返回后所有映射的分页都保证在 RAM 中: * 直到后来的解锁,这些分页都保证一直在 RAM 内。...getuid():返回实际用户的ID。 * 实际用户:表示一开始执行程序的用户,比如用账号iceup登录shell,然后执行程序ls,那么实际用户就是iceup。...* 例如errno等于12的话,它就会返回”Cannot allocate memory”。
Deployment:管理Pod的“副本集”Deployment是K8s的“应用管理者”,负责创建、更新、重启Pod。...Service:暴露Pod的“负载均衡器”Service是K8s的“服务发现+负载均衡”组件,负责把流量转发到健康的Pod。...比如订单服务的/actuator/health/liveness接口返回200才算活,否则K8s会重启Pod。Readiness Probe:检查Pod是否“准备好接收流量”。...比如启动时需要加载数据,没加载完前readinessProbe失败,K8s不会把Pod加入Service的负载均衡,避免用户访问到未就绪的Pod。4....测试访问:用浏览器或curl访问http://order.example.com/health,应该返回Spring Boot的健康状态(比如{"status":"UP"})。
创建pod过程:kubectl --> deployment --> replicaset --> pod 当k8s把pod调度到节点上,节点上的kubelet会指示docker启动容器。...deployment相对于rc的最大优点是随时知道当前pod"部署"的进度。 controller k8s不会直接创建pod,而是通过controller来管理pod。...如果解析headless service的dns域名,则返回的是该service对应的全部pod的endpoint列表。 namespace 用于实现多租户的资源隔离。...如果进程退出时返回码非零,则认为容器发生故障,然后根据restartPolicy重启容器。 liveness探测,判断是否重启容器。...k8s集群监控 weave scope是docker和k8s可视化监控工具。 heapster是k8s原生的集群监控方案。以pod的形式运行。
kubernetes 通讯浅谈 我们在日常工作中,能遇见的情况只有下面三种,k8s集群内部之间的相互连接,k8s集群内部访问k8s集群外部的服务,还有就是k8s集群外部服务访问k8s集群内部的访问。...下面我们来讲解下他们都是如何实现的,我们将使用分步的方式来讲解 kubernetes集群内部的通讯 当k8s里面只有两个POD之间的通信是最为简单的 ?...POD A上,需要注意的是:当这个时候如果 A服务还是扛不住压力,那我们就只需要多启动几个Pod A就行了,启动的新的Pod之后,svc还是会根据matchLables把它自动添加到负载里面去 我们k8s...其实这个时候 k8s集群内部的通讯就大致讲清楚了,但是这个里面有个及其特殊的svc:headless svc,这个svc当别的客户端来请求他的时候,他不会去负载的向下面pod去做请求,而是把下面POD的所有...IP返回给客户端,由客户端自己来决定链接那个POD。
kubernetes的Group、Version、Resource等概念Group:资源组,k8s种分两种,有组名资源组和无组名资源组,例 :deployment就有组名,pod没有组名Version:...版本,这个比较好理解,在k8s中有三种版本,内部测试版(Alpha),正式发布版(Stable),经过测试的相对稳定版(Beta)Resource:资源,在k8s中很重要的概念,常见的pod、service...----了解了这些知识之后,接下来就可以开始实战了(●ˇ∀ˇ●)使用RESTClient实现对k8s资源进行简易操作:基础步骤:1.确定要操作的资源类型(例如Pod),去官网文档查询对应API的path...= nil {fmt.Println("实例构造失败")panic(err.Error())}//保存pod,这是根据官网对应的返回值得到的返回类型“PodList”result := &corev1....的path,Version,group还有返回的数据结构,编码解码的工具等等,所以就有了ClientSet来帮助我们简化代码,将这些操作封装起来,话不多说,开始实战!
如果备选Pod和节点中已存在Pod的所有容器的需求资源(内存和CPU)的总和,超出了备选节点拥有的资源,则返回false,表明备选节点不适合备选Pod,否则返回true,表明备选节点适合备选Pod。...否则,获得备选节点的标签信息,判断节点是否包含备选Pod的标签选择器(spec.nodeSelector)所指定的标签,如果包含,则返回true,否则返回false。...4)PodFitsHost 判断备选Pod的spec.nodeName域所指定的节点名称和备选节点的名称是否一致,如果一致,则返回true,否则返回false。...该策略用于判断备选节点是否包含策略指定的标签,或包含和备选Pod在相同Service和Namespace下的Pod所在节点的标签列表。如果存在,则返回true,否则返回false。...7)PodFitsPorts 判断备选Pod所用的端口列表中的端口是否在备选节点中已被占用,如果被占用,则返回false,否则返回true。
在学习k8s工作流程之前,我们得再次认识一下上篇k8s架构与组件详解中提到的kube-controller-manager一个k8s中许多控制器的进程的集合。...通过这种方式,Informer 既可以更快地返回结果,又能减少对 Kubernetes API 的直接调用。...关于k8s中 informer详细可参考:kubenetes informer 详解 通过上面我们知道了控制器是通过watch api监听apiserver中资源对象的更新,下面我们进入正题:k8s工作流程...---- 二、k8s工作流程 我们来看通过deployment部署pod的常规流程: image-20210914114226232 kubectl向apiserver发送部署请求(例如使用 kubectl...接着scheduler调度器看到未调度的pod对象,根据调度规则选择一个可调度的节点,加载到pod描述中nodeName字段,并将pod对象返回apiserver并写入etcd。
K8S自然帮我们考虑到了这个问题,健康检查是K8S的重要特性之一,默认有健康检查机制,此外还可以主动设置一些自定义的健康检查。 ...如果进程退出时的返回码不为0,则认为容器发生了故障,K8S会根据重启策略(restartPolicy)重启容器。 ...但是,也要正视一个问题:必须等到进程退出后的返回值是非零才会触发重启策略,不能直接监测容器是否是健康。 那么,K8S中有没有更好的机制能够实现智能一点的健康检查呢?...[npdeu4frck.png] 2.2 Liveness探针 上面的例子使用的是Liveness的exec探针,此外K8S还有几种其他类型的探针: exec:在容器中执行一个命令,如果命令退出码返回...4.2 在Rolling Update中的应用 假设现在有一个正常运行的多副本应用,我们要对其进行滚动更新即Rolling Update,K8S会逐步用新Pod替换旧Pod,结果就有可能发生这样的一个场景