-2. sc和pvc

1、StorageClass(SC):用来描述存储的类别和参数的 Kubernetes 资源对象。
它允许管理员定义不同类型的存储,例如云存储、网络存储(比如NFS)或本地存储,并指定不同存储类型的参数,例如存储的性能、卷的复制策略等。

StorageClass 的定义使得用户可以声明他们的应用程序需要什么类型的存储,而无需关心底层的存储实现细节。
当 PVC 请求创建 PersistentVolume(PV)时,系统会根据 PVC 的 StorageClass 来选择合适的 PV。如果不存在匹配的 PV,则根据 StorageClass 的定义动态创建 PV。

2、PersistentVolumeClaim(PVC):用来声明应用程序需要持久性存储的 Kubernetes 资源对象。
开发人员通过创建 PVC 来请求持久性存储资源,而不必直接管理底层的存储资源。
PVC 具有一组参数,描述了所需的存储容量、访问模式、存储类别等。
当 PVC 被创建并提交给 Kubernetes 集群时,Kubernetes 控制平面会尝试根据 PVC 的要求选择合适的 PV,并将其绑定到 PVC 上,从而使得 PVC 可以使用对应的 PV 提供的存储资源。

有一种简单粗暴的理解:
SC,是存储资源池; PVC,是从资源池中申请的资源。

-1.nfs

NFS(Network File System)是一种分布式文件系统协议。NFS是UNIX 和类 UNIX 系统中最常用的网络文件系统之一。

NFS 使用客户端-服务器模型,其中文件存储在服务器上,客户端可以通过网络连接访问这些文件。NFS 允许客户端系统像访问本地文件一样访问远程文件,使得用户和应用程序可以透明地访问远程系统上的文件资源。通过 NFS,用户可以像使用本地文件系统一样进行文件读写、复制、删除等。

NFS 基于共享的文件系统概念来提供文件访问服务,支持跨平台操作,并提供了一种灵活的方式来共享文件资源,使得多台计算机可以共享和协作使用同一组文件。

总之:NFS 是Linux层的概念

0 基本概念

Pod 是最小调度单元

Pod 是K8的最小调度单元。部署一个容器可能容易,但是每个容器都不同配置和功能,k8需要对容器进行管理。为了避免在容器这个实体上增加更多概念,k8s引入了 pod 。

同时,Pod中容器共享 Pause/Infra 容器的IP和Volume ,方便解决紧密耦合的容器间通信问题和文件共享问题。

Pod通信

Pod内容器共享一个IP,容器之间用localhost就能通信。一个K8的任意两个Pod间可以直接TCP/IP通信 (注意:两个Pod可能在不同宿主机上)

配置管理

借助k8的 configMap实现配置和程序分离

生命周期和重启策略
  • Pod状态 pending | running | succeeded | failed
  • 重启策略
    • Always (容器失效自动重启)
    • Never
    • Onfailure(容器返回非0状态码重启)
  • 健康探针
    • liveness
    • readiness
定向调度
  • NodeSelector
  • NodeAffinity (节点亲和度)
  • PodAffinity (Pod亲和度)
  • DaemonSet (每个节点仅一份,用于监控、收集日志)
优先级抢占调度
  • 驱逐(eviction )
  • 抢占(Preemption)
控制器
  • Deployment
  • ReplicaSet
  • DaemonSet
  • StateFulSet
    有状态的服务。
    • pod重新调度之后依然能访问到相同的持久化数据
    • pod重新调度之后,podNameHostName不变,基于Headless service实现
    • pod启动是有序的,依据顺序依次进行,只有前一个pod启动成功之后,下面才能继续进行
  • Job/CronJob
  • Horizontal Pod Autoscaling
    • 水平自动扩缩容

1. 啥叫headless service

service的作用,主要是代理一组pod容器负载均衡服务,但是有时候我们不需要这种负载均衡场景,比如下面的两个例子。

  • 比如kubernetes部署某个kafka集群,这种就不需要service来代理,客户端需要的是一组pod的所有的ip。
  • 还有一种场景客户端自己处理负载均衡的逻辑,比如kubernates部署两个mysql,有客户端处理负载请求,或者根本不处理这种负载,就要两套mysql。

基于上面的两个例子,kubernates增加了headless serivces功能,字面意思无service其实就是改service对外无提供IP

2.一个容器可以起多个进程?

首先,一个容器中当然可以有多个进程. 最典型的, 你的Java应用跑在这个容器中,然后你打开一个vim editor ,又多了一个进程… 这种问法是没理解容器的实质.

Docker 容器 实际上是在创建容器进程时,指定了这个进程所需要启用的一组 Namespace 参数。这样,容器就只能“看”到当前 Namespace所限定的资源、文件、设备、状态,或者配置。而对于宿主机以及其他不相关的程序,它就完全看不到了。

所以, 容器,就是一种特殊的进程

Logo

开源、云原生的融合云平台

更多推荐