Kubernetes基本概念和术语(3)

1.10 Volume (存储卷)

Volume Pod 中能够被多个容器访问的共享目录。 Kubemetes Volume 概念、用途和目的与 Docker Volume 比较类似,但两者不能等价.

Kubemetes的Volume有以下特性:

  • Kubemetes 中的Volume 定义在 Pod上,然后被 Pod 里的多个容器挂载到具体的文件目录下;
  • Kubemetes 中的 Volume与Pod 的生命周期相同,但与容器的生命周期不相关,当容器终止或者重启时, Volume 中的数据也不会丢失。
  • Kubemetes 支持多种类型的 Volume ,例如 GlusterFS Ceph 等先进的分布式文件系统.

一个 Pod里的多个容器共享文件、让容器的数据写到宿主机的磁盘上或者写文件到网络存储中,kubernetes Volume 还扩展出了 种非常有实用价值的功能,即容器配置文件集中化定义与管理,这是通过 ConfigMap 个新的资源对象来实现的。

  1. emptyDir:
    一个emptyDir Volume 是在 Pod 分配到 Node 时创建的。
  2. hostPath:
    hostPath 为在 Pod 上挂载宿主机上的文件或目录,
  3. gcePersistentDisk
    使用这种类型的 Volume 表示使用谷歌公有云提供的永久磁盘( Persistent Disk, PD )存放Volume 的数据,它 mptyD 不同, PD 上的内容会被永久保存, Pod 被删除时, PD 只是被卸载(Unmount ),但不会被删除.
  4. awsElasticBlockStore
    该类型的 Volume 使用亚马逊公有云提供的 EBSVolume 存储数据, 需要先建一个 BS Volume 才能使用 awsElasticBlockStore.
  5. NFS
    使用 NFS网络文件系统提供的共享目录存储数据时,我们需要在系统中部署一个NFS Server.
  6. 其他类型的 Volume
    iscsi :使用 iSCSI 存储设备上的目录挂载到 Pod中.
    flocker :使用 Flocker 来管理存储卷。
    glusterfs :使用开源 GlusterFS 网络文件系统的目录挂载到 Pod中.
    rbd :使用 Ceph 块设备共享存储( Rados Block evice )挂载到 Pod
    gitRepo :通过挂载一个空目录,并从 GIT中clone git reposit可以供 Pod 使用
    secret:一个secre volume 用于为Pod 提供加密的信息,你可以将定义在 Kubemetes secret 直接挂载为文件让 Pod访问。 secret volume 是通过tmfs(内存文件系统)实现的,所以这种类型的 volume 总是不会持久化的.

1.11 Persistent Volume

PV 可以理解成 Kubemetes 集群中 的某个网络存储中对应的一块存储,它与 Volume 类似,但有以下区别。

  • PV 只能是网络存储,不属于任何 Node ,但可以在每个 Node 上访问
  • PV 井不是定义在 Pod 上的 ,而是独立于 Pod 之外定义。
  • PV 目前 支持 类型包括:gcePersistentDisk、AWSElasticBlockStore、AzureFile、AzureDisk、FC ( Fibre Channel)、Flocker、NFS、iSCSI、RBD (Rados Block Device )、CephFS、Cinder、GlusterFS、Vsphere Volume、Quobyte Volumes、VMware Photon、Portwonc Volumes、ScaleIO Volumes和HostPath (仅供单机测试)。

PV 是有状态的对象,它有以下几种状态。

  • Available :空闲状态。
  • Bound :己经绑定到某个 PVC 上。
  • Released :对应的 PVC 己经删除,但资源还没有被集群收
  • Failed: PV 自动回收失败。

1.12 Namespace (命名空间)

Namespace (命名空间〉是 ubemetes 系统中的另一个非常重要的概念, Namespace 在很多情况下用于实现多租户的资源隔离。 Namespace 通过将集群内部的资源对象“分配”到不同的Namespace 中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。

当我们给每个租户创建一个 Namespace 来实现多租户的资源隔离时,还能结合 kubernetes的资源配额管理,限定不同租户能占用的资源,例如 CPU 使用量、内存使用量等。

Kubemetes 集群在启动后,会创建一个名为“default ”的 Namespace

下面展示YAML定义Namespace:

apiVersion: v1 
kind: Namespace 
metadata: 
  name: development

定义了一个名为 busybox Pod ,放入 development
上面创建Namespace 里:

apiVersion: v1 
kind: Pod 
metadata: 
  name: busybox 
  namespace: development 
spec: 
 containers: 
 - image : busybox 
   command: 
    - sleep 
    - "8080" 
 name: busybox

使用 kubectl get 命令查看将无法显示:

$ kubectl get pods 
NAME READY STATUS RESTARTS AGE

可以在 kubectl 命令中加入–namespace 参数来查看某个命名空间中的对象:

# kubectl get pods --namespace=development 
NAME    READY STATUS  RESTARTS AGE 
busybox 1/1   Running 0        1m

1.13 Annotation (注解)

Annotation Label 类似,也使用 key/value 键值对的形式进行定义。不同的是 Label 具有严格的命名规则,它定义的是 Kubernetes 对象的元数据( Metadata ),并且用于 Label Selector.

通常来说,用 Annotation 来记录的信息如下。

  • build 信息、 release 信息、 Docker 镜像信息等,例如时间戳、 release id 号、 PR 号、镜像hash 值、 docker registry地址等.
  • 日志库、监控库、分析库等资源库的地址信息。
  • 程序调试工具信息,例如工具名称、版本号等。
  • 团队的联系信息,例如电话号码、负责人名称、网址等。

你可能感兴趣的:(Docker&K8S)