云原生初探

文章目录

      • 什么是云原生?
      • 第二讲 容器的基本概念
        • 什么是容器?
        • 容器运行时的生命周期
        • 容器项目的架构
        • 容器和VM的差异
      • 第三讲 Kubernetes核心概念
        • 什么是Kubernetes
        • Kubernetes架构
        • Kubernetes核心概念和API
      • 第四讲 理解Pod和容器设计模式
        • 为什么Pod必须是原子调度单位?
        • Pod实现机制

什么是云原生?

不同企业对云原生有不同的解释,最为广泛接受的是:云原生是一类技术的统称 或者 是一套指导进行软件架构设计的思想,通过云原生技术,我们可以构建出更易于弹性扩展的应用程序。它包含了当前业界的一些热门的技术,比如:容器、微服务、DevOps等。

第二讲 容器的基本概念

什么是容器?

容器是一个视图隔离(能够看见部分进程等 namespace)、资源可限制(限制资源使用率 cgroup)、独立文件系统(chroot)。

容器运行时所需要的所有文件集合称为容器镜像。通常采用Dockerfile构建镜像。

容器运行时的生命周期

  • 单进程模型

    启动容器时,会选择相应的文件系统(镜像来提供),以及指定相应的运行程序,那么这个运行程序我们称为init进程。在容器运行过程中,我们会发现,当这个init进程启动了,那么这个容器也启动了,当这个init进程退出了,那么这个容器也就随之退出了。所以,init进程的生命周期与容器生命周期一致。

  • 数据持久化

    数据卷volume,独立于容器的生命周期;

容器项目的架构

  • moby容器引擎架构

    moby daemon会提供关于容器、镜像、网络以及volume的管理。它依赖的最重要的组件是containerd(容器运行时管理引擎),独立于moby daemon,containerd-shim管理容器生命周期,可被containerd动态接管。

在这里插入图片描述

容器和VM的差异

在这里插入图片描述

在这里插入图片描述

VM是利用Hypervisor虚拟化技术来模拟硬件资源,需要Guest OS(装在VM上的系统),可以提供更好的隔离效果。但是,我们需要将一部分的计算资源交给虚拟化,导致很难充分利用计算资源,并且每个Guest OS需要占用大量的磁盘空间。

容器无需Guest OS,只需要一个独立的文件系统。所有的隔离级别都是进程级别的;启动时间更快;但隔离效果较弱。

第三讲 Kubernetes核心概念

什么是Kubernetes

自动化的容器编排平台

核心功能:

  • 服务发现与负载均衡;
  • 容器自动装箱(把一个容器放到某个集群的某个机器上);
  • 存储编排;
    • 自动容器恢复(节点健康检查,将有问题的节点上的容器迁移到其他节点上去);
  • 自动发布与回滚;
  • 配置与密文管理;
  • 批量执行;
  • 水平伸缩(业务负载检查,可以对负载过高的服务进行扩容);

Kubernetes架构

在这里插入图片描述

在这里插入图片描述

  • API Server:消息传送;
  • Controller:完成对集群状态的管理;
  • Scheduler:调度;
  • etcd:分布式存储,API Server中所需要的信息都放在etcd中;

在这里插入图片描述

在这里插入图片描述

用户可以通过ui或cli向kubernetes提供一个pod进行部署,API Server会将相关信息存储到etcd中,Scheduler会通过API Server的watch或者notification机制得到这个信息(有一个pod需要被调度),Scheduler会根据它的资源状态进行一次调度决策,在完成这次调度之后,Scheduler会向API Server通知这个pob需要被调度到某个节点上,API Server会将调度的结果再次写入到etcd中。然后,API Server会通知对应的节点进行pob的启动和执行。相应节点的kubelet会得到这个通知,调用Container runtime来配置、启动这个容器的运行环境,去调用Storage Plugin来配置存储,调用Network Plugin来配置网络。

Kubernetes核心概念和API

  • Pod

    • 最小的调度以及资源单位;
    • 由一个或者多个容器组成;
    • 在Pob中可以定义容器运行的方式(Command、环境变量等);
    • 提供给容器共享的运行环境(网络、进程空间,pob与pob之间是有隔离的);
  • Volume

    • 用来声明容器的访问目录(Pob中的容器可以访问的文件目录);
    • 一个volume可以被挂载在一个Pob中的一个或多个容器的指定路径下;
    • volume是一个抽象的概念,它可以支持多种后端的存储(分布式、云存储…);
  • Deployment

在这里插入图片描述

  • 定义一组Pob的副本数目、版本等;

  • 通过Colltroller维持Pob的数目,Controller可以自动恢复失败的Pod;Deployment中Pob的数目是通过Controller来指定的,当一个Pod失败时,Controller可以检测到,来生成新的Pob。

  • 可以通过Controller以指定的策略控制版本:滚动升级、重新生成、回滚;

  • Service

    在这里插入图片描述

    • 提供访问一个或多个Pod实现的稳定访问地址(负载均衡);
  • Namespace

    在这里插入图片描述

    • 一个集群内部的逻辑隔离机制(鉴权、资源调度);
    • 每个资源都属于一个Namespace;
    • 同一个Namespace中的资源命名唯一;

第四讲 理解Pod和容器设计模式

在这里插入图片描述

由四个进程共同组成的应用helloworld,在kubernates中会被定义为拥有四个容器的Pod。Pob只是一个逻辑单位,真正启来的实际上是四个容器。

为什么Pod必须是原子调度单位?

举例:两个紧密协作(需要部署在一台机器上)的容器App和LogCollector;

内存要求:App—1G、LogCollector:0.5G;

当前可用内存:Node_A:1.25G、Node_B:2G;

如果App先被调度到了Node_A上,那么就会导致LogCollector调度失败。

这就是Task co-scheduling问题:

  • Mesos的解决办法:资源囤积;所有设置了Affinity约束的任务都到达时,才开始同一进行调度;带来的问题是:调度效率损失、死锁;
  • Google Omega:乐观调度;不管冲突,出现冲突之后回滚;
  • Kubernetes:Pod;不存在上面的问题;App和LogCollector属于一个Pob,一起被调度;

亲密关系:两个应用需要运行在同一台宿主机上(Pod之间);通过调度解决;

超亲密关系:会发生直接的文件交换;使用localhost或者socket文件进行本地通信;会发生非常频繁的RPC调用;会共享某些Linux Namespace(比如:一个容器要加入另一个容器的Network Namespace,就可以看到另一个容器的网络设备以及网络信息);通过Pod解决;

在这里插入图片描述

Pod实现机制

容器之间原本是被Linux Namespace和cgroups隔离开的,那么如何让一个Pod里的多个容器之间最高效的共享某些资源和数据?

  • 共享网络

    在这里插入图片描述

    在每一个Pod里会启动一个Infra container小容器来共享整个Pod的Network Namespace。Pob内部容器直接使用localhost进行通信;每个容器看到的网络设备跟Infra容器看到的一样;一个Pod只有一个IP地址,也就是这个Pod的Network Namespace对应的IP地址;所有网络资源都是一个Pod一份,并且被该Pod中的所有容器共享;整个Pod的生命周期跟Infra容器一致,而与内部的其他容器无关;

  • 共享存储

    挂载到同一个volume;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15分钟从零开始搭建支持10w+用户的生产环境(三)

上一篇文章介绍了这个架构中,选择MongoDB做为数据库的原因,及相关的安装操作。原文地址:15分钟从零开始搭建支持10w用户的生产环境(二)三、WebServer在SOA和gRPC大行其道的今天,WebServer在系统中属于重中之重,是一个系…

[Java基础]Stream流终结操作之forEachcount

代码如下: package StreamTest;import java.util.ArrayList;public class StreamDemo06 {public static void main(String[] args) {ArrayList<String> list new ArrayList<String>();list.add("Jack");list.add("Tom");list.add("张敏…

实现.Net程序中OpenTracing采样和上报配置的自动更新

前言OpenTracing是一个链路跟踪的开放协议&#xff0c;已经有开源的.net实现&#xff1a;opentracing-csharp&#xff0c;同时支持.net framework和.net core&#xff0c;Github地址&#xff1a;https://github.com/opentracing/opentracing-csharp。这个库支持多种链路跟踪模式…

[Java基础]Stream流综合练习

代码如下: package StreamDemoFinal;public class Actor {private String name;public Actor(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }package StreamDemoFinal;import java.util.Array…

基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射

上一篇文章集成了定时任务处理框架Hangfire&#xff0c;完成了一个简单的定时任务处理解决方案。本篇紧接着来玩一下AutoMapper&#xff0c;AutoMapper可以很方便的搞定我们对象到对象之间的映射关系处理&#xff0c;同时abp也帮我们是现实了IObjectMapper接口&#xff0c;先根…

磁盘文件系统、挂载

参考&#xff1a;https://zhuanlan.zhihu.com/p/106459445 https://blog.csdn.net/qq_39521554/article/details/79501714 文件系统 持久化的数据是存储在外部磁盘上的&#xff0c;如果没有文件系统&#xff0c;访问这些数据需要直接读写磁盘的sector&#xff0c;而文件系统存…

[Java基础]Stream流的收集操作

代码如下: package CollectPack;import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream;public class CollectDemo {public static void main(String[] args){List<String> list new ArrayList<String>();list.add("林青…

15分钟从零开始搭建支持10w+用户的生产环境(一)

前言这是一个基于中小型企业或团队的架构设计。不考虑大厂。有充分的理由相信&#xff0c;大厂有绝对的实力来搭建一个相当复杂的环境。中小型企业或团队是个什么样子&#xff1f;开发团队人员配置不全&#xff0c;部分人员身兼开发过程上下游的数个职责&#xff1b;没有专职的…

高性能IO——Reactor模式

高性能IO——Reactor模式 参考&#xff1a;https://cloud.tencent.com/developer/article/1513447 目前的IO线程处理模型一般可以分为以下三类&#xff1a; 单线程阻塞I/O服务模型&#xff1b; while(true) {socket accept();handle(socket) }多线程阻塞I/O服务模型&#xf…

X-lab 开放实验室开源创新的故事

本报告为“开源软件供应链点亮计划暑期2020活动”中的“大咖说开源”第二期的特邀嘉宾视频&#xff0c;正好借此机会给大家介绍下 X-lab 实验室目前在开源方面开展的一些事情&#xff0c;欢迎大家关注&#xff0c;也欢迎更多热爱开源的朋友们加入&#xff01;摘要&#xff1a;2…

Circle and Points POJ - 1981(单位圆覆盖最多点)

题意&#xff1a; 给你n个点和点的位置&#xff0c;问单位圆最多能覆盖多少个点。 题目&#xff1a; You are given N points in the xy-plane. You have a circle of radius one and move it on the xy-plane, so as to enclose as many of the points as possible. Find h…

ASP.NET Core分布式项目实战(Consent 确认逻辑实现)--学习笔记

任务22&#xff1a;Consent 确认逻辑实现接下来&#xff0c;我们会在上一节的基础上添加两个按钮&#xff0c;同意和不同意&#xff0c;点击之后会把请求 post 到 ConsentController 处理&#xff0c;如果同意会通过 return url 跳转到客户端&#xff0c;如果不同意就会取消&am…

The Last Non-zero Digit POJ - 1150(n!mod p)

题意&#xff1a; 要求你求出n!(n−m)!)\frac{n!}{(n-m)!)}(n−m)!)n!​中最后一个非0的数字. 题目&#xff1a; In this problem you will be given two decimal integer numberN,M. You will have to find the last non-zero digit of the NPM^{N}P_{M}NPM​.This means n…

Istio 1.6——迈向极简主义

从 1.2 版本开始&#xff0c;Istio 进入季度发布的节奏。5 月 21 日发布的 1.6 版本可以说是最准时的一次。我们是否可以理解 Istio 架构简化后的开发工作已经步入了正轨&#xff1f;这次的更新是否会带给我们惊喜&#xff1f;亦或是还有遗憾&#xff1f;让我们一一道来。&…

[Java基础]获取Class类的对象

代码如下: package ClassObjectPack;public class Student {private String name;int age;public String address;public Student(String name, int age, String address) {this.name name;this.age age;this.address address;}public Student() {}private Student(String …

使用PInvoke互操作,让C#和C++愉快的交互优势互补

一&#xff1a;背景1. 讲故事如果你常翻看FCL的源码&#xff0c;你会发现这里面有不少方法借助了C/C的力量让C#更快更强悍,如下所示&#xff1a;[DllImport("QCall", CharSet CharSet.Unicode)][SecurityCritical][SuppressUnmanagedCodeSecurity]private static ex…

[Java基础]反射获取构造方法并使用

代码如下: package ClassObjectPack;import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;public class ReflectDemo01 {public static void main(String[] args) throws ClassNotFoundExcep…

题目 1886: [蓝桥杯][2017年第八届真题]包子凑数(欧几里得+完全背包)

题目&#xff1a; 时间限制: 1Sec 内存限制: 128MB 提交: 1049 解决: 365 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼&#xff0c;其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买X…