有桥接模式、隔离模式、NAT模式、路由模式。
桥接模式:Guest与Host连接到同一个交换机上;通过桥接物理网卡,相当于直连到Host所在网络。
隔离模式:允许Guest访问同一虚拟交换机上的其他Guest;但是不能访问Host所在的外部网络。
NAT模式(默认):将Guest虚拟机的默认网关指向Host物理机的virtbr0接口的IP地址;Guest共享真机
的网络连接,以地址转换的方式访问外网。
路由模式:由Host物理机充当路由器,开启转发;需要额外设置外网与Guest虚拟机之间互访的路由条
目,Guest以路由转发的方式访问外网(需要在真机配置iptables规则)。
FROM指定基础镜像。
ENV key=value环境变量。
COPY拷贝本地文件到容器镜像。
ADD拷贝本地或远程URL文件到容器镜像。
RUN在build时运行命令。
CMD在docker run时运行的默认命令,如果有多个,仅最后一个有效。
如果docker run 镜像 命令,指定了运行容器的命令,则CMD的命令会被覆盖。
An ENTRYPOINT allows you to configure a container that will run as an executable。
ENTRYPOINT将容器做为一个可执行体运行,如果docker run 镜像后面有东西,则全部做为
ENTRYPOINT的参数处理,如果docker run 镜像后面没有东西,但是CMD定义了内容,则CMD定义的
内容全部做为ENTRYPOINT的参数。
host模式 -net=host 容器和宿主机共享nework namespace
container -net=container:name_or_ID 容器和另外一个容器共享Network namespace。 kubernetes
中的pod就是多个容器共享一个Network namespace。
none模式 –net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配
veth pair 和网桥连接,配置IP等。
bridge模式 –net=bridge (默认为该模式)
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连
接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连
在了一个二层网络中。
etcd:提供数据库服务保存了整个集群的状态
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
cloud-controller-manager:是与底层云计算服务商交互的控制器
kub-scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理
kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则
container-runtime:是负责管理运行容器的软件,比如docker
Pod是Kubernetes中最小的单元,它由一组、一个或多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等。
status 属性里面有一个phase字段记录了Pod的状态正常情况下启动一个新Pod的过程如下:
Pending表示Pod已经被同意创建,正在等待kube-scheduler选择合适的节点创建,一般是在准备镜像
Running表示Pod中所有容器已经被创建,并且至少有一个容器正在运行或者是正在启动或者正在重启
Succeeded表示所有容器已经成功终止,且不会再启动
Failed表示Pod中所有容器都是非0状态退出
Unknown表示无法读取Pod状态通常是kube-controller-manager无法与Pod通信
1、客户端提交Pod的配置信息(可以是Deployment定义好的信息)到kube-apiserver,kubeapiserve把Pod信息存储到ETCD当中
2、kube-scheduler 检测到Pod信息会开始调度
3、kube-scheduler 开始调度预选,主要是过滤掉不符合Pod要求的节点
4、kube-scheduler 开始调度调优,主要是会给节点打分以选择更加适合的节点
5、kube-scheduler 选择好节点后会把结果存储到ETCD
6、kubelet 根据调度结果执行Pod创建操作
kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,此时Pod的状态是Terminating,Kubelet看到Pod标记为Terminating开始了关闭Pod的工作
1、Pod从service的列表中被删除
3、进程被发送TERM信号(kill -14)
4、当超过优雅退出时间时,Pod中的所有进程都很被发送SIGKILL信号(kill -9)
Pod每次重启或者从新部署IP地址都会产生变化,这使得Pod间通信和Pod与外部通信变得困难,这时候
Pod就需要一个固定的入口这就是Service
每个Service都有一个clusterIP,clusterIP是固定的是外界访问Pod的唯一入口,Service背后通常绑定了
一组相同配置的Pod,通过负载均衡的方式把外界请求分配的多个Pod
Pod启动后会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信
这是一个代理服务,它在每个节点上运行,并使从服务器与主服务器通信。因此,Kubelet处理PodSpec
中提供给它的容器的描述,并确保PodSpec中描述的容器运行正常。
虚拟化是一种技术,顾名思义,就是将不可拆分的实体资源变成可以自由划分的逻辑资源,从而实现资源的整合、隔离、在分配
云计算是一种服务模式,其思想就是把各种资源整合起来,然后租给有需要的用户
云计算就是利用了虚拟化技术的特点,把这些资源分割打包提供给用户使用
IaaS:基础设施服务,Infrastructure-as-a-service
PaaS:平台服务,Platform-as-a-service
SaaS:软件服务,Software-as-a-service
公有云指互联网上发布的云计算服务,搭建云的资源在提供商的场所内,用户通过互联网使用服务
私有云一般建设在企业内部(专网)发布的云服务,搭建云平台所需的资源由企业自给
混合云是云计算的一种类型,它将本地基础结构(或私有云)与公有云结合在一起。使用混合云,可以在两种环境之间移动数据和应用
写入时重定向(英语:Redirect On Write,简称ROW)是一种计算机程序设计领域的优化策略。其核心思
想是,当有多个调用者都需要请求相同资源时,一开始资源只会有一份,多个调用者共同读取这一份资源,当
某个调用者需要修改数据的时候,才会将数据生成拷贝,供这个调用者使用,而其他调用者依然还是读取最原
始的那份数据。每次有调用者需要修改数据时,就会重复一次拷贝流程,供调用者修改使用,使用ROW可以避
免或者减少数据的拷贝操作,极大的提高性能
1、Elasticsearch 是一个分布式的免费开源搜索和分析引擎,它提供了一个分布式的基础架构,基于RESTful API的Web接口
2、logstash 是一个数据采集、加工处理以及传输(输出)的工具,拥有丰富的数据收集处理输出插件。
3、kibana 是一个数据可视化平台工具。能够完成数据的检索、图表绘制以及展示等功能
input 区域负责日志的收集
filter 区域负责对日志进行格式化
output 区域负责把格式化好的日志存储在数据库中
Elasticsearch 数据的组织存放方式按照由大到小顺序分别是 索引、类型、文档、字段
索引:相当于数据库中的库
类型:相当于数据库中的表
文档:相当于数据库中的行
字段:相当于数据库中的列
它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
它提供一些快捷菜单,用以展现集群的各种状态,还提供一组针对集群的查询API,并将结果以json和表格形
式返回
访问Elasticsearch数据库需要使用 REST API,分别对应以下 HTTP 协议方法
增 – HTTP方法 (PUT)
删 – HTTP方法 (DELETE)
改 – HTTP方法 (POST)
查 – HTTP方法 (GET)
可以使用 _cat api 进行查询 (?v 显示详细信息)(?help 显示帮助信息)
curl http://集群中任意结点:9200/_cat/关键字
filebeat是用于转发和集中日志数据的轻量级传送工具
filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch
或 Logstash进行索引
由于Logstash对内存、cpu、io等资源消耗非常高,部署在任务繁重的机器上非常不合适,对于日志的收集filebeat 就是解决这个问题的最佳选择,filebeat 非常轻量,几乎不占用系统资源,他可以通过网络把
收集的日志发送到 Elasticsearch 或 Logstash进行索引
数据可视化平台工具
特点:
灵活的分析和可视化平台,实时总结和流数据的图表
为不同的用户显示直观的界面,即时分享和嵌入的仪表板
可以在filebeat中定义 fields 自定义的键值对类型的标签,在日志的接收端可以通过该标签进行日志区分
1、Docker 更简单、更易用、更快速,与虚拟机相比,Docker共享宿主机的操作系统和硬件资源,所有的应用模块都是在宿主机上的隔离,非常节省资源,多个应用模块类似于宿主机上多个“应用进程”
2、与虚拟机相比,容器的创建启动、停止等能都实现秒级的速度,从而实现业务系统服务的快速弹性扩展
3、更灵活的硬件资源调整、管控:所有的运维基础服务以及公司自有模块都可以随意封装为镜像,只要Docker运行的基础环境,就可以直接启动服务,从而实现“一次封装,到处运行”
4、所有容器能够针对CPU,内存、磁盘IO、网络等进行更细化的调整控制,让所有容器更能充分利用宿主机的硬件资源;
5、透明部署,促进企业实现真正的DevOps:docker 的出现,让运维、测试、研发等企业技术人员,彻底跳出“环境部署的苦海”,实现真正的企业内部业务系统的“透明部署”,简化了技术部门产品发布的流程
私有仓库的镜像存储在/var/lib/registry
查看私有镜像仓库中的镜像名称或标签
查看名称: curl http://仓库IP:5000/v2/_catalog
查看标签: curl http://仓库IP:5000/v2/镜像名称/tags/list
数据卷是宿主机上面的某个特殊目录或者文件,它可供一个或多个容器使用
特性:
- 1、数据卷中所有的数据是保存在宿主机磁盘本地的,它可以被一个或多个容器使用在权限允许的前提下,宿主机+各个容器对数据卷都可以进行读、写、删除等各项操作并且在宿主机或者各个容器任何一个节点上面变更数据(增、删、改),实现数据的 “全局同步”
- 2、对数据卷的更新,不会影响镜像
- 3、卷会一直存在,即使没有容器,数据也不会丢失
可以在容器启动的时候通过参数限制容器对内存及cpu的使用
例如:
- 设置容器使用的cpu权重,在多个容器对cpu发生资源争用的的时候,按照权重分配资源cpuset-cpus 把容器使用cpu资源固定在一个或多个指定的cpu 核上
- 使用参数-m设置容器使用宿主机的物理内存容量大小memory-swap 设置容器使用宿主机的物理内存+物理交换分区的总容量大小
1、Cgroups(Control Groups)资源管理
2、SELinux 安全
3、NameSpace 命名空间
可以通过共享容器的命名空间或(link)实现
在启动时候可以通过参数 network=container:容器名称
把两个服务监听在同一个网络命名空间上,从而实现服务内部相互调用
容器可以通过 -p 参数把容器端口和宿主机端口绑定或共享宿主机网络名称空间
我们可以通过访问宿主机的 IP:Port 来达到访问到容器内服务的目的
同一宿主机的同一个端口只能绑定一个容器服务