Kubernetes Container环境为容器提供了几个重要资源:
- 文件系统,融合了image和一个或多个vulume。
- 有关Container本身的信息。
- 有关群集中其他对象的信息
Container 的主机名是运行Container的Pod的名称。它可以通过 libc中的hostname
命令或 gethostname
函数调用获得
Pod名称和命名空间可通过downloadAPI作为环境变量使用
Pod定义中的用户定义环境变量也可用于Container,Docker镜像中静态指定的任何环境变量也是如此。
创建Container时运行的所有服务的列表可作为环境变量用于该Container。
RuntimeClass是一个alpha特点,用于选择容器运行的配置来运行pod容器。
必须采取一些额外的设置步骤才能使用RuntimeClass功能:
- 启用RuntimeClass功能(在apiservers和kubelets上,需要1.12+版本)
- 安装RuntimeClass CRD
- 在节点上配置CRI实现(运行时依赖)
- 创建相应的RuntimeClass资源
使用RuntimeClass选择的配置依赖于CRI实现。
kubernates在容器的生命周期中也提供了钩子(回调方法),在container的生命周期中基于事件响应来触发钩子,触发的时候就运行钩子里的代码。
容器暴露两种钩子
PostStart:容器创建完之后运行。不保证在容器ENTRYPOINT之前执行。不会传递参数
prepost:容器终止之前执行。调用容器删除之前必须完成,它是阻塞的。
钩子的实现:容器要访问一个钩子就要对他进行实现并且注册一个handler。hook handler有两种实现。
exec:执行命令
http:执行http请求
hook handler的执行:在生命周期中钩子要是被触发了,那么就执行里面的 hook handler
hook handler被同步调用执行。对于PostStart这个钩子来说,如果执行的时间太长那么容器就不会是running的状态了。对于prepost来说,要是执行的时间太长,超时了之后就会被强制关闭。PostStart 或者 prepost如果有一个失败了,那么就直接停止容器。
应尽量保持hook handlers是轻量级的
会多次调用hook知道他执行完成。但是大多数情况下都会调用一次,很少会多次调用。比如在发送钩子的时候kubelet重启了,那么重启之后可能会再发一次