3、pod
Pod 是能够在 Kubernetes 中创立和治理的、最小的可部署的计算单元。
Pod(就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个)容器;这些容器共享存储、网络、以及怎么运行这些容器的申明。Pod 中的内容总是并置(colocated)的并且一起调度,在共享的上下文中运行。Pod 所建模的是特定于利用的“逻辑主机”,其中蕴含一个或多个利用容器,这些容器是绝对严密的耦合在一起的。在非云环境中,在雷同的物理机或虚拟机上运行的利用相似于 在同一逻辑主机上运行的云利用。
除了利用容器,Pod 还能够蕴含在 Pod 启动期间运行的 Init 容器。你也能够在集群中反对临时性容器 的状况外,为调试的目标注入临时性容器。
应用 Pod
通常你不须要间接创立 Pod,甚至单实例 Pod。相同,你会应用诸如 Deployment 或 Job 这类工作负载资源 来创立 Pod。如果 Pod 须要跟踪状态,能够思考 StatefulSet 资源。
Kubernetes 集群中的 Pod 次要有 两种 用法:
运行单个容器的 Pod。” 每个 Pod 一个容器 ” 模型是最常见的 Kubernetes 用例;在这种状况下,能够将 Pod 看作单个容器的包装器,并且 Kubernetes 间接治理 Pod,而不是容器。
运行多个协同工作的容器的 Pod。Pod 可能封装由多个严密耦合且须要共享资源的共处容器组成的应用程序。这些位于同一地位的容器可能造成单个内聚的服务单元 —— 一个容器将文件从共享卷提供给公众,而另一个独自的“挂斗”(sidecar)容器则刷新或更新这些文件。Pod 将这些容器和存储资源打包为一个可治理的实体。
阐明:将多个并置、同管的容器组织到一个 Pod 中是一种绝对高级的应用场景。只有在一些场景中,容器之间严密关联时你才应该应用这种模式。
每个 Pod 都旨在运行给定应用程序的单个实例。如果心愿横向扩大应用程序(例如,运行多个实例 以提供更多的资源),则应该应用多个 Pod,每个实例应用一个 Pod。在 Kubernetes 中,这通常被称为 正本(Replication)。通常应用一种工作负载资源及其控制器 来创立和治理一组 Pod 正本。
Pod 怎么治理多个容器
Pod 被设计成反对造成内聚服务单元的多个合作过程(模式为容器)。Pod 中的容器被主动安顿到集群中的同一物理机或虚拟机上,并能够一起进行调度。容器之间能够共享资源和依赖、彼此通信、协调何时以及何种形式终止本身。
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器反对,以及一个独自的“sidecar(挂斗)”容器负责从远端更新这些文件,如下图所示:
4、ReplicaSet
ReplicaSet 的目标是保护一组在任何时候都处于运行状态的 Pod 正本的稳固汇合。因而,它通常用来保障给定数量的、完全相同的 Pod 的可用性。
ReplicaSet 的工作原理
RepicaSet 是通过一组字段来定义的,包含一个用来辨认可取得的 Pod 的汇合的抉择算符,一个用来表明应该保护的正本个数的数值,一个用来指定应该创立新 Pod 以满足正本个数条件时要应用的 Pod 模板等等。每个 ReplicaSet 都通过依据须要创立和 删除 Pod 以使得正本个数达到期望值,进而实现其存在价值。当 ReplicaSet 须要创立 新的 Pod 时,会应用所提供的 Pod 模板。
ReplicaSet 通过 Pod 上的 metadata.ownerReferences 字段连贯到从属 Pod,该字段给出以后对象的属主资源。ReplicaSet 所取得的 Pod 都在其 ownerReferences 字段中蕴含了属主 ReplicaSet 的标识信息。正是通过这一连贯,ReplicaSet 晓得它所保护的 Pod 汇合的状态,并据此打算其操作行为。
ReplicaSet 应用其抉择算符来辨识要取得的 Pod 汇合。如果某个 Pod 没有 OwnerReference 或者其 OwnerReference 不是一个 控制器,且其匹配到 某 ReplicaSet 的抉择算符,则该 Pod 立刻被此 ReplicaSet 取得。
示例:
[root@k8s-master-node1 ~/yaml/test]# vim pod.yaml [root@k8s-master-node1 ~/yaml/test]# cat pod.yaml apiVersion: apps/v1kind: ReplicaSetmetadata: name: frontend labels: app: guestbook tier: frontendspec: # modify replicas according to your case replicas: 3 selector: matchLabels: tier: frontend template: metadata: labels: tier: frontend spec: containers: - name: nginx image: nginx[root@k8s-master-node1 ~/yaml/test]#
创立
[root@k8s-master-node1 ~/yaml/test]# kubectl apply -f pod.yaml replicaset.apps/frontend created
查看
[root@k8s-master-node1 ~/yaml/test]# kubectl get podNAME READY STATUS RESTARTS AGEfrontend-8zxxw 1/1 Running 0 2m26sfrontend-l22df 1/1 Running 0 2m26sfrontend-qnhkr 1/1 Running 0 2m26s[root@k8s-master-node1 ~/yaml/test]#
删除
[root@k8s-master-node1 ~/yaml/test]# kubectl delete -f pod.yaml replicaset.apps "frontend" deleted[root@k8s-master-node1 ~/yaml/test]#
https://blog.csdn.net/qq_3392…
https://my.oschina.net/u/3981543
https://www.zhihu.com/people/…
https://segmentfault.com/u/hp…
https://juejin.cn/user/331578…
https://space.bilibili.com/35…
https://cloud.tencent.com/dev…
知乎、CSDN、开源中国、思否、掘金、哔哩哔哩、腾讯云
本文应用 文章同步助手 同步