k8s 创建资源的两种方式
命令 vs 配置文件
Kubernetes 支持两种方式创建资源:
1.用 kubectl 命令直接创建,比如:
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
在命令行中通过参数指定资源的属性。
2. 通过配置文件和 kubectl apply
创建,要完成前面同样的工作,可执行命令:
kubectl apply -f nginx.yml
nginx.yml 的内容为:
资源的属性写在配置文件中,文件格式为 YAML。
下面对这两种方式进行比较。
基于命令的方式:
-
简单直观快捷,上手快。
-
适合临时测试或实验。
基于配置文件的方式:
-
配置文件描述了
What
,即应用最终要达到的状态。 -
配置文件提供了创建资源的模板,能够重复部署。
-
可以像管理代码一样管理部署。
-
适合正式的、跨环境的、规模化部署。
-
这种方式要求熟悉配置文件的语法,有一定难度。
kubectl apply
不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。不过 Kubernets 还提供了几个类似的命令,例如 kubectl create
、kubectl replace
、kubectl edit
和 kubectl patch
。
为避免造成不必要的困扰,我们会尽量只使用 kubectl apply
,此命令已经能够应对超过 90% 的场景,事半功倍。
读懂 Deployment YAML
既然要用 YAML 配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式,其他 Controller(比如 DaemonSet)非常类似。还是以 nginx-deployment 为例,配置文件如下图所示:
① apiVersion
是当前配置格式的版本。
② kind
是要创建的资源类型,这里是 Deployment
。
③ metadata
是该资源的元数据,name
是必需的元数据项。
④ spec
部分是该 Deployment
的规格说明。
⑤ replicas
指明副本数量,默认为 1。
⑥ template
定义 Pod 的模板,这是配置文件的重要部分。
⑦ metadata
定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑧ spec
描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name
和 image
是必需的。
此 nginx.yml 是一个最简单的 Deployment 配置文件,后面我们学习 Kubernetes 各项功能时会逐步丰富这个文件。
执行 kubectl apply -f nginx.yml
:
部署成功。同样地,通过 kubectl get
查看 nginx-deployment
的各种资源:
Deployment、ReplicaSet、Pod 都已经就绪。如果要删除这些资源,执行 kubectl delete deployment nginx-deployment
或者 kubectl delete -f nginx.yml
。