Kubernetes Pod入门
什么是Pod
是一个或多个容器的组合。这些容器共享存储、网络和命名空间,以及运行规范。在Pod中,所有容器都被统一安盼和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。所以,pod是一组具有共享命名空间、IP地址和端口的容器的集合
每个Pod还包含一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理。同时,通过Pause容器可以使同一个Pod里面的不同容器共享存储、网络等
Pod的状态
状态 | 含义 |
---|---|
Pending(挂起) | Pod已经被kubernetes系统接收,但是仍有一个或多个容器未被创建,可以通过kubectl describe查看原因 |
Running(运行中) | Pod已经被绑定到一个节点上,并且所有容器都已经被创建,而且至少有一个是运行状态、正在启动或重启 |
Suceeded | 所有容器执行成功并终止,且不会再次重启 |
Failed(失败) | 所有容器都已终止,并且至少有一个容器以失败的方式终止 |
Unknown(未知) | 通常因为通信问题造成的无法获得Pod的状态 |
ImagePullBackOffErrImagePull | 镜像拉取失败 |
OOMKilled | 容器内存溢出 |
Terminating | Pod正在被删除 |
SysctlForbiden | 内核参数不支持 |
Completed | 容器内部主进程退出 |
ContainerCreating | 容器创建中 |
ku exec nginx -c nginx -- bash
// --指定要运行的命令:
LivenessProbe:存活探针,判断容器是否正常运行,如果失败则杀掉容器,再根据重启策略决定是否重启容器
redinessProbe:就绪探针,判断容器是否能进入reday状态,失败进入noready状态,并从service的endpoints中剔除此容器
startupProbe:启动探针,判断容器内的应用是否应用成功,在success状态前,所有探针处于无效状态
镜像拉取策略 | |
---|---|
Always | 无论本地是否有镜像,都在网上拉取 |
Never | 不在网上拉取镜像 |
IfNotPressent | 当本地没有镜像时,从网上下载 |
Pod重启策略 | |
---|---|
Always | 默认策略,容器失效时,自动重启该容器 |
OnFailure | 容器以不为零的状态码终止,自动重启该容器 |
Nerver | 从不重启 |
编写一个简单的Pod
nginx-pod.yaml
apiVersion: v1 //接口版本
kind: Pod //类型
metadata: //元数据
name: nginx //pod名
labels: //标签
name: nginx
spec: //规格
containers: //指定容器的参数
- name: nginx //容器名从
image: nginx:1.7.9 //指定镜像
ports: //暴露的端口
- containerPort: 80
通过kubectl create名令创建此Pod
kubectl create pod -f nginx-pod.yaml
查看已创建的pod
kubectl get pod
查看pod的详细创建信息
kubectl describe pod nginx-pod
删除pod
kubectl delete -f nginx-pod.yaml
Pod的基本用法
编写Pod文件,将两个容器放在同一个Pod中
apiVersion: v1
kind: Pod
metadata:
name: nginx-php
labels:
name: nginx-php
spec:
containers:
- name: nginx-app
image: nginx:1.7.9
ports:
- containerPort: 80
- name: php-app
image: bitnami/php-fpm
imagePullPolicy: Never
ports:
- containerPort: 9000
部署Pod文件
kubectl apply/create -f yaml文件
查看Pod详细信息
kubectl descirbe Pod pod名称
暴露端口
kubectl expose pod Pod名称 --port=8080 --target-port=80 --type
查看端口映射
kubectl get pod,svc Pod名称 -o wide
静态pod
将编写好的yaml文件放置在/etc/kubernetes/manifests目录下
使用kubectl get pod
获取所有pod,会发现刚刚根据放在目录下的文件启动的容器,并且该容器会开机自启动
删除静态Pod,删除被移动到/etc/kubernetes/manifests目录下的文件即可,原有的不要动