资讯专栏INFORMATION COLUMN

Kubernetes Container Environment

lscho / 2152人阅读

摘要:在一个所包含的中,的执行是同步的。这意味着,将会阻塞管理模块发送的其他操作指令,如果被阻塞,接下来的管理操作命令包括健康检查都会被阻塞,直到完成。只会影响本,不会对其他造成影响。的错误或者无反应被当做是失败,参数以传统请求的方式传递。

翻译自:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/con...

概述

本文主要描述下在kubernetes的node节点中,kubelet管理container涉及到的environment。我们可以通过kubernetes cluster api来创建&管理container,那么kubernetes container environment则为集群中的container添加一些属性来描述一些集群信息

集群 可以通过这些 集群信息 来感知所创建的应用。此外,kubernetes container environment提供了一些“hook”,container可将这些hook作为可选功能来使用,就好比传统系统中来处理系统信号一样,这些hook的设计初衷是为了能够在kubernetes中更加简单方便的创建稳定可扩展的应用。

另一个关于container environment的重要部分是关于 container内部使用的“文件系统”。在kubernetes中,这个”文件系统“是一个image和多个volume的集合。

接下来的内容会聊聊 提供给container使用的 ”集群信息“ 、container和管理模块交互时使用的 hook 以及 对应的生命周期。

容器信息(Cluster Information)

在container的environment中可分为两类,一类是描述container本身信息,另一类描述了系统中其他对象的信息。

container 信息(Container Information)

目前在container中,一个比较有用的environment是描述这个container所属pod的”pod name“。container的hostname被设置为这个 ”pod name“,可以通过hostname命令 或者 libc中的gethostname函数获取到。此外,用户自定义的environment同样可以在container被用户有效使用。

官方计划在将来扩充container environment所能包含的信息,比如 所能使用的memory、重启次数、已经任何能够从GET api获取到的信息。

集群信息(Cluster Information)

当一个container通过kubernetes api来创建时,当前kubernetes集群中所包含的所有service信息都被作为environment写入container内部。

比如,一个service叫做foo,他映射的container的端口为bar,那么对应的environment为:

FOO_SERVICE_HOST=
FOO_SERVICE_PORT=

官方会尽量保证每个service都有独立不变的ip,所以通过dns的形式来访问service是一个不错的方法。

Container Hooks

Container Hooks目前正在积极开放之中,官方想把他作为kubernetes管理系统中的可扩展插件。
Container Hooks为container提供了在其生命周期中所触发的event的信息。比如,当container 启动,触发了PostStart hook。它们和docker或者其他系统产生的event不同,比如,output event提供已经发生的事件的日志,input hook提供了正在发生的事情的实时通知,而不是已经发生的log。

Hook细节

目前有两个在使用的hook,两个推荐的hook:
PreStart - Proposed
在container创建前触发他,它将提供这样的信息:在本次调用结束后这个container将会被创建。 此hook没有参数传递给handler。

PostStart
在container创建后触发他。没有参数传递给handler

PostRestart - Proposed
当一个container restart时,而不失第一次start,在PostStart handler之前调用他。没有参数传递给handler。

PreStop
这个hook在一个container被终止之前被调用。这个事件handler是阻塞的,在消息发送给docker deamon来delete container之前完成。docker发送SIGTERM信号不会受影响。
一个名为”reason“的参数会发送给handler,表明是因为什么原因被终止,他的值有以下:

Delete :表明有一个api的调用来删除这个pod

Health :表明对这个container的健康检查失败了。

Dependency :这个container或pod的依赖丢失,因此这个container需要restart。比如,pod包含的container破坏,container在mount PD时操作磁盘失败等。

Hook Handler Execution

当一个hook被触发,系统将会调用所有被注册在这个hook上的handler。在一个pod所包含的container中,hook handler的执行是同步的。这意味着,hook handler将会阻塞管理模块发送的其他操作指令,如果hook handler被阻塞,接下来的管理操作命令(包括健康检查)都会被阻塞,直到handler完成。hook handler只会影响本pod,不会对其他pod造成影响。官方当然希望用户能够保持hook handler越简单越轻量约好,当然不排除也有需要较长时间执行的handler(比如 在容器停止之前保存当前的状态)。

(hook交付保证)Hook delivery guarantees hook handler实现(Hook Handler Implementations)

hook handler是hook 操作处理container的方式。container选择他们希望的handler类型来执行。kubernetes目前提供两种hook handler类型:

Exec - 在容器的namespace/cgroup中执行指定的命令。如果命令最后输出”ok“,则被认为是处理正确,其他输出则被当做失败(将会触发kubelet重启container)。参数以传统linux的方式被传递给指令,比如pre-stop.sh --reason=HEALTH

HTTP - 执行一个http请求。http的5xx错误或者无反应被当做是失败,参数以传统http请求的方式传递。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32417.html

相关文章

  • kubernetes livenessProbe探针的简单使用

    摘要:记录一个简单的的使用创建探针具体的文件如下创建该查看当前的状态测试将容器内的删除掉登陆容器使用命令登陆容器可以看到,当我们把移走后,这个容器立马就退出了。 记录一个简单的livenessProb的使用 创建livenessProbe探针 具体的liveness-httpget.yaml文件如下: apiVersion: v1 kind: Pod metadata: name: li...

    zzir 评论0 收藏0
  • SAP云平台对Kubernetes的支持

    摘要:为什么云平台要选择支持给出的答案是基于的容器编排技术近年来已经成为行业里最流行的云原生应用开发范式之一。而云平台通过提供的给使用者提供了这种自由度。 截至本文发稿(2019-2-10, 农历大年初六)时为止,访问SAP云平台的官方网站:https://cloudplatform.sap.com... 能看到下面的网页:SAP云平台上的Kubernetes环境,Coming Soon(即...

    joyqi 评论0 收藏0
  • kubernetes ReplicaSet的简单使用

    摘要:创建的配置如下在这个中,我们设置了两个,创建后,查看实验会通过来筛选,并且设定的符合该的副本应该为个。文件的内容如下此时,我们创建另一个可以看到,的为,我们尝试给添加一个,看下会出现什么效果。可以发现的状态已经为。 创建ReplicaSet ReplicaSet的配置如下 apiVersion: apps/v1 kind: ReplicaSet metadata: name: my...

    phpmatt 评论0 收藏0
  • Kubernetes 尝鲜

    摘要:是谷歌官方根据自己容器经验开源的产品。当然,这不可能是,而且它的底层是替换成了,但是这不能掩盖它解决的问题。因此笔者决定尝试玩玩。不然启动会报错。 背景 容器技术在目前很火,而且确确实实的解决了很多的痛点,但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很难再实际生产中使用的。Kubernetes 是谷歌官方根据自己容器经验 Borg 开...

    KunMinX 评论0 收藏0
  • Kubernetes 尝鲜

    摘要:是谷歌官方根据自己容器经验开源的产品。当然,这不可能是,而且它的底层是替换成了,但是这不能掩盖它解决的问题。因此笔者决定尝试玩玩。不然启动会报错。 背景 容器技术在目前很火,而且确确实实的解决了很多的痛点,但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很难再实际生产中使用的。Kubernetes 是谷歌官方根据自己容器经验 Borg 开...

    ashe 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<