认识 Pod
Pod是Kubernetes的最基本操作单元,也是应用运行的载体,包含一个到多个密切相关的容器。整个Kubernetes系统都是围绕着Pod展开的,比如如何运行Pod、如何保证Pod的数量、如何访问Pod等。
特点:
·pod是对象;
最小的部署单元,最基本的管理单元;
一组容器的集合;(为便于管理,生产环境一般情况是放一个容器)
一个pod中的容器共享网络命名空间,相当于小型局域网;
pod是有生命周期的,所以是短暂的
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
--c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 30
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
定义文件中Pod的主要要素如下:
1)apiVersion:Kubernetes的API版本声明,目前是v1。
2)kind:API对象的类型声明,当前类型是Pod。
3)metadata:设置Pod的元数据。
■ name:指定Pod的名称,Pod名称必须在namespace内唯一,需符合RFC1035规范。
■ namespace:命名空间,不指定时将使用名为“default”的命名空间。
■ labels:自定义标签属性列表。
可根据需要对所创建的Pod自定义标签,再利用Service或者ReplicationController的Label Selector来选择自定义的Pod。
4)spec:配置Pod的详细描述。
■ containers:Pod中运行的容器列表,数组形式,每一项定义一个容器。
■ name:指定容器的名称,在Pod的定义中唯一。
■ image:设置容器镜像名,在Node上如果不存在该镜像,则Kubelet会先下载。
■ command:设置容器的执行命令。
Pod容器的分类
官方网站:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
1: infrastructure container 基础容器
维护整个Pod网络空间
查看容器的网络
# docker ps -a
registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
在kubelet配置文件中已经定义好了
# cat /opt/kubernetes/cfg/kubelet
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0
基础容器跟着kubelet一起产生的
Kubelet创建好了之后 去提交申请给master,master同意证书许可颁发的时候,开始建基础容器,基础容器有了之后,在建初始化容器,加载完初始化容器,再加载业务容器
2:initcontainers 初始化容器
先于业务容器开始执行
在之前版本,初始化容器与业务容器是并行开启的,现在进行了改进
3:container 业务容器
业务容器就是真正提供服务的
app容器就是业务容器
apply和create都可以创建资源,不过 apply还可以更新资源
镜像拉取策略(image PullPolicy)
Pod被分配到Node之后会根据镜像下载策略进行镜像下载,因此,用户可以根据自身集群的特点来决定采用何种下载策略。无论何种策略,都要确保Node上有正确的镜像可用。
有以下3种:
IfNotPresent: 默认值,镜像在本地没有的时候才下载镜像。
Always: 每次创建Pod都会重新拉取一次镜像,每次都下载最新的镜像。
Never: Pod永远不会主动拉取这个镜像,只使用本地镜像,从不下载。
示例:
# vim pod1.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: Always
定义镜像拉取策略为Always
定义了镜像拉取策略是Always,也就是说,每次创建Pod都会重新拉取一次镜像
创建启动pod
# kubectl create -f pod1.yam