K8s配置--YAML文件
K8s配置–YAML文件
我们和k8s交互的方式有2种:
- kubectl命令。
- YAML文件。
k8s建议使用声明式操作。更适合精细化处理的场景。告诉k8s的某个资源对象,我们期望它达到的状态,用kubectl apply 命令让k8s读取文件,还会自动把资源对象的当前状态修改成期望的状态。
说到声明式就对应命令式。直接下达命令,比如创建,删除某个资源对象。如果有并发,多人一起操作,就有可能出错。因为没有操作记录。
YAML文件
所以,k8s最常用的声明式文件类型是YAML文件。
优势
- 数据结构:支持复杂的数据结构。如:列表 字典。可以在一个文件里定义多个相互关联的资源对象。
- 文本格式: 纯文本格式,方便编辑,存储,也便于版本管理。
- 可重用: 可以在不同的环境(开发,生产) 声明不同的YAML文件。
语法
说了这么多好处,YAML文件到底怎么写呢?
缩进
它有点像Python 是靠缩进来表示数据的层级关系。每个层级缩进是2个空格。
pkey:
ckey:value
注释
单行注释:也和Python一样 # 。
多行:— 三个横杠。
基础数据类型
如:整形,浮点数,Bool值,Null,字符串(除非包含特殊字符串,一般不用引号),等
列表
(-)表示列表元素,新起一行。
list_key:
- item1
- item2
- sub_list:
- sub_item1
- sub_item2
K-V 键值对
key:value 使用(:)和空格进行分隔。
key 是字符串,value 支持基础数据类型,也支持复合类型。
k8s资源对象的yaml文件一般都会有这些常用key
- apiVersion: api版本,控制k8s用哪个api模式来解析文件。
- kind:资源对象的类型,Pod, Service, Deployment之类的。
- metadata: 一些基本信息, 名称,命名空间,标签,注解之类的。
- spec:资源对象期望状态及特殊属性,像镜像,端口,PV之类的。
示例:
# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest # latest表示使用镜像的最新版本
ports:
- containerPort: 80
可以通过“kubectl create” 命令创建 Deployment 的 YAML 文件模板。
kubectl create deployment my-nginx-deploy --image=nginx --dry-run=client -o yaml > my-nginx-deploy.yaml
使用YAML文件
编写完,怎么用呢?
在用yaml之前 可以先验证一下,看看文件是否有错。
kubectl apply -f--dry-run <YAML文件名>
如果没有问题才使用。
kubectl apply -f <YAML文件名>
删除YAML文件中所 部署的全部资源对象。
kubectl delete -f <YAML文件名>