k8s简介

在学习k8s之前,相信大家和我一样,肯定都学习和使用过docker容器,并且对容器技术有了一个基本的认识。引用张磊老师的总结:其实一个“容器”,实际上是一个由Linux NameSpace、linux Cgroups和rootfs三种技术构建出来的进程隔离环境。

而k8s又是什么呢,官方给出的定义是:k8s是一个开源的容器集群管理系系统,可以实现容器集群的自动化部署、自动化扩容和维护等功能。说白了,我们是用k8s是为了管理docker集群,即docker可以看成k8s内部使用的低级别组件。但是k8s不仅仅支持docker,我们在

后面学习k8s的架构时候可以看到。

和很多其他组件先有工程实践,后有方法论的法杖路径不同。k8s的理论基础则比工程实践走的领先很多,这主要是得益于谷歌内部的Borg系统。k8s项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。

在这面我们要先记住一个概念,Pod。它是k8s中的最小编排单位,而不是容器。因此后面的架构设计等内容都是围绕pod进行。

k8s的架构设计

k8s项目和它的原型项目Borg很类似,都是由Master和Node两种类型的节点组成,其主要架构如下:

其中,Master节点由如下三个组件组成:

  • apiServer:提供了资源操作的唯一入口,并提供认证、授权,访问控制、API注册和发现等机制。并且将整个集群的数据处理以后,持久化到etcd当中。

  • controller manager:负责维护集群的状态,比如状态检测、自动扩展和滚动更新等

  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。

而在Node节点上,主要有以下一些核心组件:

  • kubelet:其是最核心的组件,主要负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理。

  • Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)。

  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡。

k8s的设计理念

对于云计算系统,系统API实际上处于系统设计的主导地位。在k8s中,系统没支持一项新功能,引入一项新技术,一定会引入对应的API对象,支持对该功能的管理操作。

每个API对象都有以下三个属性:

  • 元数据(metadata):元数据是用来标识API对象的,每个对象至少有3个元数据,namespace,name和uid

  • 规范(spec):规范描述了用户期望k8s急群众的分布式系统达到的理想状态,例如用户可以设置期望的Pod的副本数为3

  • 状态(status):状态描述了系统当前实际达到的状态。

k8s学习的更多相关文章

  1. ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

    当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定 ...

  2. ASP.NET Core on K8S学习初探(3)部署API到K8S

    在上一篇<基本概念快速一览>中,我们把基本的一些概念快速地简单地不求甚解地过了一下,本篇开始我们会将ASP.NET Core WebAPI部署到K8S,从而结束初探的旅程. Section ...

  3. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览

    在上一篇<单节点环境搭建>中,通过Docker for Windows在Windows开发机中搭建了一个单节点的K8S环境,接下来就是动人心弦的部署ASP.NET Core API到K8S ...

  4. k8s学习 - API

    k8s学习 - API 之前对k8s并没有很深入的了解,最近想把手头一个项目全部放到k8s上,以方便部署,需要研究.这里记录一下自己研究过程中头脑中的理解. k8s 和 docker 首先,需要先理解 ...

  5. k8s学习 - 概念 - master/node

    k8s学习 - 概念 - master/node 在k8s中,有各种各样的概念和术语.这些概念是必须要学习和掌握的.我们先罗列下所有概念,然后再一个个看具体实例. 大概说一下这些概念: Master: ...

  6. k8s学习 - 概念 - Pod

    k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe ...

  7. k8s学习 - 概念 - ReplicationController

    k8s学习 - 概念 - ReplicationController 我们有了 pod,那么就需要对 pod 进行控制,就是同一个服务的 podv我需要启动几个?如果需要扩容了,怎么办?这里就有个控制 ...

  8. k8s学习 - 概念 - ReplicaSet

    k8s学习 - 概念 - ReplicaSet 首先,ReplicaSet 和 ReplicationController 基本上一样,除了上篇说到的selector有不同之外,没有啥区别.(官网也是 ...

  9. k8s学习 - 概念 - Deployment

    k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...

  10. .NET Core on K8S学习实践系列文章索引(Draft版)

    一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...

随机推荐

  1. Python 3.x的编码问题

    Python 3的源码.py文件的默认编码方式为UTF-8(Python 2.x的默认编码格式为unicode). encode的作用,使我们看到的直观的字符转换成计算机内的字节形式. decode刚 ...

  2. 基于linux操作系统安装、使用redis详解

    服务端安装 Redis的官方下载站是http://redis.io/download,可以去上面下载最新的安装程序下来,我写此文章时的的稳定版本是2.6.11. 步骤一: 下载Redis 进入软件安装 ...

  3. sqlserver 汉字转拼音 索引 函数

    IF OBJECT_ID('[fn_GetPinyin]') IS NOT NULL DROP FUNCTION [fn_GetPinyin] GO create function [dbo].[fn ...

  4. vue cli 3 & webpack-merge & webpack 3 & bug

    vue cli 3 & webpack-merge & webpack & bug bug webpack-merge & bug webpack-merge ??? ...

  5. RabbitMQ磁盘警报

    RabbitMQ磁盘警报 当可用磁盘空间低于配置的限制(默认为50MB)时,将触发警报,所有生产者将被阻止.目标是避免填满整个磁盘,这将导致节点上的所有写操作失败,并可能导致RabbitMQ终止.为了 ...

  6. ZooKeeper客户端 zkCli.sh 节点的配额设置

    首先使用 zkCli.sh 连接上ZooKeeper服务器 配额设置命令格式如下: setquota -n|-b val path -n:val设置子节点个数 -b:val设置节点的数据长度 如果我们 ...

  7. [hdu6435]Problem J. CSGO

    题目大意:给定$n$个$A$类元素和$m$个$B$类元素,每类元素有值$S$和$k$个值$x_0,x_1,\dots,x_{k-1}(k\leqslant 5)$. 要求选出一个$A$类元素$a$和$ ...

  8. linux安装图像界面

    http://jingyan.baidu.com/article/624e745957149734e8ba5a0e.html

  9. async-http

    android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/a ...

  10. knockout 表单绑定 要怎么Mapping才好

    问题 之前有了解过knockout,学习过绑定语法,结合帮助文档,做个Demo倒也不成问题,但是部分地方很不爽,不知道是我的用法不对,还是功力不够. 比如说,标签里定义的data-bind属性名,必须 ...