在系统介绍了如何实际部署一个K8S项目后,作为本系列文章的最后一篇,我们一起来看看Kubernetes集群内容总览,再对一些更深层次的功能进行总结。

Kubernetes总览

下图是一个k8s的总览结构内容

可以看到图中提到的这些功能模块中,还有一些是在本文中并没有出现的:

l  ConfigMap

用来存储用户配置文件定义的,通过其内部的Volume投射技术实现,其实也是Volume挂载的一种方式。这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能。在创建容器时,用户可以将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的方式进行配置注入。

l  Secret

Secret 对象类型用来保存敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 将这些信息放在Secret中比放在 Pod 的定义、容器镜像中、相对于ConfigMap说更加安全和灵活。 Secret是标准的k8s资源对象,使用方法和ConfigMap非常类似。同时我们可以对Secret进行访问控制,防止机密数据被访问

l  PV

PVC是Kubernetes中持久化数据卷的实现方式,它是StatefulSet的核心功能,也是Pod持久化的必要手段,Kubernetes通过PV和PVC拆分,从而达到功能点的解耦。

除了文中提到的内容之外, Kubernetes集群的内容也远比我们目前看到的复杂的多,也还有很多内容等待着我们探索。

在这里,我们对这些深层次的功能做一个总结,也是一个对深入学习Kubernetes的梳理。

Kubernetes组件

我们平时做开发的过程中所使用的服务器(即宿主机),在Kubernetes集群中被称为Node节点。

同时在Kubernetes中存在一个或者多个Master节点控制多个宿主机实现集群,整个Kubernetes的核心调度功能基本都在Master节点上。

Kubernetes的主要功能通过五个大组件组成:

  1. kubelet:安装在Node节点上,用以控制Node节点中的容器完成Kubernetes的调度逻辑
  2. ControllerManager:是我们上述所讲的控制器模式的核心管理组件,管理了所有Kubernetes集群中的控制器逻辑
  3. API Server:服务处理集群中的api请求,我们一直写的kubectl,其实就是发送给API Server的请求,请求会在其内部进行处理和转发
  4. Scheduler:负责Kubernetes的服务调度,比如控制器只是控制Pod的编排,最后的调度逻辑是由Scheduler所完成并且发送请求给kubelet执行的
  5. Etcd:这是一个分布式的数据库存储项目,由CoreOS开发,最终被RedHat收购成为Kubernetes的一部分,它里面保存了Kubernetes集群中的所有配置信息,比如所有集群对象的name,IP,secret,configMap等所有数据,其依靠自己的一致性算法可以保证在系统中快速稳定的返回各种配置信息,因此这也是Kubernetes和心中的核心组件

定制化功能

除了各种强大的组件功能之外,Kubernetes也给用户提供了极高的自由度。

为了实现这种高度的自由,Kubernetes给用户提供了三个公开的接口,分别是:

l  CNI(Container Networking Interface,容器网络接口):其定义了Kubernetes集群所有网络的链接方式,整个集群的网络都通过这个接口实现。只要实现了这个接口内所有功能的网络插件,就可以作为Kubernetes集群的网络配置插件,其内部包括宿主机路由表配置、7层网络发现、数据包转发等等都有各式各样的小插件,这些小插件还可以随意配合使用,用户可以按照自己的需求自由定制化这些功能

l  CSI(Container Storage Interface,容器存储接口)定义了集群持久化的一些规范,只要是实现这个接口的存储功能,就可以作为Kubernetes的持久化插件

l  CRI(Container Runtime Interface,容器运行时接口):在Kubernetes的容器运行时,比如默认配置的Docker在这个集群的容器运行时,用户可以自由选择实现了这个接口的其他任意容器项目,比如之前提到过的containerd和rkt

这里讲一个有趣的点:CRI。

Kubernetes的默认容器是Docker,但是由于项目初期的竞争关系,Docker其实并不满足Kubernetes所定义的CRI规范,那怎么办呢?

为了解决这个问题,Kubernetes专门为Docker编写了一个叫DockerShim的组件,即Docker垫片,用来把CRI请求规范,转换成为Docker操作Linux的OCI规范(对,就是第二部分提到的那个OCI基金会的那个规范)。但是这个功能一直是由Kubernetes项目维护的,只要Docker发布了新的功能Kubernetes就要维护这个DockerShim组件。

于是,这个近期的消息——Kubernetes将在明年的版本v1.20中删除删除DockerShim组件,意味着从明年的新版本开始,Kubernetes将全面不支持Docker容器的更新了。

但其实这对我们普通开发者来说可能并没有什么影响,最坏的结果就是我们的镜像需要从Docker换成其他Kubernetes支持的容器镜像。

不过根据这这段时间各个云平台放出的消息来看,这些平台都会提供对应的转换措施,比如我们还是提供Docker镜像,平台在发布运维的时候会把这些镜像转换成其他镜像;又或者这些平台会自行维护一个DockerShim来支持Docker,都是有解决方案的。

架构总览与总结

这一部分我们来看看Kubernetes的架构图:

通过这一系列的学习,作为一个普通程序员,不得不赞叹Google对编码这件事得深厚与极致,框架中因为太多仅因为解耦而产生的组件,并且还提供了这么大的自由度,不得不说是我们活字格开发团队学习过程中遇到的一个很有技术深度的框架。

但这种过高的自由度也有负面作用。

在部署过程中,Kubernetes集群的复杂度非常高,部署一个满足生产环境需求的Kubernetes框架更是难上加难,网上还有专门卖Kubernetes生产环境集群部署的脚本程序,可见Kubernetes系统的庞大。

在学习的过程中可以使用kinD或者minikube在本地以Docker的形式模拟一个Kubernetes集群,但是这种程度的学习距离生产环境还是有一定的差距。

总结

这个系列文章,详细的描述了我们活字格开发团队上天过程中碰到的几个难啃的神仙。

从云平台的发展到k8s的具体使用,一步一步抽丝剥茧地向大家解释了一个云平台,从最初的虚拟机,到PaaS雏形,到Docker容器化,再到最终Kubernetes的形态的过度和演变。

人的记忆是需要依赖于前驱节点的,仅仅通过一篇文章就想把Kubernetes中涉及的那些技术点和各种难记的名词一一解释清楚显然是不可能的,我们的想法是让大家通过一步一步了解整个云生态的演化过程,从而最终理解整个项目。

最后想送给大家一句话:

纸上得来终觉浅,绝知此事要躬行。

在我们开发组成员第一遍看完这些文档之后觉得自己已经完全掌握了,但是在实际的文档撰写过程中,才发现自己两眼一抹黑,不知道从何开始。

太多的知识点只停留在听说过,仅仅知道是什么的阶段。在这里还是建议大家动起手来,试试文中提到的实例,我们相信在自己动手写过一遍之后,你会对这些内容不一样的理解。

虽然本系列文章已经结束,但在后续的内容中我们也会继续为大家讲述更多葡萄城中新老葡萄在工作过程中遇到的各种技术揭秘、分享。

觉得内容不错点个赞再走吧~

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

Docker与k8s的恩怨情仇(八)——蓦然回首总览Kubernetes的更多相关文章

  1. Docker与k8s的恩怨情仇(五)——Kubernetes的创新

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上节中我们提到了社区生态的发展使得Kubernetes得到了良性的发展和传播.比起相对封闭的Docker社区 ...

  2. Docker与k8s的恩怨情仇(七)—— “服务发现”大法让你的内外交互原地起飞

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 第一章:Docker与k8s的恩怨情仇(一)-成为PaaS前浪的Cloud Foundry 第二章:Dock ...

  3. Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...

  4. Docker与k8s的恩怨情仇(六)—— “容器编排”上演“终结者”大片

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在上节中,我们为大家介绍了Pod的基础内容,Kubernetes如何站在上帝视角上处理容器和容器之间的关系. ...

  5. Docker与k8s的恩怨情仇(一)—成为PaaS前浪的Cloud Foundry

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 大家在工作中或许或多或少都接触过Docker,那你知道Docker以及容器化背后的原理到底是什么吗? 容器化 ...

  6. Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker& ...

  7. Docker与k8s的恩怨情仇(三)—后浪Docker来势汹汹

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上一节我们为大家介绍了Cloud Foundry等最初的PaaS平台如何解决容器问题,本文将为大家展示Doc ...

  8. Docker 与 K8S学习笔记(二十三)—— Kubernetes集群搭建

    小伙伴们,好久不见,这几个月实在太忙,所以一直没有更新,今天刚好有空,咱们继续k8s的学习,由于我们后面需要深入学习Pod的调度,所以我们原先使用MiniKube搭建的实验环境就不能满足我们的需求了, ...

  9. Docker 与 K8S学习笔记(八)—— 自定义容器网络

    我们在上一篇中介绍了Docker中三种网络,none.host和bridge,除了这三种网络,Docker还允许我们创建自定义网络,当我们要创建自定义网络时,Docker提供了三种网络驱动供我们选择: ...

随机推荐

  1. NSIS 插件开发引发的思考

    支持NSIS的DLL扩展编程通用语法结构 #include <windows.h> #include <stdio.h> #define FORCE_SWITCH " ...

  2. 深入理解C++11 阅读笔记

    二 保证稳定性和兼容性保持与C99兼容 预定义宏 C99语言标准增加的一些预定义宏,C++11同样增加了对这些宏的支持 __func__预定义标识符 功能是返回所在函数的名字,在C++11中,标准甚至 ...

  3. 嵌入式Redis服务器在Spring Boot测试中的使用

    1.概述 Spring Data Redis提供了一种与Redis实例集成的简单方法. 但是,在某些情况下,使用嵌入式服务器比使用真实服务器创建开发和测试环境更方便. 因此,我们将学习如何设置和使用嵌 ...

  4. python使用笔记23--面向对象编程

    1.面向对象编程概念 面向对象是包含面向过程 面向过程编程 买车: 1.4s看车,买车 2.上保险 保险公司 3.交税 地税局 4.交管所 上牌 面向对象编程 卖车处: 1.4s 2.保险 3.交税 ...

  5. golang开发:Error的使用

    Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了 ...

  6. iframe跨域访问出现的cookie问题,提供两种解决方案

    最近在java项目对接时出现的一个问题.A系统嵌入B系统页面时,使用iframe去嵌入B系统页面丢失sessionid,导致B系统认为是未进行登录的请求,从而跳转到了B系统登录页. 解决方法查看此博客 ...

  7. [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator

    [源码解析] 深度学习分布式训练框架 horovod (18) --- kubeflow tf-operator 目录 [源码解析] 深度学习分布式训练框架 horovod (18) --- kube ...

  8. CentOS更换网易yum源

    最新内容和地址参见http://mirrors.163.com/.help/centos.html 1 首先备份/etc/yum.repos.d/CentOS-Base.repo mv /etc/yu ...

  9. 【技巧】使用PPT更换背景色

    主要记述使用PPT来更换图片某一部分的背景色 把想要更改的图片粘贴到PPT里. 依次选择[格式][颜色][设置透明色],然后点击需要更改背景的地方 将自己的目标颜色复制一下,填充上去,选择[置于底层]

  10. CSP-S 2020 初赛

    游记 游记个鬼啊跨条街就到了=-= 不分Day反正就一天. 9:30开考,8:30起床. 下雨了,一出宿舍门整个学校全被白色的雾气笼罩.愚以为这是祥瑞之气,昨夜似有麒麟貔貅路过,祝我今日初赛RP++ ...