k8s - Pod
什么是Pod?Pod是k8s中的最小调度单元,通过自定义一个pod,在里面运行容器,容器需要指定镜像。就可以运行具体的服务器。同一个pod共享网络和存储。Pod网络pod 有具体的IP地址,每一个pod都被分配唯一的地址。pod中的容器共享一个命名空间,pod中的容器可以使用local host相互通信。Pod存储创建pod时可以指定存储卷,pod中的所有容器够可以访问共享卷,允许这些容器共享数据
什么是Pod?
Pod是k8s中的最小调度单元,通过自定义一个pod,在里面运行容器,容器需要指定镜像。就可以运行具体的服务器。同一个pod共享网络和存储。
Pod网络
pod 有具体的IP地址,每一个pod都被分配唯一的地址。pod中的容器共享一个命名空间,pod中的容器可以使用local host相互通信。
Pod存储
创建pod时可以指定存储卷,pod中的所有容器够可以访问共享卷,允许这些容器共享数据。挂载持久化存储卷后,pod重启后还会存在。
自主式Pod
自主式Pod就是直接定义一个Pod资源:
#pod属于k8s核心组v1
apiVersion: v1
#创建的是一个Pod资源
kind: Pod
#元数据
metadata:
#pod名字
name: demo-pod1
#pod所属的名称空间
namespace: default
labels:
#pod具有的标签
app: myapp
#pod具有的标签
env: dev
spec:
#定义一个容器,容器是对象列表,下面可以有多个name
containers:
#容器的名字
- name: tomcat-pod-java
ports:
#容器内部的port
- containerPort: 8080
#容器使用的镜像
image: tomcat:8.5-jre8-alpine
#镜像拉取策略
imagePullPolicy: IfNotPresent
- name: busybox
image: busybox:latest
#command是一个列表,定义的时候下面的参数加横线
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
创建pod
kubectl apply -f dome.yaml
控制器管理的Pod
常见的管理Pod的控制器:Replicaset、Deployment、Job、CronJob、Daemonset、Statefulset。
控制器管理的Pod可以确保Pod始终维持在特定的副本数量运行。
如果使用自主Pod部署的pod,当pod删除后kubectl 不能自动恢复。
使用控制器部署的pod删除后会自动创建,副本维持在设定的数量。
创建一个pod的流程
master节点: kubectl -> kube-api -> kubelet -> CRI容器初始化
1. 客户端提交pod创建请求,可以通过调用API server 的Rest API接口。也可以通过kubectl命令行工具。 kubectl apply -f dome.yaml
2. apiserver 接收到创建Pod请求后,把yaml中的属性记录到etcd数据库中。
3. apiserver 触发watch机制准备创建Pod,信息发送给调度器scheduler,调度器使用调度算法选择node调度器将node信息给apiserver,apiserver 将绑定的node信息写入etcd
调度器用一组规则过滤掉不符合要求的主机,比如pod要求的资源等。
scheduler 查看 k8s api
首先判断节点是否为空 pod.spec.Node == null?
如果是null,代表这个pod是新的,为他调度新的节点。 pod.spec.Node == NodeA
其他依次类推
4. apiserver 又通过watch机制,调用kubelet,指定pod信息,调用docker API 创建并启动Pod内的容器。
5. 创建完成后反馈给kubelet,kubelet又将pod信息给apiserver, apiserver 把pod的状态信息写入 etcd。
更多推荐
所有评论(0)