fix some typo and syntax error
parent
3c35271b11
commit
3ae1132344
|
@ -237,11 +237,11 @@ Pod 能够重启,会导致 Init 容器重新执行,主要有如下几个原
|
|||
|
||||
- 用户更新 PodSpec 导致 Init 容器镜像发生改变。应用容器镜像的变更只会重启应用容器。
|
||||
- Pod 基础设施容器被重启。这不多见,但某些具有 root 权限可访问 Node 的人可能会这样做。
|
||||
- 当 `restartPolicy` 设置为 Always,Pod 中所有容器会终止,强制重启,由于垃圾收集导致 Init 容器完成的记录丢失。
|
||||
- 当 `restartPolicy` 设置为 Always,Pod 中所有容器会终止,强制重启,由于垃圾收集导致 Init 容器完整的记录丢失。
|
||||
|
||||
## 支持与兼容性
|
||||
|
||||
Apiserver 版本为 1.6 或更高版本的集群,通过使用 `spec.initContainers` 字段来支持 Init 容器。 之前的版本可以使用 alpha 和 beta 注解支持 Init 容器。 `spec.initContainers` 字段也被加入到 alpha 和 beta 注解中,所以 Kubernetes 1.3.0 版本或更高版本可以执行 Init 容器,并且 1.6 版本的 apiserver 能够安全的回退到 1.5.x 版本,而不会使存在的已创建 Pod 失去 Init 容器的功能。
|
||||
Apiserver 版本为 1.6 或更高版本的集群,通过使用 `spec.initContainers` 字段来支持 Init 容器。 之前的版本可以使用 alpha 和 beta 注解支持 Init 容器。 `spec.initContainers` 字段也被加入到 alpha 和 beta 注解中,所以 Kubernetes 1.3.0 版本或更高版本可以执行 Init 容器,并且 1.6 版本的 apiserver 能够安全地回退到 1.5.x 版本,而不会使存在的已创建 Pod 失去 Init 容器的功能。
|
||||
|
||||
原文地址:https://k8smeetup.github.io/docs/concepts/workloads/pods/init-containers/
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ Kubernetes 对象是 “目标性记录” —— 一旦创建对象,Kubernete
|
|||
|
||||
### 描述 Kubernetes 对象
|
||||
|
||||
当创建 KUbernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如,名称)。当使用 KUbernetes API 创建对象时(或者直接创建,或者基于`kubectl`),API 请求必须在请求体中包含 JSON 格式的信息。**更常用的是,需要在 .yaml 文件中为 kubectl 提供这些信息**。 `kubectl` 在执行 API 请求时,将这些信息转换成 JSON 格式。
|
||||
当创建 Kubernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如,名称)。当使用 Kubernetes API 创建对象时(或者直接创建,或者基于`kubectl`),API 请求必须在请求体中包含 JSON 格式的信息。**更常用的是,需要在 .yaml 文件中为 kubectl 提供这些信息**。 `kubectl` 在执行 API 请求时,将这些信息转换成 JSON 格式。
|
||||
|
||||
这里有一个 `.yaml` 示例文件,展示了 Kubernetes Deployment 的必需字段和对象 spec:
|
||||
|
||||
|
@ -94,7 +94,7 @@ deployment "nginx-deployment" created
|
|||
|
||||
### 必需字段
|
||||
|
||||
在想要创建的 KUbernetes 对象对应的 `.yaml` 文件中,需要配置如下的字段:
|
||||
在想要创建的 Kubernetes 对象对应的 `.yaml` 文件中,需要配置如下的字段:
|
||||
|
||||
- `apiVersion` - 创建该对象所使用的 Kubernetes API 的版本
|
||||
- `kind` - 想要创建的对象的类型
|
||||
|
|
|
@ -15,18 +15,18 @@ Pods are employed a number of ways in a Kubernetes cluster, including:
|
|||
- **一个Pod中运行一个容器**。“每个Pod中一个容器”的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器。
|
||||
- **在一个Pod中同时运行多个容器**。一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位——一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
|
||||
|
||||
[Kubernetes Blog](http://blog.kubernetes.io) 有关于Pod用例的详细信息:查看:
|
||||
[Kubernetes Blog](http://blog.kubernetes.io) 有关于Pod用例的详细信息,查看:
|
||||
|
||||
- [The Distributed System Toolkit: Patterns for Composite Containers](http://blog.kubernetes.io/2015/06/the-distributed-system-toolkit-patterns.html)
|
||||
- [Container Design Patterns](http://blog.kubernetes.io/2016/06/container-design-patterns.html)
|
||||
|
||||
每个Pod都是应用的一个实例。如果你想平行扩展应用的话(运行多个实例),你应该运行多个Pod,每个Pod都是一个应用实例。在Kubernetes中,这通常被叫称为是replication。
|
||||
每个Pod都是应用的一个实例。如果你想平行扩展应用的话(运行多个实例),你应该运行多个Pod,每个Pod都是一个应用实例。在Kubernetes中,这通常被称为replication。
|
||||
|
||||
### Pod中如何管理多个容器
|
||||
|
||||
Pod中可以同时运行多个进程(作为容器运行)协同工作。同一个Pod中的容器会自动的分配到同一个 node 上。同一个Pod中的容器共享资源、网络环境和依赖,它们总是被同时调度。
|
||||
|
||||
注意在一个Pod中同时运行多个容器是一种比较高级的用法。只有当你的容器需要紧密配合协作的时候才考虑用这种模式。例如,你有一个容器作为web服务器运行,需要用到共享的volume,有另一个”sidecar“容器来从远端获取资源更新这些文件,如下图所示:
|
||||
注意在一个Pod中同时运行多个容器是一种比较高级的用法。只有当你的容器需要紧密配合协作的时候才考虑用这种模式。例如,你有一个容器作为web服务器运行,需要用到共享的volume,有另一个“sidecar”容器来从远端获取资源更新这些文件,如下图所示:
|
||||
|
||||
![pod diagram](../images/pod-overview.png)
|
||||
|
||||
|
|
|
@ -8,17 +8,17 @@ V1 core版本的Pod的配置模板见[Pod template](../manifests/template/pod-v1
|
|||
|
||||
Pod就像是豌豆荚一样,它由一个或者多个容器组成(例如Docker容器),它们共享容器存储、网络和容器运行配置项。Pod中的容器总是被同时调度,有共同的运行环境。你可以把单个Pod想象成是运行独立应用的“逻辑主机”——其中运行着一个或者多个紧密耦合的应用容器——在有容器之前,这些应用都是运行在几个相同的物理机或者虚拟机上。
|
||||
|
||||
尽管kubernetes支持多种容器运行时,但是docker依然是最常用的运行时环境,我们可以使用docker的术语和规则来定义Pod。
|
||||
尽管kubernetes支持多种容器运行时,但是Docker依然是最常用的运行时环境,我们可以使用Docker的术语和规则来定义Pod。
|
||||
|
||||
Pod中共享的环境包括Linux的namespace,cgroup和其他可能的隔绝环境,这一点跟docker容器一致。在Pod的环境中,每个容器中可能还有更小的子隔离环境。
|
||||
Pod中共享的环境包括Linux的namespace,cgroup和其他可能的隔绝环境,这一点跟Docker容器一致。在Pod的环境中,每个容器中可能还有更小的子隔离环境。
|
||||
|
||||
Pod中的容器共享IP地址和端口号,它们之间可以通过`localhost`互相发现。它们之间可以通过进程间通信,例如[SystemV](https://en.wikipedia.org/wiki/UNIX_System_V)信号或者POSIX共享内存。不同Pod之间的容器具有不同的IP地址,不能直接通过IPC通信。
|
||||
|
||||
Pod中的容器也有访问共享volume的权限,这些volume会被定义成pod的一部分并挂载到应用容器的文件系统中。
|
||||
|
||||
根据docker的结构,Pod中的容器共享namespace和volume,不支持共享PID的namespace。
|
||||
根据Docker的结构,Pod中的容器共享namespace和volume,不支持共享PID的namespace。
|
||||
|
||||
就像每个应用容器,pod被认为是临时(非持久的)实体。在Pod的生命周期中讨论过,pod被创建后,被分配一个唯一的UI(UID),调度到节点上,并一致维持期望的状态直到被终结(根据重启策略)或者被删除。如果node死掉了,分配到了这个node上的pod,在经过一个超时时间后会被重新调度到其他node节点上。一个给定的pod(如UID定义的)不会被“重新调度”到新的节点上,而是被一个同样的pod取代,如果期望的话甚至可以是相同的名字,但是会有一个新的UID(查看replication controller获取详情)。(未来,一个更高级别的API将支持pod迁移)。
|
||||
就像每个应用容器,pod被认为是临时(非持久的)实体。在Pod的生命周期中讨论过,pod被创建后,被分配一个唯一的ID(UID),调度到节点上,并一致维持期望的状态直到被终结(根据重启策略)或者被删除。如果node死掉了,分配到了这个node上的pod,在经过一个超时时间后会被重新调度到其他node节点上。一个给定的pod(如UID定义的)不会被“重新调度”到新的节点上,而是被一个同样的pod取代,如果期望的话甚至可以是相同的名字,但是会有一个新的UID(查看replication controller获取详情)。(未来,一个更高级别的API将支持pod迁移)。
|
||||
|
||||
Volume跟pod有相同的生命周期(当其UID存在的时候)。当Pod因为某种原因被删除或者被新创建的相同的Pod取代,它相关的东西(例如volume)也会被销毁和再创建一个新的volume。
|
||||
|
||||
|
@ -114,9 +114,9 @@ Pod的强制删除是通过在集群和etcd中将其定义为删除状态。当
|
|||
|
||||
## Pod中容器的特权模式
|
||||
|
||||
从kubernetes1.1版本开始,pod中的容器就可以开启previleged模式,在容器定义文件的 `SecurityContext` 下使用 `privileged` flag。 这在使用linux的网络操作和访问设备的能力时是很用的。同时开启的特权模式的Pod中的容器也可以访问到容器外的进程和应用。在不需要修改和重新编译kubelet的情况下就可以使用pod来开发节点的网络和存储插件。
|
||||
从kubernetes1.1版本开始,pod中的容器就可以开启previleged模式,在容器定义文件的 `SecurityContext` 下使用 `privileged` flag。 这在使用Linux的网络操作和访问设备的能力时是很用的。同时开启的特权模式的Pod中的容器也可以访问到容器外的进程和应用。在不需要修改和重新编译kubelet的情况下就可以使用pod来开发节点的网络和存储插件。
|
||||
|
||||
如果master节点运行的是kuberentes1.1.或更高版本,而node节点的版本低于1.1版本,则API server将也可以接受新的特权模式的pod,但是无法启动,pod将处于pending状态。
|
||||
如果master节点运行的是kuberentes1.1或更高版本,而node节点的版本低于1.1版本,则API server将也可以接受新的特权模式的pod,但是无法启动,pod将处于pending状态。
|
||||
|
||||
执行 `kubectl describe pod FooPodName`,可以看到为什么pod处于pending状态。输出的event列表中将显示:
|
||||
`Error validating pod "FooPodName"."FooPodNamespace" from api, ignoring: spec.containers[0].securityContext.privileged: forbidden '<*>(0xc2089d3248)true'`
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
|
||||
由于对代理的规则传播是异步的,因此在尝试访问应用程序之前,需要等待几秒钟才能将规则传播到所有pod。
|
||||
|
||||
2. 在浏览器中打开BookInfo URL(http://$GATEWAY_URL/productpage,我们在上一节中使用的是 http://ingress.istio.io/productpage )您应该会看到BookInfo应用程序的产品页面显示。 注意,产品页面上没有评分星,因为`reviews:v1`不访问评级服务。
|
||||
2. 在浏览器中打开BookInfo URL(http://$GATEWAY_URL/productpage ,我们在上一节中使用的是 http://ingress.istio.io/productpage )您应该会看到BookInfo应用程序的产品页面显示。 注意,产品页面上没有评分星,因为`reviews:v1`不访问评级服务。
|
||||
|
||||
3. 将特定用户路由到`reviews:v2`。
|
||||
|
||||
|
|
Loading…
Reference in New Issue