【云原生 | 从零开始学Kubernetes】四、Kubernetes之YAML文件详解

简介: k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。

概述


k8s 集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML 格式文件中,我们把这种文件叫做资源清单文件,通过kubectl 命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。一般在我们开发的时候,都是通过配置YAML文件来部署集群的。


YAML文件:就是资源清单文件,用于资源编排


YAML文件介绍


YAML概述


YAML :仍是一种标记语言。为了强调这种语言以数据做为中心,而不是以标记语言为重点。


YAML 是一个可读性高,用来表达数据序列的格式。


YAML 基本语法


·使用空格做为缩进


·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可


·低版本缩进时不允许使用Tab 键,只允许使用空格


·使用#标识注释,从这个字符一直到行尾,都会被解释器忽略


·使用 — 表示新的yaml文件开始


YAML 支持的数据结构


纯量


单个的、不可再分的值,也就是指的一个简单的值,字符串、布尔值、整数、浮点数、Null、时间、日期。


# 1 布尔类型
c1: true (或者True)
# 2 整型
c2: 234
# 3 浮点型
c3: 3.14
# 4 null类型 
c4: ~  # 使用~表示null
# 5 日期类型
c5: 2018-02-17    # 日期必须使用ISO 8601格式,即yyyy-MM-dd
# 6 时间类型
c6: 2018-02-17T15:02:31+08:00  # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
# 7 字符串类型
c7: heima     # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹 
c8: line1
    line2     # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格


对象


键值对的集合,又称为映射(mapping) / 哈希(hashes) / 字典(dictionary)


# 对象
# 形式一(推荐)一组键值对,使用冒号结构表示:
paopao:
  name: csdn
  address: Beijing
# 形式二(了解)将所有键值对写成一个行内对象:
paopao: {name: csdn,address: Beijing}


数组


# 数组
# 形式一(推荐):
address:
  - 河北
  - 保定  
# 形式二(了解):
address: [河北,保定]


YAML文件组成部分


主要分为了两部分,一个是控制器的定义和被控制的对象


属性说明


在一个YAML文件的控制器定义中,有很多属性名称


属性名称

介绍

apiVersion

API版本

kind

资源类型

metadata

资源元数据

spec

资源规格

replicas

副本数量

selector

标签选择器

template

Pod模板

metadata

Pod元数据

spec

Pod规格

containers

容器配置


如何快速编写YAML文件


一般来说,我们很少自己手写YAML文件,因为这里面涉及到了很多内容,我们一般都会借助工具来创建


使用kubectl create命令


这种方式一般用于资源没有部署的时候,我们可以直接创建一个YAML配置文件


# 尝试运行,并不会真正的创建镜像
kubectl create deployment web --image=nginx -o yaml --dry-run(这个是尝试运行,yaml文件展示出来,并不是真运行)


或者我们可以输出到一个文件中kubectl create deployment web --image=nginx -o yaml --dry-run > hello.yaml


然后我们就在文件中直接修改即可


使用kubectl get命令导出yaml文件


可以首先查看一个目前已经部署的镜像kubectl get deploy


111.png


然后我们导出 nginx的配置kubectl get deploy nginx -o=yaml --export > nginx.yaml然后会生成一个 nginx.yaml 的配置文件


30.png


命令式对象配置


命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。


创建一个nginx.yml,内容如下:


apiVersion: v1
kind: Namespace
metadata:
  name: paopao
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: paopao
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest


执行create命令,创建资源:


[root@k8smaster ~]# kubectl create -f nginx.yml
namespace/paopao created
pod/nginx created


此时发现创建了两个资源对象,分别是namespace和pod


执行get命令,查看资源:


[root@k8smaster ~]# kubectl get -f nginx.yml
NAME               STATUS   AGE
namespace/paopao   Active   18s
NAME         READY   STATUS    RESTARTS   AGE
pod/nginx    1/1     Running   0          17s


执行delete命令,删除资源:


[root@master ~]# kubectl delete -f nginx.yml
namespace "paopao" deleted
pod "nginx" deleted


此时发现两个资源对象被删除了。


命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)


声明式对象配置


声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。


# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged


其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)


使用apply操作资源:如果资源不存在,就创建,相当于 kubectl create


如果资源已存在,就更新,相当于 kubectl patch


node节点如何使用kubectl


kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作


# 方式一
scp -r ~/.kube node1:~/
# 方式二
scp  -r  HOME/.kube   node1: HOME/


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
Kubernetes 安全 网络协议
Kubernetes实用指令:通过dry-run生成部署与服务的YAML配置
总结起来, 使用 ` -- dry—run = client `- o yam l' 参数能够帮助用户预览 Kubernetes 资源定义并且确保它们符合预期效果且没有立即影响现有集群断层结构. 这种做法对于新手学习 K8s 资源规范、测试新策略或者审核现有策略都非常有效率与安全.
308 4
|
4月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
136 4
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
298 2
k8s学习--YAML资源清单文件托管服务nginx
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
382 3
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
157 0
ingress相关yaml文件报错且相关资源一切正常解决方法
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
375 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
500 16
|
5月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
9月前
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。

推荐镜像

更多