Kubernetes 必须知道的概念
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可以部署和
管理应用,查看各种资源,创建、删除和更新各种组件。