- How to implement resource reclamation in Kubernetes VPA 如何使用 Kubernetes VPA 实现资源动态扩展和回收简述最近一段时间在研究和设计集群资源混合部署方案,以提高资源使用率。这其中一个重要的功能是资源动态扩展和回收。虽然方案是针对通用型集群管理软件,但由于 Kubernetes 目前是事实标准,所以先使用它来检验理论成果。资源动态扩展资源动态扩展按照类型分为两种:纵向和横向。纵向指的是对资源的配置进行扩展,比如增加或减少 CPU 个数和内存大小等。横向扩展则是增加资源的数量,比如服务器个数。笔者研究方案的目的是为了提升集群资源使用率,所以这里单讨论资源纵向扩展。
- Introduction for KataContainers AWS Firecracker 和 KataContainers 初探(二)KataContainers照例先贴官网简介: Kata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs.
- Introduction for AWS Firecracker AWS Firecracker 和 KataContainer 初探(一)AWS Firecracker首先贴两段官网对 Firecracker 的定义: Firecracker is an open source virtualization technology that is purpose-built for creating and managing secure, multi-tenant container and function-based services that provide serverless operational models. Firecracker runs workloads in lightweight virtual machines, called microVMs, which combine the security and isolation properties provided by hardware virtualization technology with the speed and flexibility of containers.
- Approach to Kubernetes Resource Sharing 最近在上海参加 Kubecon,通过交流和 session 使我对资源共享和混部有了些新的想法。先零散的记录下来,后续再整理成可行的方案和方法论。
- Thinking about Google Borg Google Borg 的一点思考我最近正在研究和设计公司内部的任务调度和管理系统,所以看了些相关的技术文档和论文,包括 Google Borg、Kubernetes、Firmament 和 Kubernetes Poseidon 等。尤其是这篇《Large-scale cluster management at Google with Borg》令我受益匪浅。下面我就个人对这篇文章的理解,结合实际生产遇到的问题,尝试做些分析与延展。
- Golang Memory Management Part I: Introduce Memory Golang 内存模型原理浅析:(一)内存简介何为内存?先看维基百科的定义: 随机存取存储器(英语:Random Access Memory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。[1]它可以随时读写(刷新时除外,见下文),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
- Simple Analysis of Go Channel Go Channels 原理浅析Go channels 是 Go 共享数据的首要方式。传统的线程模型,比如在 Java、C++ 或者 Python 中,线程间通信一般是通过共享内存。通常共享数据结构会受锁的保护,线程通过争抢锁来访问数据。但是 Go 提供了一种优雅而独特的方式 channel 来解决线程间的通信问题。
- Linux I/O Models and GO Network Model Part II: Go Netpoller Linux 的 I/O 模型以及 Go 的网络模型实现第二部分:Go netpoller 实现原理分析在 Go 中,所有的 I/O 都是阻塞的。Go 建议用户实现阻塞的 I/O 接口,并通过使用 goroutines 和 channel 实现并发。比如在 net/http 中的 HTTP server,每接受一个 connection,都会启动一个goroutines:
- Linux I/O Models and GO Network Model Part I: Linux I/O Models Linux 的 I/O 模型以及 Go 的网络模型实现第一部分:Linux 的 I/O 模型在 Linux 中有五种基本的 I/O 模型,它们分别是:
- How to View Network Namespace in Docker How to View Network Namespaces in DockerWhen we start a container in Docker:
- A Practice Of Spark On Kubernetes Spark On Kubernetes实践前言众所周知,Spark是一个快速、通用的大规模数据处理平台,和Hadoop的MapReduce计算框架类似。但是相对于MapReduce,Spark凭借其可伸缩、基于内存计算等特点,以及可以直接读写Hadoop上任何格式数据的优势,使批处理更加高效,并有更低的延迟。实际上,Spark已经成为轻量级大数据快速处理的统一平台。
- Microservices Architecture Introduction 微服务架构初探什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。
- A Way Of Kubernetes On Cloud Kubernetes简介众所周知,Kubernetes是一款面向容器化应用管理的开源平台,支持自动部署和扩展。它的核心设计理念是容器化应用,并将其分组为逻辑单元,以便管理和发现。
- Review of AWS re:invent 11月27日,我有幸参加了AWS re:invent大会。以下是我关注的一些AWS服务及个人看法,供参考。Amazon EKSAmazon Elastic Container Service for Kubernetes (Amazon EKS) 是一项托管服务,借助该服务,您可以轻松在 AWS 上运行 Kubernetes,而无需安装和操作您自己的 Kubernetes 群集。借助 Amazon EKS, AWS 可以为您管理升级和高可用性。Amazon EKS 可在三个可用区中运行三个 Kubernetes 主节点,从而确保了高可用性。Amazon EKS 可以自动检测和替换运行状况不佳的主节点,并对主节点进行自动版本升级和修补。
- Apache Spark on AWS Lambda Apache Spark on AWS Lambda最近在研究如何在AWS上构建Spark计算平台,它需要具有以下功能:
- Hadoop/Spark on S3 Amazon S3是Amazon公司提供的对象存储服务,可从任意位置存储和检索任意数量的数据。Amazon S3是目前最受欢迎的存储平台。
- Leetcode-110 Balanced Binary Tree Given a binary tree, determine if it is height-balanced.
- Leetcode-200 Number of Islands Given a 2d grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
- Leetcode-212 Word Search II Given a 2D board and a list of words from the dictionary, find all words in the board.
- Leetcode-79 Word Search Given a 2D board and a word, find if the word exists in the grid.
- Leetcode-567 Permutation in String 今天在刷Leetcode算法题时,遇到一道求字符排列的问题:
- 十张机器学习和深度学习的速查表 1.Keras
- 决策树的原理及Python实现(一)ID3篇 决策树的简介决策树是通过一系列规则对数据进行分类的过程。
- It's the Manageability Stupid 这篇文章It’s the Manageability Stupid中有个很好的观点:不要因为一些名牌公司采用或者宣称采用以上的开源技术(OpenStack、Docker、Mesos、Kubernetes),就盲目选择它们。除非你已经用了大量的时间做准备,并且计划开发大量的软件去管理它们。
- Python中的字符编码 最早在Python中只支持ASCII编码,普通的字符串'A'在Python内部都是ASCII编码:
- 尾递归 尾递归指的是在一个函数的尾位置调用其本身。从形式上来说,只要函数最后的return语句返回的是函数本身,那么它就是一个尾递归。 以下是阶乘的尾递归实现:
- 创建自定义initramfs 在Linux的启动文件中,除了名为vmlinuz的kernel内核外,还有一个名为initramfs的文件。initramfs是基于内存filesystem,实际它就是一个通过gz压缩的cpio归档文件:
- OpenStack创建虚拟机流程简述02 在经过nova-scheduler的过滤和排序后,请求会发送到相应host的nova-compute中,调用nova.compute.manager.ComputeManager.run_instance():
- git报错insufficient permission for adding an object to repository database .git/objects 今天在使用git commit时,发生如下情况:
- OpenStack创建虚拟机流程简述01 在OpenStack中,大部分操作是围绕虚拟机展开的。而在虚拟机中,最核心的操作恐怕非创建虚拟机莫属。下面,我就简单分析下OpenStack中创建虚拟机的流程。首先,根据前面几篇文章可知,nova(其他OpenStack组件均如此)对外暴露的功能是通过HTTP RESTful api来实现的。用户在dashboard中触发了一个创建虚拟机的请求,这个请求最终会由openstack-nova-api接收,根据路由规则,会映射到nova/api/openstack/compute/servers.py中Controller的create():
- nova-api建立流程02 Compute app启动在api-paste.ini中有:
- nova-api建立流程01 最近在面试的时候,被问到/etc/nova/api-paste.ini的用途。当时也是一知半解,只知道可能是nova-api启动时的配置文件。回来后仔细看了一下,才发现不是这么简单。
- 哈希算法及python字典的实现 哈希表定义根据维基百科定义,散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。一个简单的例子就是,查字典时的过程,字典的索引(可能是笔画或者拼音)就是key,后面对应的页码就是根据哈希函数得出的你所查字的真实地址。
- 使用libvirt创建虚拟机并使用bridge #使用libvirt创建虚拟机并使用bridge最近在研究Opentack nova和neutron的同时,想深入了解下instace的实际创建流程。因为是使用libvirt作为driver,所以准备先熟悉下libvirt创建虚拟机的流程。我的内核版本如下:
- Could not open a connection to you authentication agent #运行ssh-add,出现错误”Could not open a connection to your authentication agent” ssh-agent bash ssh-add
- openstack icehouse new future OpenStack Compute(Nova)
- nova compute创建虚拟机分配network nova-compute创建虚拟机分配network过程在/nova/compute/manager.py中:
- LibvirtDriver创建connection LibvirtDriver创建connection##
- LibvirtDriver事件注册、监听 LibvirtDriver注册事件在nova/virt/libvirt/driver.py的_get_new_connection()中有: