基础架构部文档
基础架构部文件格式标准参考
技术文档
mr_doc 接入ucenter 认证登录
loki日志收集
https证书与ssl/tls 加密
FTP 主动模式和被动模式的区别
Hadoop-windows10安装部署Hadoop2.7.3
JKS和PFX证书文件格式相互转换方法
KVM 基础操作
k8s nginx ingress日志收集到ELK并分析
Django基础
clash http代理 socks代理服务器搭建 配置
Ubuntu 22.04 安装 FFmpeg v7.0
Office正版化项目的个人体验和心得
重置jenkins构建历史
K8S实施方案
k8s的yaml文件语法
Docker的优势与虚拟机的区别
问题处理文档
HR推送数据问题处理报
Nginx从入门到放弃01-nginx基础安装
Nginx从入门到放弃02-Nginx基本命令和新建WEB站点
Nginx从入门到放弃03-Nginx调优
Nginx从入门到放弃04-Nginx的N种特别实用示例
JMeter教程
01-mariadb编译安装
02-mariadb二进制安装
Docker修改默认的存储路径
01-influxdb2时序数据库简介及安装
02-influxdb2时序数据库核心概念
03-influxdb2时序数据库flux查询语言
04-influxdb2--Python客户端influxdb-client
05-Spring boot 集成influxdb2
06-influxdb2其他知识
OA添加waf后相关问题的解决过程
排除java应用cpu使用率过高
exsi迁移文档
视频测试
阿里云产品试题
超融合服务器和传统服务器的区别
Serv-U问题集锦
文件夹共享操作手册
磁盘脱机处理方案
Office内存或磁盘空间不足处理方法
Cmd中ping不是内部或外部命令的解决方法
ELK 搭建文档
限制用户的远程桌面会话数量
Docker快速安装rocketmq、redis、zookeeper
超融合建设方案
git 入门
HR系统写入ES数据报错403
ELK搭建文档
KVM 安装和基础使用文档
helm 安装 rancher
访问共享提示禁用当前用户解决方法
K8S StorageClass搭建
KVM 扩展磁盘
借助sasl构建基于AD用户验证的SVN服务器
fastdfs编译安装并迁移数据
关闭系统保护的必要性
SCF 前置机部署
阿里云OSS学习文档
阿里云学习文档-VPC
(k8s踩坑)namespace无法删除
rancher-helm安装
zookeeper集群安装
批量替换K8s secrets 中某个特定域名的tls证书
kibana 批量创建索引模式
centos7 恢复Yum使用
ACP云计算部分知识点总结
Loki 日志系统搭建文档
自动更新k8s集群中所有名称空间中特定证书
AI分享
(AI)函数调用与MCP调用的区别
安装戴尔DELL Optilex 7040 USB驱动时提示无法定位程序输入点 kernel32\.dll
新华三服务器EXSI 显卡直通
本文档使用「觅思文档专业版」发布
-
+
首页
k8s的yaml文件语法
**作者:张文 时间:2022年4月** # 一、yaml文件 ## 1.1YAML 文件概述 k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也 就是可以把需要对资源对象操作编辑到 YAML 格式文件中,我们把这种文件叫做资源清单文 件,通过 kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署 了。 ## 1.2YAML 文件书写格式 (1)YAML 介绍 YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。 YAML 是一个可读性高,用来表达数据序列的格式。 (2)YAML 基本语法 * 使用空格做为缩进 , 不能用tab键。通过缩进表示层级关系。 * 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 。 * 一般开头缩进2个空格,符号后缩进一个空格,比如逗号、冒号、横杠(-)后面等 * 低版本缩进时不允许使用 Tab 键,只允许使用空格 * 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略 * ---三个横杠表示一个新的yaml文件的开始。 - 列表: 用短划(-)标记元素 - 映射: 用冒号(:)分隔key, value。如果写在一行, 需要用逗号分隔并前后加花括号 - 字符串: 不加引号, 加单引号或者加双引号都可以, 加双引号时可以使用\开头的转义字符 - 多行字符串可以用 | 或 > 符号, 紧接着换行符 - 重复的节点, 可以用 & 标识, 并用 * 来引用 - 大小写敏感 - yaml中的字符串默认不用加双引号或者单引号,如果加了双引号或者单引号,则单引号和双引号在yaml中有不同的用法。 ""双引号不会转义字符串里面的特殊字符:特殊字符会作为本身想表达的意思 例:"张三\n李四" 会表示出 张三,然后换行,之后才是 李四 '' 单引号会转义字符串里面的特殊字符 例:'张三\n李四' 表示出来的就是一个字符串 张三\n李四 ## 1.3YAML支持的三种数据结构 1.字面量:(普通的值:数字、字符串、布尔) key: value 2.对象:Map(属性和值)。yaml语法中对象与Map的表现形式是一样的。 第一种写法: ```yaml #YAML格式: apiVersion: v1 kind: Pod metadata: name: kube-site abels: app: web #等同于 { "apiVersion": "v1", "kind": "Pod", "metadata": { "name": "kube-site", "labels" {"app": "web"} } } ``` 3.数组、集合(list、set)yaml语法中数组与集合的表现形式是一样的。 ```yaml #YAML格式: args: - beijing - shanghai - shenzhen - guangzhou #等同于 { "args": ["beijing", "shanghai", "shenzhen", "guangzhou"] } ``` ## 1.4yaml 文件的学习方法 - 多看别人(官方)写的,能读懂 - 能照着现有的文件改着用 - 遇到不懂的,善用 **kubectl explain** …命令查. ```shell kubectl explain #查看资源结构信息 #可选参数 --api-version='': 指定特定API版本 --recursive=false:打印 fields 下的 fields 。kubectl explain 默认的处理方式 #用法示例 kubectl explain pods 或者 kubectl explain pods --api-version=v1 kubectl explain pods.spec.containers 等同于kubectl explain pods.spec.containers --recursive=false #可选参数 --api-version='': 指定特定API版本 --recursive=false:打印 fields 下的 fields ``` ```shell kubectl api-versions #输出 admissionregistration.k8s.io/v1 admissionregistration.k8s.io/v1beta1 apiextensions.k8s.io/v1 apiextensions.k8s.io/v1beta1 apiregistration.k8s.io/v1 apiregistration.k8s.io/v1beta1 apps/v1 authentication.k8s.io/v1 authentication.k8s.io/v1beta1 authorization.k8s.io/v1 authorization.k8s.io/v1beta1 autoscaling/v1 autoscaling/v2beta1 autoscaling/v2beta2 batch/v1 batch/v1beta1 catalog.cattle.io/v1 certificates.k8s.io/v1 certificates.k8s.io/v1beta1 coordination.k8s.io/v1 coordination.k8s.io/v1beta1 crd.projectcalico.org/v1 discovery.k8s.io/v1beta1 events.k8s.io/v1 events.k8s.io/v1beta1 extensions/v1beta1 management.cattle.io/v3 monitoring.coreos.com/v1 networking.k8s.io/v1 networking.k8s.io/v1beta1 node.k8s.io/v1beta1 policy/v1beta1 rbac.authorization.k8s.io/v1 rbac.authorization.k8s.io/v1beta1 scheduling.k8s.io/v1 scheduling.k8s.io/v1beta1 storage.k8s.io/v1 storage.k8s.io/v1beta1 v1 ``` ```shell kubectl explain pods.spec.containers.ports #等同于 kubectl explain pods.spec.containers.ports --recursive=false #输出 FIELDS: containerPort <integer> -required- Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536. hostIP <string> What host IP to bind the external port to. hostPort <integer> Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this. name <string> If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services. protocol <string> Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". ``` ``` kubectl explain pods.spec.containers.ports --recursive=true #输出 FIELDS: containerPort <integer> hostIP <string> hostPort <integer> name <string> protocol <string> ``` ## 1.5快速编写deployment的yaml文件 ### 1.使用kubectl create命令快速创建yaml文件 ```shell kubectl create deployment web --image=nginx -o yaml --dry-run # -o yaml:以yaml格式生成内容 # -o json:以json格式生成内容 # --dry-run:尝试运行,但并未真正的运行。 kubectl create deployment web --image=nginx --port=80 --replicas=3 -o yaml --dry-run #更多用法请用命令:kubectl create deployment --help查看 ``` ```yaml # kubectl create deployment myweb --image=nginx --port=80 --replicas=3 -o yaml --dry-run apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: myweb name: myweb spec: replicas: 3 selector: matchLabels: app: myweb strategy: {} template: metadata: creationTimestamp: null labels: app: myweb spec: containers: - image: nginx name: nginx ports: - containerPort: 80 resources: {} status: {} ``` 也可以将yaml内容输出到指定的文件中 ```shell kubectl create deployment web --image=nginx -o yaml --dry-run >my.yaml ``` ### 2.使用kubectl get命令导出deployment的yaml文件 ```shell kubectl get deploy -A NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system calico-kube-controllers 1/1 1 1 5h3m kube-system coredns 2/2 2 2 5h44m kubectl get deploy coredns -n kube-system -o=yaml > coredns.yaml vim coredns.yaml ``` ```yaml apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: "1" creationTimestamp: "2022-03-29T16:11:16Z" generation: 1 labels: k8s-app: kube-dns name: coredns namespace: kube-system resourceVersion: "4102" uid: 123fe0ed-0ea8-4308-87d3-d747731ccead spec: progressDeadlineSeconds: 600 replicas: 2 revisionHistoryLimit: 10 selector: matchLabels: k8s-app: kube-dns strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 1 type: RollingUpdate template: metadata: creationTimestamp: null labels: k8s-app: kube-dns spec: containers: - args: - -conf - /etc/coredns/Corefile image: registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.4 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 5 httpGet: path: /health port: 8080 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 name: coredns ports: - containerPort: 53 name: dns protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP - containerPort: 9153 name: metrics protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /ready port: 8181 scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 resources: limits: memory: 170Mi requests: cpu: 100m memory: 70Mi securityContext: allowPrivilegeEscalation: false capabilities: add: - NET_BIND_SERVICE drop: - all readOnlyRootFilesystem: true terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /etc/coredns name: config-volume readOnly: true dnsPolicy: Default nodeSelector: kubernetes.io/os: linux priorityClassName: system-cluster-critical restartPolicy: Always schedulerName: default-scheduler securityContext: {} serviceAccount: coredns serviceAccountName: coredns terminationGracePeriodSeconds: 30 tolerations: - key: CriticalAddonsOnly operator: Exists - effect: NoSchedule key: node-role.kubernetes.io/master - effect: NoSchedule key: node-role.kubernetes.io/control-plane volumes: - configMap: defaultMode: 420 items: - key: Corefile path: Corefile name: coredns name: config-volume status: availableReplicas: 2 conditions: - lastTransitionTime: "2022-03-29T16:53:35Z" lastUpdateTime: "2022-03-29T16:53:35Z" message: Deployment has minimum availability. reason: MinimumReplicasAvailable status: "True" type: Available - lastTransitionTime: "2022-03-29T16:53:35Z" lastUpdateTime: "2022-03-29T16:53:35Z" message: ReplicaSet "coredns-7d89d9b6b8" has successfully progressed. reason: NewReplicaSetAvailable status: "True" type: Progressing observedGeneration: 1 readyReplicas: 2 replicas: 2 updatedReplicas: 2 ```
张文
2022年5月30日 19:40
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期