从本章开始,我们将通过实践深入学习 Kubernetes 的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用,这就是本章的内容。
Deployment
前面我们已经了解到,Kubernetes 通过各种 Controller 来管理 Pod 的生命周期。为了满足不同业务场景,Kubernetes 开发了 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等多种 Controller。我们首先学习最常用的 Deployment。
先从例子开始,运行一个 Deployment:
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
上面的命令将部署包含两个副本的 Deployment nginx-deployment
,容器的 image 为 nginx:1.7.9
。
下面详细分析 Kubernetes 都做了些什么工作。
kubectl get deployment
命令可以查看 nginx-deployment
的状态,输出显示两个副本正常运行。
接下来我们用 kubectl describe deployment
了解更详细的信息。
大部分内容都是自解释的,我们重点看最下面部分。这里告诉我们创建了一个 ReplicaSet nginx-deployment-1260880958
,Events
是 Deployment 的日志,记录了 ReplicaSet 的启动过程。
通过上面的分析,也验证了 Deployment 通过 ReplicaSet 来管理 Pod 的事实。接着我们将注意力切换到 nginx-deployment-1260880958
,执行 kubectl describe replicaset
:
两个副本已经就绪,用 kubectl describe replicaset
查看详细信息:
Controlled By
指明此 ReplicaSet 是由 Deployment nginx-deployment
创建。Events
记录了两个副本 Pod 的创建。接着我们来看 Pod,执行 kubectl get pod
:
两个副本 Pod 都处于 Running
状态,用 kubectl describe pod
查看更详细的信息:
Controlled By
指明此 Pod 是由 ReplicaSet nginx-deployment-1260880958
创建。Events
记录了 Pod 的启动过程。如果操作失败(比如 image 不存在),也能在这里查看到原因。
总结一下这个过程:
- 用户通过
kubectl
创建 Deployment。 - Deployment 创建 ReplicaSet。
- ReplicaSet 创建 Pod。
从上图也可以看出,对象的命名方式是:子对象的名字
= 父对象名字
+ 随机字符串或数字
。
本节我们是通过 kubectl run
创建的 Deployment,下一节学习另一种更常用的方法。
Good,原本的rc目前已经被deployment和replicaset代替了
是这样