Kubernetes 笔记 05 yaml 配置文件详解
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
Hi,大家好,欢迎大家和我一起学 K8S,这是系列第 5 篇。
生活中,随处可见,几乎每一款产品都会附带一份说明书,说明书可以记录产品的使用方法,也可以记录产品的配方。有了说明书,我们完全可以窥探一款产品的全貌。
在 K8S 中,yaml
配置文件就是 K8S 资源对象的说明书,定义了对象包含的元素及采取的动作,每种对象都可以通过 yaml 配置文件来创建。
yaml 是什么
yaml 是一种用来写配置文件的语言,没错,它是一门语言。如果你用过 json,那么对它就不会陌生,yaml 又被称为是 json 的超集,使用起来比 json 更方便。
结构上它有两种可选的类型:Lists 和 Maps。
List 用 -(破折号) 来定义每一项,Map 则是一个 key:value 的键值对来表示。如下是一个 json 文件到 yaml 文件的转换:
json:
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "xx"
}
"spec": {
"containers": [{
"name": "front-end",
"image": "nginx",
"ports": [{
"containerPort": "80"
}]
}, {
"name": "flaskapp-demo",
"image": "jcdemo/flaskapp",
"ports": [{
"containerPort": "5000"
}]
}]
}
}
yaml:
---
apiVersion: v1
kind: Pod
metadata:
name: xx
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: flaskapp-demo
image: jcdemo/flaskapp
ports: 8080
这个文件简单地定义了一个 Pod 对象,包含两个容器,我们可以很清晰地看到两者是如何转换的。
K8S 创建资源的两种方式
在 K8S 中,有两种创建资源的方式:kubectl 命令和 yaml 配置文件。
两种方式各有各的好处。命令行的方式最为简单,一条命令就万事大吉,但缺点也很明显,你并不知道这条命令背后到底做了哪些事,配置文件就提供了一种让你知其然更知其所以然的方式。总的来说,它有以下好处:
- 完整性:配置文件描述了一个资源的完整状态,可以很清楚地知道一个资源的创建背后究竟做了哪些事;
- 灵活性:配置文件可以创建比命令行更复杂的结构;
- 可维护性:配置文件提供了创建资源对象的模板,能够重复使用;
- 可扩展性:适合跨环境、规模化的部署。
- ......
当然,复杂的东西对用户就难以做到友好,我们需要熟悉它的配置文件的语法,有一定难度。下面举几个例子,让你对 yaml 配置文件有一个基本的认识。
几个例子
下面,我们分别来看看 deployment
、pod
、service
这三种资源的说明书都长啥样。
由于 K8S 对每种资源的定义非常庞杂,限于篇幅,我们只看一些必选的参数,目的是通过这几个例子,读懂 yaml 配置文件。
deployment
定义 deployment 配置文件,命名为:nginx-deployment.yaml
apiVersion: apps/v1 # 1.9.0 之前的版本使用 apps/v1beta2,可通过命令 kubectl api-versions 查看
kind: Deployment #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: nginx-deployment #资源的名字,在同一个namespace中必须唯一
spec:
replicas: 2 #副本数量2
selector: #定义标签选择器
matchLabels:
app: web-server
template: #这里Pod的定义
metadata:
labels: #Pod的label
app: web-server
spec: # 指定该资源的内容
containers:
- name: nginx #容器的名字
image: nginx:1.12.1 #容器的镜像地址
ports:
- containerPort: 80 #容器对外的端口
执行kubectl create -f nginx.yaml
创建 deployment 资源:
pod
定义 pod 配置文件,命名为 redis-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-redis
labels:
name: redis
spec:
containers:
- name: pod-redis
image: docker.io/redis
ports:
- containerPort: 80 #容器对外的端口
执行kubectl create -f pod-redis.yaml
创建 pod 资源:
可以看到,成功创建一个 Pod,ContainerCreating
表示 Pod 中的容器正在执行镜像的下载和安装过程,过一会儿,就显示Running
了,表明 Pod 应用部署完成。
service
定义 service 配置文件,命名为 httpd-svc.yaml
apiVersion: v1
kind: Service # 指明资源类型是 service
metadata:
name: httpd-svc # service 的名字是 httpd-svc
labels:
name: httpd-svc
spec:
ports: # 将 service 8080 端口映射到 pod 的 80 端口,使用 TCP 协议
- port: 8080
targetPort: 80
protocol: TCP
selector:
run: httpd # 指明哪些 label 的 pod 作为 service 的后端
执行kubectl create -f httpd-svc.yaml
创建 service 资源:
可以看到,service httpd-svc 分配到一个 Cluster-IP 10.96.0.1,我们可以通过该 IP 访问 service 所维护的后端 Pod。
另外,还有一个 service kubernetes,这个是 Kubernetes API Server 的 service,Cluster 内部的各组件就是通过这个 service 来访问 API Server。
总结
yaml 是 K8S 资源对象的说明书,每个对象拥有哪些属性都可以在 yaml 中找到详尽的说明,初学者建议多写 yaml 文件,少用命令行。
以上三个例子只是对 yaml 文件做个简单说明,更详细的信息还是参考官网。
OK,本文就到此为止,下文我们开始进入豌豆荚之旅。觉得不错,别忘了转发分享给你的朋友哦。
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
Kubernetes 笔记 05 yaml 配置文件详解的更多相关文章
- Spring Boot2 系列教程 (五) | yaml 配置文件详解
自定义属性加载 首先构建 SpringBoot 项目,不会的看这篇旧文 使用 IDEA 构建 Spring Boot 工程. 首先在项目根目录 src >> resource >&g ...
- 【Flutter 实战】pubspec.yaml 配置文件详解
老孟导读:pubspec.yaml 文件是 Flutter 中非常重要的配置文件,下面就让我们看看里面各个配置的含义. pubspec.yaml 是 Flutter 项目的配置文件,类似于 Andro ...
- struts2学习笔记--struts.xml配置文件详解
这一节主要讲解struts2里面的struts.xml的常用标签及作用: 解决乱码问题 <constant name="struts.i18n.encoding" value ...
- hibernate框架学习笔记2:配置文件详解
实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
- 【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户
今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...
- Kubernetes K8S之存储ConfigMap详解
K8S之存储ConfigMap概述与说明,并详解常用ConfigMap示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS ...
- Kubernetes K8S之存储Volume详解
K8S之存储Volume概述与说明,并详解常用Volume示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C ...
- WebConfig配置文件详解
今天看到博客园一位朋友整理的一个WebConfig配置文件详解,觉得不错,转载一下: <?xml version="1.0"?> <!--注意: 除了手动编辑此文 ...
随机推荐
- Spark SQL官网阅读笔记
Spark SQL是Spark中用于结构化数据处理的组件. Spark SQL可以从Hive中读取数据. 执行结果是Dataset/DataFrame. DataFrame是一个分布式数据容器.然而D ...
- Fisher–Yates shuffle 洗牌算法
Fisher-Yates shuffle 是一种生成有限序列的随机排列的算法--简单地说,该算法可以对序列进行混排.本人能力有限,且懒.不会扒论文去研究该算法在数学上的证明,只能抄袭网上的博客总结一遍 ...
- 关键字static
原文出处:http://cmsblogs.com/ 『chenssy』 一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Ja ...
- JSP(一):JSP概要
问题: 在学习了 Servlet 之后,使用 Servlet 进行页面的展现,代码书写过于麻烦.极大的影响了开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行网页的编程工作呢? 解决: 使 ...
- K-means算法性能评估及其优化
1. SSE误差平方和(Sum of Square due to Error): 聚类情况: 计算公式: 注:SSE参数计算的内容为当前迭代得到的中心位置到各自中心点簇的欧式距离总和,这个值越小表示当 ...
- SQL Server 获取 ActiveDirectory 用户信息
SQL Server 是可以访问活动目录中的用户信息的. 1. 先用domain administrator建立一个linked server 2. 然后用OpenQuery去查询活动目录 大家可 ...
- C语言第零次作业
Q1.你对网络专业或者计算机专业了解是怎样? 说实话不了解网络专业,在甚至在填志愿之前我都不曾听说过.但经过一番的查阅资料.现在,首先我了解到我们主要学习计算机.通信以及网络方面的基础理论.设计原理, ...
- ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)
1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...
- Ubuntu Server 12.04(14.04) 静态IP简洁配置
1.配置静态IP地址: # vim /etc/network/interfaces 原内容有如下4行:auto loiface lo inet loopback auto eth0iface eth0 ...
- WinForm 中 comboBox控件之数据绑定
一.IList 现在我们直接创建一个List集合,然后绑定 1 IList<string> list = new List<string>(); 2 list.Add(&quo ...