目录
个人理解:
微服务的运用:将传统集中式项目的功能模块拆分为粒度更小的微小服务,每一个微服务都对外提供一个完成的功能;
在容器中,存放的是一个应用进程,若干容器构成一个进程组提供一个功能,微服务,也就是pod;pod是k8s中调度的基本单位
一、什么是云原生
云原生:一种软件架构思想
为用户提供敏捷的,可扩展,可复制的方式利用云的能力
思想理论:
不可变基础设施:容器镜像实现;容器技术是自包含的,可以完全在不同环境中进行迁移。
对比传统基础设施,每一个服务器都是特殊独立的;每一次更新都需要单独进行,整个过程需要不断调整和修改
在云上的设施,在应用部署完成后就不会在修改;当需要更新的时候,通过容器镜像替换旧服务。因为容器提供自包含(应用运行所需要的所用依赖)的环境。体现了容器的敏捷性,可扩展性。
可实现水平扩容,能够快速的在切换实例的数量。
云应用编排理论:容器设计模式,k8s
二、容器与镜像
OS中的进程,相互可见,可以进行通信;共用同一文件系统,CPU的资源
但是面临问题是:高优先级进程可入侵低优先级进程。资源之间的争夺
解决方式:Linux中使用chroot将子目录作为根目录,达到视图隔离,拥有自己的文件系统;使用cgroup对资源进行隔离,限制资源的使用率。
2.1 什么是容器,容器镜像
容器是一个视图隔离,资源可限制,独立文件系统的进程集合
容器镜像也就是容器运行时所有需要的所有文件系统的集合
容器里PID = 1的进程就是应用本身
管理虚拟机 = 管理基础设施
管理容器 = 管理应用本身
2.2 容器运行时生命周期
使用docker run的时候,使用指定的运行程序运行需要的镜像;这个进程称为initial进程;容器的生命周期可以看做与initial进程一致
但是在initial进程结束后,所有子进程也会退出;这可能导致数据的丢失,因此使用数据卷的结构持久数据到指定目录。(数据卷的生命周期是独立的,将数据卷挂载到容器,从而获取数据)
2.3 容器和VM之间的差异
VM:虚拟机,VM的隔离级别更高,将宿主机的一部分资源交付VM创建独立的区域,而这份资源很难在用到其他地方。
容器化:隔离是针对进程的,相对隔离程度低,只需要一个独立的文件系统提供需要的文件集合。启动速度快于VM,消耗的资源空间小。
阿里云镜像服务加速
阿里云搜索:容器镜像服务 控制台
第一个docker实例测试
1.从docker中拉取镜像
2.运行程序 docker run hello-world
3. 查看镜像 docker images
三、Kubernetes
自动化的容器编排平台
调度,自动恢复,负载均衡
3.1 k8s架构
master:
controller: 集群状态的管理 -》 自动恢复,扩容。。
scheduler: 调度器
例子
3.2 核心概念
1.pod
最小调度的单元; 由一个容器或多个容器组成
pod中的容器共享其中的运行环境
2.volume
声明pod中容器可访问的文件目录;可以被挂载到一个或多个容器中的指定路径
3.deployment
定义pod的副本数目,版本等;通过控制器维持pod的数目,当pod死亡的时候,可以自动恢复失败的pod;可以实现滚动升级,回滚等
4. service
提供多个pod实例的稳定访问地址;做负载均衡
支持方式:NodePort, ClusterIP, LoadBalancer
5.namespace
集群内部逻辑隔离机制;每个资源都属于一个namespace, 同一个namespace下面资源唯一
6.访问方式
用户通过HTTP + json/yaml的方式进行访问;通过http请求,内容使用yaml的形式就行撰写。
通过labels可以筛选一组pod
四、Pod
4.1 理解Pod
k8s相当于云时代的操作系统 -》 容器相当于进程 -》 Pod中可以含有多个容器,即进程组
综上类比:Pod是一个逻辑结构,对于Helloworld中的四个进程,不能由一个容器进行管理,所以创建四个容器并组成一个相互协作,提供同一服务的pod
k8s中kube-proxy似乎也有这个回滚机制
4.2 Pod面临的问题
设计模式的作用: 解耦和重用