【kubernetes笔记】k8s_Pod简介(03)
Page content
这一篇整理了Pod基本概念。
1.Pod 概述
- k8s系统中可以创建和管理的最小单元,
- 包含多个容器(一组容器的集合)
- 一个Pod中容器共享网络命名空间(共享网络和存储)
- Pod的生命周期短暂
2.Pod 的机制
-
共享网络是通过Pause(根容器),把其他业务容器加入到Pause(根容器),
让所有业务员容器在同一个命名空间中,实现网络共享。 -
使用数据卷(volume)持久化数据。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: test1
image: centos
command: []
volumeMounts:
- name: data
mountPath: /data
- name: test2
image: centos
command: []
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
3.Pod的声明周期和重启策略
3.1 Pod声明周期
Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。
Pending(悬决)
Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。Running(运行中)
Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。Succeeded(成功)
Pod 中的所有容器都已成功终止,并且不会再重启。Failed(失败)
Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。Unknown(未知)
因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。
3.2 重启策略
Always
: 当容器失效时,由kubelet自动重启容器。Never
: 当容器终止运行且退出码部位0时,由kubelet自动重启容器。OnFailure
: 不论容器运行状态如何,kubelet都不会重启容器。
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: test1
image: test1:latest
args:
- /bin/sh
restartPolicy: Always
4.Pod 镜像拉取和资源配置
4.1 镜像拉取
IfNotPresent
: 默认值,镜像不存在时拉取Always
: 每次创建Pod都会重新拉取Never
: Pod永远不会主动拉取镜像
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: Always
4.2 资源配置
- spec.containers[].resources.requests.cpu
- spec.containers[].resources.requests.memory
- spec.containers[].resources.limits.cpu
- spec.containers[].resources.limits.memory
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: db
image: mysql:latest
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
resources:
requests:
cpu: "250m"
memory: "64Mi"
limits:
cpu: "500m"
memory: "128Mi"
5.健康检测
- livenessProbe(存活检查)
如果检查失败,将kill容器,根据Pod的restartPolicy来操作。 - readinessProbe(就绪检查)
如果检查失败,Kubernetes会把Pod从Service endpoints中剔除。
Probe支持的三种检测方式
httpGet
: 发送HTTP请求,返回200-400范围状态码为成功exec
: 执行Shell命令返回状态码是0为成功tcpSocket
: 发起TCP Socket建立成功
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: test1
image: test1:latest
args:
- /bin/sh
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
欢迎大家的意见和交流
email: li_mingxie@163.com