容器技术

docker和k8s

本秂侑毒 提交于 2020-02-04 15:15:14
1、docker不是容器,而是创建容器的工具; 容器和虚拟机 镜像、仓库、容器 2、k8s 一个K8S系统,通常称为一个 K8S集群(Cluster) 。 这个集群主要包括两个部分: 一个Master节点(主节点) 一群Node节点(计算节点) 一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。 深入来看这两种节点。 首先是 Master节点。 Master节点包括API Server、Scheduler、Controller manager、etcd。 API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。 Scheduler负责对集群内部的资源进行调度,相当于“调度室”。 Controller manager负责管理控制器,相当于“大总管”。 然后是 Node节点 。 Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是 Pod 。 Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。 Kubelet,主要负责监视指派到它所在Node上的Pod

容器技术与DevOps

断了今生、忘了曾经 提交于 2020-02-04 13:51:04
容器技术的使用支撑了目前 DevOps 三大主要实践:工作流、及时反馈、持续学习。 有人说容器技术与 DevOps 二者在发展的过程中是互相促进的关系。得益于 DevOps 设计理念的流行,容器生态系统在设计上与组件选择上也有相应发展。同时,由于容器技术在生产环境中的使用,反过来也促进了 DevOps 三大主要实践: 支撑 DevOps 的三个实践 。 工作流 容器中的工作流 每个容器都可以看成一个独立的运行环境,对于容器内部,不需要考虑外部的宿主环境、集群环境,以及其它基础设施。在容器内部,每个功能看起来都是以传统的方式运行。从外部来看,容器内运行的应用一般作为整个应用系统架构的一部分:比如 web API、web app 用户界面、数据库、任务执行、缓存系统、垃圾回收等。运维团队一般会限制容器的资源使用,并在此基础上建立完善的容器性能监控服务,从而降低其对基础设施或者下游其他用户的影响。 现实中的工作流 那些跟“容器”一样业务功能独立的团队,也可以借鉴这种容器思维。因为无论是在现实生活中的工作流(代码发布、构建基础设施,甚至制造 《杰森一家》中的斯贝斯利太空飞轮 等),还是技术中的工作流(开发、测试、运维、发布)都使用了这样的线性工作流,一旦某个独立的环节或者工作团队出现了问题,那么整个下游都会受到影响,虽然使用这种线性的工作流有效降低了工作耦合性。 DevOps 中的工作流

什么是容器技术

纵然是瞬间 提交于 2020-02-04 10:44:40
一、什么是容器技术 容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。不管是什么,总的来说,容器给人第一印象就是--用来装东西。 那今天我们要说的容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。我们知道,海边码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠,所以可以大量放置在特别设计的远洋轮船中(早期航运是没有集装箱概念的,那时候货物杂乱无章的放,很影响出货和运输效率)。有了集装箱,那么这就更加快捷方便的为生产商提供廉价的运输服务。 因此,IT世界里借鉴了这一理念。早期,大家都认为硬件抽象层基于hypervisor的虚拟化方式可以最大程度上提供虚拟化管理的灵活性。各种不同操作系统的虚拟机都能通过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦越来越多。为什么? 因为对于hypervisor环境来说,每个虚拟机都需要运行一个完整的操作系统以及其中安装好的大量应用程序。但实际生产开发环境里,我们更关注的是自己部署的应用程序,如果每次部署发布我都得搞一个完整操作系统和附带的依赖环境,那么这让任务和性能变得很重和很低下

04-容器 What, Why, How

非 Y 不嫁゛ 提交于 2020-02-04 10:44:25
What - 什么是容器? 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。 容器与虚拟机 谈到容器,就不得不将它与虚拟机进行对比,因为两者都是为应用提供封装和隔离。 容器由两部分组成: 应用程序本身 依赖:比如应用程序需要的库或其他软件 容器在 Host 操作系统的用户空间中运行,与操作系统的其他进程隔离。这一点显著区别于的虚拟机。 传统的虚拟化技术,比如 VMWare, KVM, Xen,目标是创建完整的虚拟机。为了运行应用,除了部署应用本身及其依赖(通常几十 MB),还得安装整个操作系统(几十 GB)。 下图展示了二者的区别。 如图所示,由于所有的容器共享同一个 Host OS,这使得容器在体积上要比虚拟机小很多。另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快,开销更小,也更容易迁移。 Why - 为什么需要容器? 为什么需要容器?容器到底解决的是什么问题? 简要的答案是: 容器使软件具备了超强的可移植能力 。 Docker 将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统。Docker 可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器。容器可以运行在几乎所有的操作系统上

容器 What, Why, How

冷暖自知 提交于 2020-02-04 10:27:32
学习任何东西都可以按照3W的框架进行,容器技术也是一样,先回答 What、Why 和 How 这三个问题。 What - 什么是容器? 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。 容器与虚拟机 谈到容器,就不得不将它与虚拟机进行对比,因为两者都是为应用提供封装和隔离。 容器由两部分组成: 应用程序本身 依赖:比如应用程序需要的库或其他软件 容器在 Host 操作系统的用户空间中运行,与操作系统的其他进程隔离。这一点显著区别于的虚拟机。 传统的虚拟化技术,比如 VMWare, KVM, Xen,目标是创建完整的虚拟机。为了运行应用,除了部署应用本身及其依赖(通常几十 MB),还得安装整个操作系统(几十 GB)。 下图展示了二者的区别。 如图所示,由于所有的容器共享同一个 Host OS,这使得容器在体积上要比虚拟机小很多。另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快,开销更小,也更容易迁移。 Why - 为什么需要容器? 为什么需要容器?容器到底解决的是什么问题? 简要的答案是: 容器使软件具备了超强的可移植能力 。 容器解决的问题 我们来看看今天的软件开发面临着怎样的挑战?

IoC控制反转和DI依赖注入

六眼飞鱼酱① 提交于 2020-02-02 17:55:58
控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,并非面向对象编程的专用术语。它与依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)并没有关系。 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给 容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么, 为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下: 谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC 是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么? 那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就 是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是 被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。 设计模式:

spring生命周期

百般思念 提交于 2020-02-01 15:31:18
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程同时存取共享资源所引发的数据不同步问题。 然而在spring中 可以设定每次从BeanFactory或ApplicationContext指定别名并取得Bean时都产生一个新的实例:例如: 在spring中,singleton属性默认是true,只有设定为false,则每次指定别名取得的Bean时都会产生一个新的实例 一个Bean从创建到销毁,如果是用BeanFactory来生成,管理Bean的话,会经历几个执行阶段(如图1.1): 1:Bean的建立: 容器寻找Bean的定义信息并将其实例化。 2:属性注入: 使用依赖注入,Spring按照Bean定义信息配置Bean所有属性 3:BeanNameAware的setBeanName(): 如果Bean类有实现org.springframework.beans.BeanNameAware接口,工厂调用Bean的setBeanName(

Docker学习视频笔记(一)

删除回忆录丶 提交于 2020-01-30 01:06:01
01 前提知识:强制 linux,尚硅谷 韩顺平 建议 Git命令 课程时间1.5天 定位:java开发/Docker开发 docker–云平台–阿里云 JavaEE–Java Docker–Go语言 (区块链部分) docker基础篇 docker高级篇 02 开发:代码 war包 —》 运维:部署 两者环境和配置一致的问题 代码/配置/系统/数据。。。一起打包 封装完,就叫镜像 接近于Java虚拟机的理念,一次编译,多次运行 03 一次封装,到处运行 开发给运维镜像,一个集装箱是一个需要的依赖软件,运维只装一个鲸鱼,把所有的集装箱接过来。 仓库,镜像,容器 04 linux内核和各种库kernel,library 虚拟机是分钟级,docke是秒级 虚拟机占用资源多,荣誉步骤多,启动慢,连硬件都模拟 linux容器不模拟完整的操作系统,而是对进程进行隔离,只将需要的软件打包进容器 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。每个容器之间相互隔离,每个容器都有自己的文件系统,能区分计算资源。 DevOps 运维工程师有失业的危险了 业界趋势: 如何10分钟完成1000节点扩容能力,混合云趋势,12306借助阿里云解决春节余票查询峰值问题,京东618大促借助Docker为基础的弹性云解决峰值流量问题。Docker

docker 容器环境 检测方法

試著忘記壹切 提交于 2020-01-30 00:46:14
1.背景 现在有研究表明,人们目前有使用Docker进行恶意代码重现工作的倾向。Docker的反检测可分为三部分:CPU反检测,内存反检测和存储数据反检测。该技术利用了AUFS的层叠镜像技术,使得我们的Docker反检测技术可以很容易地实现在镜像的一层中——反检测层。这样,只需要将反检测层动态地部署到Docker容器中,即可实现对Container环境的CPU、内存和存储的封装,从而遮蔽掉Container特征。这样的话,该容器中的恶意代码也就无法检测其自身是否在Container中运行了。 2.cgroup方法 在Host和Container中执行cat /proc/1/cgroup命令的结果是不同的,可以利用这一点进行判断。(或者cat /proc/self/cgroup命令也行) 在Host中执行cat /proc/1/cgroup命令的结果: root@ubuntu:~# cat /proc/1/cgroup 10:hugetlb:/ 9:cpuset:/ 8:memory:/ 7:cpu,cpuacct:/ 6:perf_event:/ 5:blkio:/ 4:net_cls,net_prio:/ 3:freezer:/ 2:devices:/ 1:name=systemd:/ 在Container中执行cat /proc/1/cgroup命令的结果: root

docker基础(一)

北慕城南 提交于 2020-01-30 00:13:00
1. Docker是什么 Docker是一个开源的应用客器引擎,基于GO语言开发实现,属于操作系统层面的虚拟化技术。 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何安装有 Docker的电脑( windows和 Linux)上。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iphone和app),更重要的是容器性能开销极低。 2. Docker能够做什么 Docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于电脑资源要求过高而无法解决的问题。 虚拟机和 Docker虚拟化的不同之处 3. 为什么使用 Docker 1)更快速的交付和部署 对开发和运维员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。 例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署 的时间. 节约安装各种开发环境的软件的时间。 解决开发环境和生产环境不一致的问题 2)更轻松的迁移和扩展: Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个 3)更高的资源利用率