上节课我们学习了YAML的语法,这节课我们来用YAML语法来实际创建一个pod对象,来加深对YAML和POD的理解。
首先,先了解下什么是POD?
Kubernetes中的Pod是最小调度单元,包含一个或多个共享网络和存储资源的容器。这些容器始终共同调度,通过localhost直接通信,并作为整体进行管理。从下图可以分析出,K8S只管理到POD层级,POD里面又包含了contained、docker等底层容器,但是这就不属于K8S的管理范畴。
实际创建一个POD
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
-
apiVersion,这里它的值是 v1,这个版本号需要根据我们安装的 kubernetes 版本和资源类型进行变化的,记住不是写死的
-
kind,这里我们创建的是一个 Pod,当然根据你的实际情况,这里资源类型可以是 Deployment、Job、Ingress、Service 等待。
-
metadata:包含了我们定义的 Pod 的一些 meta 信息,比如名称、namespace、标签等等信息。
-
spec:这里包括一些 containers,storage,volumes,或者其他 Kubernetes 需要知道的参数,以及诸如是否在容器失败时重新启动容器的属性。你可以在特定 Kubernetes API 找到完整的 Kubernetes Pod 的属性。
在上述例子当中,这是一个简单的最小定义:一个名字(front-end),基于 nginx 的镜像,以及容器 将会监听的一个端口(80)。在这些当中,只有名字是非常需要的,你也可以指定一个更加复杂的属性,例如在容器启动时运行的命令,应使用的参数,工作目录,或每次实例化时是否拉取映像的新副本。
以下是一些容器常用可选的设置属性:
- name 名称
- image 镜像地址
- command 启动后执行命令
- args 参数
- workingDir 工作区域
- ports 端口
- env 环境变量
- resources 资源
- volumeMounts 挂载卷
- livenessProbe 存活探针
- readinessProbe 就绪探针
- StartupProbe 启动探针
- volumes
这些属性后面会有单独的章节来讲解。
运用这个yaml文件
kubectl apply -f pod.yaml
查看pod
root@k8s-master:~# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 0/1 ImagePullBackOff 0 98s
这里发现有报错,pod的状态为ImagePullBackOff,这是为什么?
其实通过ImagePullBackOff 可以得知,这提示了表示镜像无法下载。这是由于现在docker的默认仓库是docker hub,但是现在国内网络经常无法访问,所以将上面的镜像地址修改为daocloud镜像地址。
image: nginx
修改为
image: m.daocloud.io/docker.io/nginx
然后删除后再次执行apply命令。发现pod已经启动成功。