Kubernetes学习-相关概念

Kubernetes架构图

上图可以看到如下组件,使用特别的图标表示Service和Label:

    • Pod
    • Container(容器)
    • Label(label)(标签)
    • Replication Controller(复制控制器)
    • Service(enter image description here)(服务)
    • Node(节点)
    • Kubernetes Master(Kubernetes主节点)

Pod

  Pod 是Kubernetes的基本操作单元,也是应用运行的载体。整个Kubernetes系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。另外,Pod是一个或多个机关容器的集合,提供了一种容器的组合的模型。

 Pod(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。

    • Pod是短暂的,容器重启会造成数据丢失对于需要持久化的数据,因为Kubernetes支持的概念,故可以使用持久化的卷类型。这样就能持久化容器数据使其能够跨重启而存在。
    • 创建Pod时可以手动创建单个Pod,也可以使用Replication Controller使用Pod模板创建出多份拷贝。
    • Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service。

 Pods提供两种共享资源:网络和存储。
网络:
  每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。
  Pod内的容器可以使用localhost相互通信。
  当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。
存储:
  Pod可以指定一组共享存储volumes。
  Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。
  volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。

  • 基本操作

  创建  kubectl create -f xxx.yaml

  查询  kubectl get pod yourPodName  kubectl describe pod yourPodName

  删除  kubectl delete pod yourPodName

  更新  kubectl replace /path/to/yourNewYaml.yaml

  •  Pod与容器

  在Docker中,容器是最小的处理单元,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux Namespace实现的。而在Kubernetes中,Pod包含一个或者多个相关的容器,Pod可以认为是容器的一种延伸扩展,一个Pod也是一个隔离体,而Pod内部包含的一组容器又是共享的(包括PID、Network、IPC、UTS)。除此之外,Pod中的容器可以访问共同的数据卷来实现文件系统的共享。

  • Pod与Controller

  Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。如果一个Node故障,Controller就能自动将该节点上的Pod调度到其他健康的Node上。

  • 镜像

  在kubernetes中,镜像的下载策略为:

    Always:每次都下载最新的镜像

    Never:只使用本地镜像,从不下载

    IfNotPresent:只有当本地没有的时候才下载镜像

  Pod被分配到Node之后会根据镜像下载策略进行镜像下载,可以根据自身集群的特点来决定采用何种下载策略。无论何种策略,都要确保Node上有正确的镜像可用。

  •  其他

  通过yaml文件,可以在Pod中设置:

    启动命令,如:spec-->containers-->command;

    环境变量,如:spec-->containers-->env-->name/value;

    端口桥接,如:spec-->containers-->ports-->containerPort/protocol/hostIP/hostPort(使用hostPort时需要注意端口冲突的问题,不过Kubernetes在调度Pod的时候会检查宿主机端口是否冲突,比如当两个Pod均要求绑定宿主机的80端口,Kubernetes将会将这两个Pod分别调度到不同的机器上);

    Host网络,一些特殊场景下,容器必须要以host方式进行网络设置(如接收物理机网络才能够接收到的组播流),在Pod中也支持host网络的设置,如:spec-->hostNetwork=true;

    数据持久化,如:spec-->containers-->volumeMounts-->mountPath;

    重启策略,当Pod中的容器终止退出后,重启容器的策略。这里的所谓Pod的重启,实际上的做法是容器的重建,之前容器中的数据将会丢失,如果需要持久化数据,那么需要使用数据卷进行持久化设置。Pod支持三种重启策略:Always(默认策略,当容器终止退出后,总是重启容器)、OnFailure(当容器终止且异常退出时,重启)、Never(从不重启);

  •  Pod生命周期

  Pod被分配到一个Node上之后,就不会离开这个Node,直到被删除。当某个Pod失败,首先会被Kubernetes清理掉,之后ReplicationController将会在其它机器上(或本机)重建Pod,重建之后Pod的ID发生了变化,那将会是一个新的Pod。所以,Kubernetes中Pod的迁移,实际指的是在新Node上重建Pod。

猜你喜欢

转载自www.cnblogs.com/shanrenshiwoshifu/p/9044655.html