Kubernetes系列《十一》——知识闲谈
一、 Kubernetes基本知识点
Q1。Kubernetes与Docker Swarm有何不同?
Q2。什么是Kubernetes?
Kubernetes是一个开源容器管理工具,它负责容器部署,容器的缩放和除垢以及负载平衡的职责。作为Google的创意,它提供了出色的社区,并且与所有云提供商都精采合作。因此,我们可以说Kubernetes不是 一个容器化平台,而是一个多容器管理解决方案。
Q3。Kubernetes与Docker有何关系?
众所周知,Docker提供了容器的生命周期管理,而Docker映像构建了运行时容器。但是,由于这些容器必须进行通信,因此使用了Kubernetes。因此,Docker构建了容器,这些容器通过Kubernetes相互通信。因此,可以使用Kubernetes手动链接和协调在多个主机上运行的容器。
Q4。在主机和容器上部署应用程序有什么区别?
请参考上图。左侧的体系结构表示在主机上部署应用程序。因此,这种体系结构将具有一个操作系统,然后该操作系统将具有一个内核,该内核将在应用程序所需的操作系统上安装各种库。因此,在这种框架中,您可以有n个应用程序,并且所有应用程序都将共享该操作系统中存在的库,而在容器中部署应用程序时,体系结构则有所不同。
这种架构将具有内核,这是唯一的东西,它将成为所有应用程序之间唯一的共同点。因此,如果有一个需要Java的特定应用程序,那么我们将可以访问该特定应用程序;如果有另一个需要Python的应用程序,则只有该特定应用程序可以访问Python。
您可以在图的右侧看到的各个块基本上都是容器化的,并且与其他应用程序隔离。因此,应用程序具有与系统其余部分隔离的必要库和二进制文件,并且不会被任何其他应用程序所侵害。
Q5。什么是容器编排?
考虑一个应用程序有5-6个微服务的情况。现在,这些微服务放置在单独的容器中,但是如果没有容器编排,将无法进行通信。因此,由于编排意味着将所有乐器在音乐中和谐地融合在一起,因此类似的容器编排意味着单个容器中的所有服务可以一起工作以满足单个服务器的需求。
Q6。容器编排有什么需要?
假设您有5-6个微服务用于执行各种任务的单个应用程序,并且所有这些微服务都放在容器中。现在,要确保这些容器彼此通信,我们需要进行容器编排。
如上图所示,不使用容器编排也存在许多挑战。因此,为了克服这些挑战,进行了容器编排。
Q7。Kubernetes有什么特点?
Kubernetes的功能如下:
Q8。Kubernetes如何简化容器化部署?
由于典型的应用程序具有跨多个主机运行的容器集群,因此所有这些容器都需要相互通信。因此,要做到这一点,您需要一些可以平衡负载,缩放和监视容器的东西。由于Kubernetes与云无关,并且可以在任何公共/私有提供商上运行,因此必须选择简化容器化部署。
Q9。您对Kubernetes中的集群了解多少?
Kubernetes的基本原理是,我们可以强制执行所需的状态管理,这意味着我们可以提供特定配置的集群服务,而由集群服务决定是否在基础架构中运行该配置。
因此,如您在上图中所看到的,部署文件将具有需要馈送到集群服务中的所有配置。现在,部署文件将被馈送到API,然后由集群服务来决定如何在环境中调度这些Pod,并确保运行正确数量的Pod。
因此,位于服务,工作节点和节点运行的Kubelet流程前面的API共同构成了Kubernetes集群。
Q10。什么是Google Container Engine?
Google Container Engine(GKE)是一个用于Docker容器和集群的开源管理平台。这种基于Kubernetes的引擎仅支持在Google的公共云服务中运行的那些集群。
Q11。什么是堆?
Heapster是在每个节点上运行的Kubelet提供的数据的群集范围内的聚合器。该容器管理工具在Kubernetes集群上本身受支持,并且像集群中的任何其他集群一样作为Pod运行。因此,它基本上会发现群集中的所有节点,并通过计算机上的Kubernetes代理从群集中的Kubernetes节点查询使用情况信息。
Q12。什么是Minikube?
Minikube是一种可以轻松在本地运行Kubernetes的工具。这将在虚拟机中运行单节点Kubernetes集群。
Q13。什么是 Kubectl?
Kubectl是一个平台,您可以使用该平台将命令传递给集群。因此,它基本上提供了CLI以各种方式创建和管理Kubernetes组件,从而针对Kubernetes集群运行命令。
Q14。什么是Kubelet?
这是一个代理服务,它在每个节点上运行,并使从服务器能够与主服务器通信。因此,Kubelet致力于PodSpec中提供给它的容器的描述,并确保PodSpec中描述的容器是正常运行的。
Q15。您对Kubernetes中的节点了解什么?
1,Pod
- Pod 是 Kubernetes 的最小工作单元。
- 每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。
2,Kubernetes 引入 Pod 的两个目的
- 有些容器天生就是需要紧密联系,一起工作。Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。
- Kubernetes 以 Pod 为最小单位进行调度、扩展、共享资源、管理生命周期。
- Pod 中的所有容器使用同一个网络 namespace,即相同的 IP 地址和 Port 空间。它们可以直接用 localhost 通信。
- 同样的,这些容器可以共享存储,当 Kubernetes 挂载 volume 到 Pod,本质上是将 volume 挂载到 Pod 中的每一个容器。
3,Pod 的两种使用方式
- one-container-per-Pod 是 Kubernetes 最常见的模型,这种情况下,只是将单个容器简单封装成 Pod。
- 即便是只有一个容器,Kubernetes 管理的也是 Pod 而不是直接管理容器。
- 对于那些联系非常紧密,而且需要直接共享资源的容器,应该放在一个 Pod 中。
- 比如下面这个 Pod 包含两个容器:一个 File Puller,一个是 Web Server。File Puller 会定期从外部的 Content Manager 中拉取最新的文件,将其存放在共享的 volume 中。Web Server 从 volume 读取文件,响应 Consumer 的请求。这两个容器是紧密协作的,它们一起为 Consumer 提供最新的数据;同时它们也通过 volume 共享数据。所以放到一个 Pod 是合适的。
1,基本介绍
2,各个 Controller 介绍
- Deployment 是最常用的 Controller,比如我们可以通过创建 Deployment 来部署应用的。
- Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。
- ReplicaSet 实现了 Pod 的多副本管理。
- 使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。
- DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。
- StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,
- 当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。
- Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。
Q18。Service、Namespace
1,Service
- Deployment 可以部署多个副本,每个 Pod 都有自己的 IP。而 Pod 很可能会被频繁地销毁和重启,它们的 IP 会发生变化,用 IP 来访问 Deployment 副本不太现实。
- Service 定义了外界访问一组特定 Pod 的方式。Service 有自己的 IP 和端口,Service 为 Pod 提供了负载均衡。
2,Namespace
- default:创建资源时如果不指定,将被放到这个 Namespace 中。
- kube-system:Kubernetes 自己创建的系统资源将放到这个 Namespace 中。
二、基于架构的调度关系
三、基于场景的架构选择
附录
来啦!2020年您必须准备的40个Kubernetes(K8s)面试问题及答案
K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
---------------------------------------------------
作者:杨兮臣
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用闲暇时间,把自己毕生所学整理一下,感谢行业的技术大咖


浙公网安备 33010602011771号