Kubernetes 的一个关键特性是它能够使用声明的原语来维持“期望的状态”。
Replication Controllers
是帮助实现这种状态的关键概念。
复制控制器确保指定数量的 pod“副本”在任何时候都在运行。如果有太多,它会杀死一些。如果太少,它会开始更多。
复制控制器
让我们看一下如何使用 Pod 的两个副本启动 Replication Controller。然后我们将杀死一个 pod,看看 Kubernetes 如何自动启动另一个 Pod。
启动 Kubernetes 集群
-
在 Mac OS 上启动 Kubernetes 集群的最简单方法是使用
Vagrant
:
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
或者,可以从
github.com/GoogleCloudPlatform/kubernetes/releases/download/v1.0.0/kubernetes.tar.gz
下载 Kubernetes,集群可以启动为:
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
启动并验证 Replication Controller 和 Pod
-
Kubernetes 启动 Replication Controller 所需的所有配置文件都在
kubernetes-java-sample
项目中。克隆工作区:
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
启动一个 Replication Controller,它有一个 pod 的两个副本,每个副本都有一个 WildFly 容器:
使用的配置文件如下所示:export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
这里使用默认的 WildFly Docker 镜像 。export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
获取 Pod 的状态:
注意export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-w
会在有更改时刷新状态。状态从 Pending 变为 Running,然后变为 Ready to receive requests。 -
获取复制控制器的状态:
如果多个 Replication Controllers 正在运行,那么您可以使用标签查询这个特定的控制器:export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
获取正在运行的 Pod 的名称:
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
查找每个 Pod 的 IP 地址(使用名称):
还有另一个 Pod:export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
-
Pod 的 IP 地址只能在集群内部访问。登录 minion 以访问容器托管的 WildFly 主页:
export KUBERNETES_PROVIDER=vagrant curl -sS https://get.k8s.io | bash
Pod 的自动重启
让我们删除一个 Pod,看看如何自动创建一个新的 Pod。
export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash
请注意如何删除名称为
wildfly-rc-15xg5
Pod 并创建名称为
wildfly-rc-0xoms
新 Pod。
最后,删除 Replication Controller:
export KUBERNETES_PROVIDER=vagrant
curl -sS https://get.k8s.io | bash
最新的配置文件和详细说明位于 kubernetes-java-sample 。
在现实世界中,您通常会将此 Replication Controller 包装在服务中,并在前端使用负载均衡器。但这是另一个博客的主题!