首先明确一点:k8s是管理docker的平台,不是并列的关系。

简单了解一下K8S,并搭建自己的集群 - LunhaoHu的文章 - 知乎

k8s是什么

就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。

Docker 不香吗,为啥还要 K8s? - 动力节点的文章 - 知乎

K8S的架构

略微有一点复杂,我们简单来看一下。

一个K8S系统,通常称为一个K8S集群(Cluster)

这个集群主要包括两个部分:

  • 一个Master节点(主节点)
  • 一群Node节点(计算节点)

k8s集群版本与docker对应版本 k8s集群管理docker_nginx

一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。

 

Master节点

k8s集群版本与docker对应版本 k8s集群管理docker_nginx_02

Master节点包括API Server、Scheduler、Controller manager、etcd。

API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。

Scheduler负责对集群内部的资源进行调度,相当于“调度室”。

Controller manager负责管理控制器,相当于“大总管”。

 

Node节点

k8s集群版本与docker对应版本 k8s集群管理docker_Docker_03

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod

 

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。这段不太好理解,跳过吧。

Docker,不用说了,创建容器的。

Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

Kube-proxy,主要负责为Pod对象提供代理。

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

 

 

面向 Kubernetes 编程:Kubernetes 是下一代操作系统 - Jimmy Song的文章 - 知乎

  1. 我们向 Kubernetes 提交了一个叫 nginx 的 Deployment。Deployment 是 Kubernetes 里的一种副本保持 “资源声明”,我们在我们的 Deployment 声明了 需要3个副本(replica: 3),副本的内容(template: ... )是用 nginx 镜像启动的Pod(Pod 即 Linux 里的进程,如上章节介绍的)。如果没有玩过 docker 的同学,可以把 nginx 镜像 认为是 nginx 二进制包,只不过它是 docker 镜像方式存在的,不在这里详细展开。我们的 nginx Pod 打上了 my-app=nginx 这样的 Label, Label 可以理解成 分类“标签”,别人(Service)来定位我们 Pod 需要用这样的 “标签” 来匹配。
  2. 我们还向 Kubernetes 提交了一个 Service。 提交一个 Service 就是向 Kubernetes 申请一个 负载均衡。Service 依靠 Label (selector: ...) 去找到它的后端真实进程(Pod)。
  3. Service 会根据规则自动生成域名。规则不在这里详细展开介绍。
  4. 我们就能用 Service 自动生成的域名作为交付成果,交付给用户了!

 

 

这里有个我的疑惑

问题:一个镜像创建多个容器实例吗? 这些容器ip是在一台机器上吗?还是分别的4台机器?

k8s集群版本与docker对应版本 k8s集群管理docker_nginx_04

每一个ip都是一台机器,一个镜像在多个机器上。

解答:

 

 

参考:

10分钟看懂Docker和K8S - 小枣君的文章 - 知乎(一开始入门建议看这个,有个印象)

k8s中文文档

k8s-整体概述和架构 - 刘大化的文章 - 知乎