docker、kubernetes基础概念

  1. Docker

虚拟机属于虚拟化技术,Docker这样的容器技术,也是虚拟化技术(轻量级的虚拟化)。Docker对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

docker、kubernetes基础概念_第1张图片

 Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

Docker Registry服务 负责对Docker镜像进行管理,类似仓库管理员。

 

Docker技术的三大核心概念,分别是:

镜像(Image):是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。一个镜像可以创建多个容器。

容器(Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

仓库(Repository):仓库类似于git,用于托管所有开源的镜像。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

 

docker采用C/S架构,客户端向服务器发送请求,服务器(以守护进程的形式在后台运行)进行响应,运行容器,创建镜像等等。

Docker主要组件:

docker、kubernetes基础概念_第2张图片

docker、kubernetes基础概念_第3张图片

 

Server是一个常驻进程。

REST API 实现了client和server间的交互协议。

CLI 实现容器和镜像的管理,为用户提供统一的操作界面。

 

启动 Docker 后台服务

systemctl start docker

测试运行 hello-world

docker run hello-world

由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。

 

Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

docker run ubuntu:15.10 /bin/echo "Hello world"

 

具体命令参考:http://www.runoob.com/docker/docker-tutorial.html

 

2. K8s

K8S,kubernetes,是基于容器的集群管理系统。Kubernetes这个单词来自于希腊语,含义是舵手或领航员。

一个K8S系统,通常称为一个K8S集群(Cluster。这个集群主要包括两个部分:

一个Master节点(主节点)

一群Node节点(计算节点)

docker、kubernetes基础概念_第4张图片

docker、kubernetes基础概念_第5张图片

Master节点:

Etcd:是一个高可用的键值存储系统,保存了整个集群的状态。

Apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。

controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。

Scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。

 

Node节点:

每个Node节点主要由三个模块组成:kubelet、kube-proxy、runtime。

Runtime:runtime指的是容器运行环境,目前Kubernetes支持docker和rkt两种容器。

kube-proxy:该模块实现了Kubernetes中的服务发现和反向代理功能。反向代理方面:kube-proxy支持TCP和UDP连接转发,默认基于Round Robin算法将客户端流量转发到与service对应的一组后端pod。服务发现方面,kube-proxy使用etcd的watch机制,监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响。另外kube-proxy还支持session affinity。

Kubelet:Kubelet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上面的所有容器(主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等),但是如果容器不是通过Kubernetes创建的,它并不会管理。本质上,它负责使Pod的运行状态与期望的状态一致。还负责Volume(CVI)和网络(CNI, Container Network Interface)的管理。

Docker:创建容器。

Fluentd:主要负责日志收集、存储与查询。

 

Pod

pod可以理解为一个虚拟机,包含一组容器和卷。

每个pod在集群中有一个唯一IP。

Pod是短暂的,不是持续性实体,每次重启IP会变。

pod可以包含多个容器,彼此共享相同的端口空间,可以通过localhost通信。

pod中的容器共享相同的数据卷、相同的IP地址、端口空间、IPC命名空间。

每个pod允许设置自己的lablelabel用来做管理和服务发现的映射。

 

Service

Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。Service还可以看作一个均衡负载器(一个service可以对应多个pod)。

访问Service 的方式:

docker、kubernetes基础概念_第6张图片

可以通过type在Service Spec中指定一个type(默认clusterIP):

ClusterIP(默认):在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。

NodePort: 通过每个Node上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到 ClusterIP服务,这个 ClusterIP 服务会自动创建。通过请求 :,可以从集群的外部访问一个 NodePort 服务。

LoadBalancer: 使用云提供商的负载均衡器(如果支持),可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。

externalIPs: 通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容,没有任何类型代理被创建。

docker、kubernetes基础概念_第7张图片

Kubernetes对象:

Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。

每个Kubernetes对象都包含两个嵌套对象字段,用于管理Object的配置:Object Spec和Object Status。Spec描述了对象所需的状态 - 希望Object具有的特性,Status描述了对象的实际状态,并由Kubernetes系统提供和更新。

 

Deployment负责创建和更新应用。创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。

        

 

 

 

你可能感兴趣的:(kubernetes)