集群部署1:理解kubeadm todo 一、容器化Kubernetes的难点在哪? 我们知道,Kubernetes的每一个组件都是一个需要被执行的、单独的二进制文件。像Ansible这样的运维工具或者由社区维护的部署脚本,就是把这些二进制文件传输到指定的机器当中,然后编写控制脚本来启停这些组件。 在学习了容器技术之后,我们可能会萌生这样的想法:是否使用容器部署Kubernetes?这样,我们只要为每个组件做一个容器镜像,然后在 2020-12-14 容器 #Kubernetes、kubeadm
一个简单API Server框架 在前面的文章中,我们讨论REST相关的概念,以及REST在OpenResty中的应用。接下来,我们尝试使用OpenResty中搭建一个简单的API Server。 一、需求 实现一个能计算加减乘除的数学计算器 二、实现 我们先来看看一个最简陋的实现版本: 123456789101112131415161718192021222324252627282930313233343536373839404 2020-12-09 OpenResty #API Server框架
API的设计 OpenResty最擅长的应用场景之一就是API Server。一提到API Server我们的脑海里一定会冒出许多与REST相关的概念,下面我们来看看在OpenResty中如何实现REST风格的API Server。 一、为什么要使用REST 首先,我们先来看看不采用REST的API Server长什么样,如下示例: 123456789101112131415161718192021222324 2020-12-09 OpenResty #Web服务、REST
限流该怎么做 限流的核心在于:能“限”在被限制对象的能力上限附近。简单来说就是,设定的阈值要接近被限制对象的能力。一方面,如果阈值过高,限流形同虚设,达不到相应的效果;另一方面,如果阈值过低,频繁触发干预,就会造成误伤。最终都会导致很差的用户体验。因此: 首先,要明确限流对象 然后,要获得被限制对象的能力上限 其次,要制定干预流量的策略 最后,就是限流方案的选择与实现 一、确定限流对象 大体 2020-12-06 系统容量 #限流
浅谈常用限流策略 在实际的应用场景中,常用的限流策略可以概括为一个词:两窗两桶。其中,两窗是指固定窗口和滑动窗口;两桶是指漏桶和令牌桶。 一、固定窗口 固定窗口,是指设定一个固定的统计周期(比如,30秒或1分钟),然后通过累加计数器对每个周期内的流量进行统计。在一个周期内,如果流量达到了设定的阈值,就进行流量干预,直到进入下一个统计周期,计数器清零,流量接收恢复正常。该策略可以用如下示意图来理解: 二、滑动窗口 2020-12-06 系统容量 #限流策略
作业调度5:GPU管理与Device Plugin机制 todo 一、从人工智能说起 2016 年,随着 AlphaGo 的走红和 TensorFlow 项目的异军突起,一场名为 AI 的技术革命迅速从学术界蔓延到了工业界,所谓的 AI 元年,就此拉开帷幕。 当然,机器学习或者说人工智能,并不是什么新鲜的概念。而这次热潮的背后,云计算服务的普及与成熟,以及算力的巨大提升,其实正是将人工智能从象牙塔带到工业界的一个重要推手。 而与之相对应的,从 2016 2020-10-13 容器 #Kubernetes
作业调度4:Kubernetes默认调度器的优先级与抢占机制 在前面的文章中,我们讨论了Kubernetes默认调度器的主要调度算法的工作原理。接下来,我们来看一下Kubernetes默认调度器的另一个重要机制:优先级(Priority)和抢占机制(Preemption)。 一、从Pod调度失败说起 首先需要明确的是,优先级和抢占机制,解决的是 Pod 调度失败时该怎么办的问题。 正常情况下,当一个 Pod 调度失败后,它就会被暂时“搁置”起来,直到 Pod 2020-10-13 容器 #Kubernetes
作业调度3:Kubernetes默认调度器的调度策略 在前面的文章中,我们讨论了Kubernete默认调度器的设计以及走向。接下来,我们重点讨论Predicates和Priorities这两个重要的调度过程。 一、理解Predicates的工作原理 首先,我们一起看看 Predicates。 Predicates 在调度过程中的作用,可以理解为 Filter,即:它按照调度策略,从当前集群的所有节点中,“过滤”出一系列符合条件的节点。这些节点,都是可 2020-10-13 容器 #Kubernetes
作业调度2:Kubernetes的默认调度器 在前面的文章中,我们主要讨论了 Kubernetes 里关于资源模型的设计。接下来,我们来讨论一下 Kubernetes 的默认调度器(default scheduler)。 一、默认调度器的设计 1.1、从默认调度器的职责说起 在 Kubernetes 项目中,默认调度器的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。而这里“最合适”的含义,包括两层: 从集群所有 2020-10-13 容器 #作业调度
作业调度1:Kubernetes的资源模型 作为一个编排与管理容器集群的项目,Kubernetes 为用户提供的基础设施能力,不仅包括了对应用的定义和描述,还包括了对应用的资源管理和调度。接下来,我们重点讨论后面这部分内容。 一、从Kubernetes的资源模型说起 1.1、两种资源类型 我们知道,在 Kubernetes 里,Pod 是最小的原子调度单位。这也就意味着,所有跟调度和资源管理相关的属性都应该属于 Pod 对象的字段。而这其中 2020-10-13 容器 #作业调度