pod(最小的可部署单元)
容器组(运行一个或多个容器)
Pod(容器组)是Kubernetes 中最小的可部署单元。
一个Pod(容器组)包含了一个应用程序容器(某些情况下是多个容器)、存储资源、
一个唯一的网络 iP 地址、以及一些确定容器该如何运行的选项。Pod 容器组代表了 Kubernetes 中一个独立的应用程中运行实例,该实例可能由单个容器或几个紧藕合在一
起的容器组成。
Docker 是 Kubernetes Pod 中使用最广泛的容器引擎;
Kubernetes Pod 同时也支诗其他类型的容器引擎
Kubernetes 集群中的Pod 存在如下两种使用途径
一个Pod 中只运行一个容器。"one-container-per-pod " 是Kubernetes 中最常见的使用方式。此时、可以认为 Pod容器组是该容器的 wrapper. Kubernetes 通过 Pod 管理容器,而不是直接管理容器。
一个pod中运行多个需要互相协作的容器。可以将多个紧密耦合、共享资源且始终在一起运行的容器编排在同一个Pod 中,
pod 副本(replicas)
一个pod可以被复制成多份,每一份可被称之为一个"副本”,这些副本-除了一些描述性的信息 (Pod的名字、uid 等)不一样以外,其它信息都是一样的,譬如Pod
内部的容器 容器数量,容器里面运行的应用等的这些信息都是一样的,这些副本提供同样的功能。
Pod 的“控制器“通常包含一个名为“replicas” 的厲性。“replicas”属性则指定了特定 Pod 的副本的数量,当前集群中该 Pod 的数量与该属性指定的值不一致时,k8s 会采取一些策路去使得当前状态满足配置的要求。
如何共享容器间的 网络?
每个容器有自己独立的网络,
java(容器一) 和 mysql (容器二) 不能通过 locallost连接(相当于容器一本身)
docker 连接同一网络 或 容器间 --links (/etc/host加链接容器ip)
如何共享文件系统?
docker 连接同一个 volume、
k8s 延伸出pod 来实现 网络、文件系统共享
pod 里面的 基础服务 pause 容器 是 多容器间实现 网络、文件系统共享的基础
控制器
在 Kubernetes 中,Pod 控制器是用于管理 Pod 生命周期的对象。它们可以确保指定数量和类型的 Pod 始终在运行。
无状态:nginx
有状态(statefulSet):mysql、redies
守护进程:日志收集
定时任务:
rc:replicationController
动态更新 pod副本数 、v1.11后被废弃,用replicaSet替代
repilcas = 3
Kubernetes 官方建议使用 RS (Replicaset)替代RC(ReplicationController)进行部署,RS 跟 RC 没有本质的不同,只是名字不一样,井且 RS 支持集合式的 selector
rs:replicaSet
相较于 replicationController 增加了 lable 和 selector 的机制、可以更为精确对某一个 pod打标签,后期可以只对 选中标签的pod进行操作
lable :app1 、app2 ,将lable为app2的pod的副本设置为 3个
如果你在 Pod 模板的 metadata.labels 部分定义了多个标签,
如 app=nginx、app2=gyk 和 app3=cnm,
那么 Kubernetes 将在创建每个 Pod 时都会包含这些标签。
这意味着,如果 replicas=3,
那么将会有三个 Pod,每个 Pod
都包含 app=nginx、app2=gyk 和 app3=cnm 这三个标签
在这个例子中,Deployment 将创建三个 Pod,
每个 Pod 都包含 app=nginx、app2=gyk 和 app3=cnm 这三个标签。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment1
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
app2: gyk
app3: cnm
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
在 Kubernetes 的 Deployment 配置中,
selector.matchLabels 定义了 Deployment
如何找到它应该管理的 Pod。
selector.matchLabels 是一个标签选择器,
它会匹配所有具有指定标签的 Pod。在你的例子中,
selector.matchLabels 是 {app: nginx},
这意味着这个 Deployment
将管理所有带有 app=nginx 标签的 Pod。
在你的配置中,template.metadata.labels
定义了由这个 Deployment
创建的每个 Pod 的标签,
包括 app: nginx、app2: gyk 和 app3: cnm。
因为这些 Pod 都有 app=nginx 标签,
所以它们都会被这个 Deployment 管理。