YAML不是唯一方式,但是是最主流,生产环境标准方式。

两种操作资源的途径

1.声明式:YAML文件(生产首选)

写yaml(yml),里面写清除我期望最终状态:我要1个pod,副本数2,镜像nginx,端口80.

执行:

kubectl apply -f demo.yml

k8s控制器会拼命干活,把集群变成yaml写的样子。

特点:

文件可以保存,提交git做版本控制;

重复执行不会乱,适合集群维护,CI/CD;

考试,企业项目全用这套。

2.命令式:直接敲kubectl命令(临时测试用)不用写文件,直接在命令行创建资源

kubectl run nginx --image=nginx

kubectl create deployment nginx --image=nginx

缺点:操作不会保存成文件,做完就没记录;不方便复盘,回滚,生产不推荐大量使用。

核心原理(关键)

YAML只是描述配置集的文本载体!

k8s真正存储集群所有状态,存在etcd数据库。

流程:

你写yaml>kubectl apply把yaml内容提交给APIServer>APIServer校验>存入etcd>各个控制器循环干活,把集群实际状态对齐yaml写的期望状态。

yaml本身不直接控制集群,它只是一份“愿望说明书”。真正管理集群的是:apiserver,etcd,controller,scheduler这些组件。

举个通俗比方

yaml=装修设计图纸(写清楚你想要房子长啥样)

etcd=档案室,保存图纸

k8s各个控制器=装修工人,照着图纸把房子修成图纸样子

但你可以口头告诉工人干活(kubectl命令式),但正规装修一定要保留图纸(yaml)。

考试&实操高频考点

1.生产环境:优先声明式yaml apply,不要大量用create/delete命令式;

2.yaml可以导出集群现有配置:

kubectl get pod nginx -o yaml > pod.yaml

把集群当前真实状态导出成yaml文件;

3.dry-run可以先生成yaml,不用直接创建资源

kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deploy.yml

更多推荐