K8s

Kubernetes 必须知道的概念

2020-01-10  本文已影响0人  你好树洞先生

Kubernetes的几个重要概念

1.Cluster:

Cluster是计算、存储和网络资源的集合,K8S利用这些资源运行在

各种基于容器的应用。

2.Master

Master是Cluster的大脑,主要职责是调度,即决定将应用放在那里运行。

Master运行Linux操作系统,可以是物理机或者虚拟机。为了实现

高可用,可以运行多个Master。

3.Node

Node的职责是运行容器应用。Node由Master管理,Node负责监控并汇报容器

的状态,同时根据Master的要求管理容器的生命周期。Node运行

在Linux操作系统上,可以是物理机或者是虚拟机。

4.Pod

Pod是Kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的

容器会作为一个整体被Master调度到一个Node上运行。

K8S引入Pod的主要目的是:

(1)可管理性

kubernetes以Pod为最小单位进行调度、扩展、共享资源,管理

生命周期。

(2)通信和资源共享

Pod中的所有容器使用同一个网络namespace,即相同的IP地址和

Port空间。他们可以直接用localhost通信。同样的,这些容器可以

共享存储,当Kubernetes挂载volume到Pod,本质上是将volume挂载到

pod中的每一个容器。

Pods有两种使用方法:

(1)运行单一容器

one-container-per-Pod是Kubernetes最常见的模型,这种情况下,只是

将单个容器简单封装成Pod。即使是只有一个容器,K8S管理的也是

Pod而不是直接管理容器。

(2)运行多个容器

那些容器应该放到一个Pod中?

答:这些容器联系必须非常紧密,而且需要直接共享资源。

5.Controller

Kubernetes通常不会直接创建Pod,而是通过Controller来管理Pod的。

controller中定义了pod的部署特性,比如有几个副本、在什么样的

Node上运行等。

为了满足不同的业务场景,Kubernetes提供了多种Controller,包括

Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等。

(1)Deployment是最常用的Controller,比如在线程中就是通过创建Deployment

来部署应用的。Deployment可以管理Pod的多个副本,并确保Pod按照期望的状态运行。

(2)ReplicaSet实现了pod的多副本管理。使用Deployment时会

自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来

管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet。

(3)DaemonSet用于每个Node最多只运行一个pod副本的场景。正如其名称

揭示的,DaemonSet通常用于运行daemon。

(4)StatefuleSet能够保证pod的每个副本在整个生命周期中

名称是不变的,而其他Controller不提供这个功能。当某个pod发生故障

需要删除并重新启动时,pod的名称会发生变化,同时StatefulSet会保证

副本按照固定的顺序启动、更新或者删除。

(5)Job用于运行结束就删除的应用,而其他Controller中的pod

通常长期持续运行。

6.Service

1.Deployment可以管理Pod的多个副本,每个Pod都有自己的IP,外界如何访问

这些副本的?

要知道Pod很可能会被频繁的销毁和重启,他们的IP会发生变化,用

IP来访问不现实。

用的是Service。

Kubernetes Service定义了外界访问一组特定Pod的方式。

Service 有自己的IP和端口,Service为pod提供了负载均衡。

Kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别

由Controller和Service执行。

7.Namespace

如果有多个用户或项目组使用同一个Kubernetes Cluster,如何

将他们创建的Controller、pod等资源分开呢?

答案:Namespace

Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟Cluster,

每个Cluster就是一个Namespace。不同的Namespace里的资源是完全隔离的。

例子:

Kubernetes默认创建了两个Namespace。

> kubectl get namespace

NAME        STATUS  AGE

default      Active  17s

kube-system  Active  17s

注意:

default:创建资源时如果不指定,将被放到这个Namespace中。

kube-system:Kubernetes自己创建的系统资源将放到

这个Namespace中。

8.kubelet、kubeadm和kubectl

kubelet:运行在Cluster所有节点上,负责启动Pod和容器。

kubeadm:用于初始化Cluster。

kubectl: 是Kubernetes命令行工具。通过kubectl可以部署和

管理应用,查看各种资源,创建、删除和更新各种组件。

上一篇 下一篇

猜你喜欢

热点阅读