第5章 运行应用

从本章开始,我们将通过实践深入学习Kubernetes的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用,这就是本章的内容。

5.1 Deployment

前面我们已经了解到,Kubernetes通过各种Controller来管理Pod的生命周期。为了满足不同业务场景,Kubernetes开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们首先学习最常用的Deployment。

5.1.1 运行Deployment

先从例子开始,运行一个Deployment:

kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2

上面的命令将部署包含两个副本的Deployment nginx-deployment,容器的image为nginx:1.7.9。

下面详细分析Kubernetes都做了些什么工作,如图5-1所示。

图5-1

在图5-1中,通过kubectl get deployment命令查看nginx-deployment的状态,输出显示两个副本正常运行。

接下来我们用kubectl describe deployment了解更详细的信息,如图5-2和图5-3所示。

图5-2

图5-3

大部分内容都是自解释的,我们重点看图5-3。这里告诉我们创建了一个ReplicaSet nginx-deployment-1260880958,Events是Deployment的日志,记录了ReplicaSet的启动过程。通过上面的分析,也验证了Deployment通过ReplicaSet来管理Pod的事实。接着我们将注意力切换到nginx-deployment-1260880958,执行kubectl describe replicaset,如图5-4所示。

图5-4

两个副本已经就绪,用kubectl describe replicaset查看详细信息,如图5-5和图5-6所示。

图5-5

图5-6

Controlled By指明此ReplicaSet是由Deployment nginx-deployment创建的。图5-6是两个副本Pod创建的日志。接着我们来看Pod,执行kubectl get pod,如图5-7所示。

图5-7

两个副本Pod都处于Running状态,然后用kubectl describe pod查看更详细的信息,如图5-8和图5-9所示。

图5-8

图5-9

Controlled By指明此Pod是由ReplicaSet nginx-deployment-1260880958创建的。Events记录了Pod的启动过程。如果操作失败(比如image不存在),也能在这里查到原因。

总结一下这个过程中,如图5-10所示。

图5-10

(1)用户通过kubectl创建Deployment。

(2)Deployment创建ReplicaSet。

(3)ReplicaSet创建Pod。

从图5-10也可以看出,对象的命名方式是“子对象的名字=父对象名字+随机字符串或数字”。

5.1.2 命令vs配置文件

Kubernetes支持两种创建资源的方式:

(1)用kubectl命令直接创建,比如“kubectl run nginx-deployment --image=nginx:1.7.9--replicas=2”,在命令行中通过参数指定资源的属性。