深入理解Pod的字段

我们知道pod中可以定义volume用于挂载在容器中。目前,K8S有4种比较特殊的volume。

1,Secret ;2 ConfigMap; 3,DownwardAPI;4, ServiceAccountToken。今天我们来学习这4种特殊的挂载卷,和来看 Pod 的另一个重要的配置:容器健康检查和恢复机制两种探针。注意:今天学的这些都是定义在pod层面上的东西。

Secret

secret是把你pod想访问的数据存放到etcd中,然后你就可以通过pod挂载的secret来访问这些数据了,例如 用户名,密码,租户信息。一般的,k8s只会对这些数据进行转码,具体的加密方式我们可以用插件来实现。值得注意的是,这些数据在etcd中若是被修改,则这个secret volume也会被更新并且这个更新可能会存在延时,这是由kubelet组件在定时维护的。

ConfigMap

另外一种volume类型是ConfigMap。顾名思义,这是用于pod配置信息文件。用法和secret一样。你可以使 用 kubectl create configmap 从文件或者目录创建 ConfigMap,也可以直接编写 ConfigMap 对象的 YAML 文件。

Downward API

downward api的作用是让pod里的容器能够获取这个pod的信息,例如获取pod的labels信息。不过,这些信息只能是容器启动前pod就定义好的信息。例如进程的pid就不能获取到,如果要获取类似进程pid这种,那么你只能在pod里定义一个sidecar容器。

ServiceAccountToken

ServiceAccountToken用于你的pod创建一个client用于连接k8s,而pod里的容器就可以通过这个client来连接k8s从而调用k8s给的API。但是,访问k8s要解决API Server 的授权的问题,而ServiceAccountToken就是用于解决授权。所以实际上,ServiceAccountToken是一种特殊的secret。

一般的ServiceAccount会分为多种用户,用来定义不同的权限。为了方便,K8S为我们每个pod默认创建一个“服务账户”(default Service Account)。并且,任何一个运行在 Kubernetes 里的 Pod,都可以直接使用这个 默认的 Service Account,而无需显示地声明为容器挂载它。我们可以在describe pod中可以看到一个类型是 Secret、名为 default-token-xxxx 的 Volume,然后 自动挂载 在每个容器的一个固定目录上。

深入理解Pod的字段_第1张图片

所以说,Kubernetes 其实在每个 Pod 创建的时候,自动在它的 spec.volumes 部分添加上了默认 ServiceAccountToken 的定义,然后自动给每个容器加上了对应的 volumeMounts 字段。这个过程对于用户来说是完全透明的。 

livenessProbe(健康检查)

它的类型是exec,意思是容器启动后,会为容器执行某个操作,这个操作是可以自己定义的,例如是发一个请求的操作,或者查询某个文件的操作。根据操作返回的值来确定容器的状态是否健康。若不健康,则根据重启策略重启pod,并且我们重启的pod是不会跳到别的节点的。

readinessProbe(就绪检查)

这个探针用于觉得这个pod是否能被Service访问的到,而不影响pod的生命周期。

两种探针的区别非常重要,笔者曾经在华为实习答辩的时候就被问到。

你可能感兴趣的:(k8s,docker,kubernetes,容器,golang,后端)