k8s三 | 使用YAML文件创建k8s资源对象
参考资料:从Docker到Kubernetes进阶-阳明
目录标题
- 一、YAML基础
- 1. Maps
- 2. Lists
- 二、使用Yaml创建k8s资源对象
- 1. 使用Yaml创建创建Pod
- 2. 使用Yaml创建创建Deployment
这篇文章我们来学习使用 Kubernetes 的必备技能:编写配置文件
首先Kubernetes 跟 Docker 等项目的不同就在于它不推荐使用命令行的方式直接运行容器(虽然 Kubernetes 项目也支持这种方式,比如:kubectl run),而是希望你用 YAML 文件的方式,即:把容器的定义、参数、配置,统统记录在一个 YAML 文件中,然后用一句指令把它运行起来,这样做的好处是可以通过文件的方式记录 Kubernetes 做了什么操作和相关的配置。
一、YAML基础
YAML是专门用来写配置文件的语言,非常简洁和强大,远比JSON格式方便。
YAML语言(发音/jeme/)的设计目标,就是方便人类读写。
它的基本语法规则如下:
- 大小写敏感使用
- 缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略
在kubernetes中,需要了解以下两种结构类型
- Maps:字典即key:value 键值对
- Lists: 列表即数组
1. Maps
Maps是字典,也就是一个 key: value的键值对,Maps可以让我们更加方便的去书写配置信息,例如
---
apiVersion: v1
kind: Pod
---
是分隔符,是可选的,在单一文件中可用连续三个---
区分来多个文件或者资源对象。 上面分别定义两个key(键): kind和 apiVersion,对应的value(值)分别是:V1和Pod。
Maps嵌套
---
apiVersion: v1
kind: Pod
metadata:name: nginxlables:app: web
metadata这个Key对应的value值就是一个Maps,而且嵌套的Labels这个KEY的值又是一个Maps,我们可以根据自己的情况进行多层嵌套。
2. Lists
Lists列表,其实就是数组,在YAML文件中我们可以这样定义
args- Cat- Dog- Fish
可以有任何数量的项在列表中,每个项的定义以破折号(-)
开头的与父元素直接可以缩进一个空格。Iist的子项也可以是Maps,Maps的子项也可以是List如下所示
---
apiVersion: v1
kind: Pod
metadata:name: nginxlabels:app: web
spec:containers:- name: front-endimage: nginxports:- containerPort: 80- name: flaskapp-demoimage: jcdemo/flaskappports:- containerPort: 5000
我们定义了一个叫containers
的List对象,每个子项都由name,image,ports的组成,每个ports都有一个key为containerPort的map组成。
二、使用Yaml创建k8s资源对象
1. 使用Yaml创建创建Pod
---
apiVersion: v1
kind: Pod
metadata:name: kube100-sitelabels:app: web
spec:containers:- name: front-endimage: nginxports:- containerPort: 80- name: flaskapp-demoimage: jcdemo/flaskappports:- containerPort: 5000
这是我们上面定义的一个普通的POD文件,我们先来简单分析下文件内容
- apiversion:这里它的值是v1,这个版本号需要根据我们安装的 kubernetesk版本资源类型进行变化的,记住不是写死的。
- kind:这里我们创建的是一个Pod,当然根据你的实际情况,这里资源类型可以是 Deployment、Job、 ngress、 Service等。
- metadata:包含了我们定义的Pod的一些meta信息,比如名称namespace、标签等信息。
- spec:包括一些 containers、 storage、volumes,或者其他 Kubernetes需要知道的参数,以及诸如是否在容器失败时重新启动容可以在特定 KubernetesAPI找到完整的 Kubernetes Podl的属性。
一个典型的容器的定义
····
spec:containers:- name: front-endimage: nginxports:- containerPort: 80
这是一个简单的最小定义,名字为( front-end),基于 nginx的镜像,以及容器将会监听的一个端口(80)。在这些当中,只有名字是非常需要的,你也可以指定一个更加复杂的属性,例如在容器启动时运行的命令,应使用的参数工作目录,或每次实例化时是否拉取映像的新副本。以下为容器可选的设置属性:
- name
- image
- command
- args
- workingDir
- ports
- env
- resources
- volumeMounts
- livenessProbe
- readinessProbe
- livecycle
- terminationMessage
- imagePullPolicy
- securityContext
- stdin
- stdinOnce
- tty
我们将上面的内容保存为Pod.yaml 文件,来创建Pod资源对象
$ kubectl create -f pod.yaml
pod "kube 100-site"created
查看POD的状态
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kube-100-site 2/2 Running 0 1m
如果状态不是Running,可以使用前面的 kubectl describe进行排查。
我们先删除上面创建的POD:
$ kubectl delete -f pod.yaml
pod "kube 100-site"deleted
2. 使用Yaml创建创建Deployment
在上面的例子中,我们只是单纯的POD实例,但是如果这个POD出现了故障的话,我们的服务也就挂了,所以 kubernetest提供了一个 Deployment的概念,可去管理POD的副本,也就是副本集,这样就可以保证一定数量的副本是可用的,不会以为一个pod挂掉导致整个服务挂掉。我们可以这样定义一个Deployment
---
apiVersion : extensions/v1beta1
kind : Deployment
metadataname : kube100-site
spec:replicas : 2
注意: 这里的 apiVersion对应的值extensions/1beta1
,kind指定为Deployment,然后我们可以指定一些meta信息,比如名字,或者标签之类的。最后最重要的是spec配置选项,这里我们定义需要两个副本,当然还有很多可以设置的属性,比如一个Pod在没有任何错误变成准备的情况下必须达到的最小秒数。
现在我们来定义一个完整的 Deployment的YAML文件
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: kube100-site
spec:replicas: 2template:metadata:labels:app: webspec:containers:- name: front-endimage: nginxports:- containerPort: 80- name: flaskapp-demoimage: jcdemo/flaskappports:- containerPort: 5000
注意其中的 Template,其实就是POD对象的定义。
将上面的YAML文件保存为 deployment.yaml,然后创建Deployment
$ kubectl create -f deployment.yaml
同样的,想要查看它的状态,我们可以检查 Deployment的列表
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
kube100-site 2 2 2 2 3d
我们可以看到所有的Pods都已经正常运行。
总结:到这里我们就完成了使用YAML文件创建 Kubernetes Deployment的过程,在创建其他的资源对象时也是如此,在了解了YAML文件的基础后,定义YAML文件其实已经很简单了,最主要的是要根据实际情况去定义YAML文件,所以查阅 Kubernetes文档很重要可以使用http://www.yamllint.com/去检验YAML文件的合法性。
上篇文章:k8s二 | 使用kubeadm快速部署K8S集群
系列文章:深入理解Kuerneters
关注公众号回复【k8s】关键词获取视频教程及更多资料:
k8s三 | 使用YAML文件创建k8s资源对象相关推荐
- client-go入门之3:解析 yaml 文件并创建 k8s 资源对象
我们使用 k8s 提供的命令行工具 kubeclt 可以很方便地使用kubectl apply -f xx.yaml从 yaml 文件创建 k8s 的资源对象,但使用 client-go 的时候,通常 ...
- CoreDNS与k8s资源对象详解-Day03
1. K8s DNS 官网地址:https://github.com/coredns/coredns https://coredns.io/ https://coredns.io/plugins 1. ...
- 源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的
作者 | 樊大勇 KubeVela 是一个简单易用又高度可扩展的云原生应用管理引擎,是基于 Kubernetes 及阿里云与微软云共同发布的云原生应用开发模型 OAM 构建. KubeVela 基于 ...
- k8s系列(四)——资源对象
k8s系列四--资源对象 pod概念 思考:为什么k8s会引出pod这个概念,容器不能解决么? 我的理解:一组密切相关的服务使用容器的话,如果他们的镜像不在一个容器里的话,那么就需要配置反向代理进行通 ...
- 使用yaml文件创建deployment来部署一个应用程序到k8s集群
作者: wucong60 原文: https://blog.csdn.net/wucong60/article/details/81586272 系列链接 Kubernetes系列之一:在Ubuntu ...
- k8s(三):命令行工具kubectl与核心技术Pod
文章目录 1. kubectl 1.1 概述 1.2 kubectl命令语法 1.3 kubectl命令举例 2. 核心技术-Pod 2.1 概述 2.2 Pod特性 2.3 拉取镜像策略 2.4 资 ...
- K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)
K8S--关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署) 一.yaml文件编写流程 二.证书自签 一.yaml文件编写流程 rbac.yaml---->secret.yaml- ...
- K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路
K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 文章目录 K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 1.Node节点资源不足可能会产生的故障 2.Node节点 ...
- k8s-------(| 二 |)资源对象Namespace,Service
文章目录 一. Namespace(命名空间) Pod跨namespace访问Service服务 二 . Service kube-proxy和service的关系: 一.Service 代理方式 1 ...
最新文章
- c语言菱形花圃,一种便于自动修剪花圃的电锯支架的制作方法
- 3.API的调用过程(保存现场)
- SESSION常见问题辑
- 直线的端点画垂线的lisp_【以课说法】线段、射线、直线
- python远程登录并执行命令_Python - 远程SSH执行命令
- 流水线调度(51Nod-1205)
- SQLite的sqlite3_column_blob函数
- [转载] python indices_Python numpy.indices() 使用实例
- ERROR: The environment variable VG_GNU_PACKAGE must be set. Aborting.
- 2021年老杨通信工程师中级互联网技术视频讲解
- 斐讯K3刷官方root版
- 微信获取当前位置-vue中
- 历年美赛赛题和特等奖论文集合,文中直接获取!!!
- 设计模式之装饰者模式
- tc android开发工具,TC5.0 (一个脚本开发工具)其底层实现原理分析与推测(半成品)...
- sMRI影像数据3维CNN卷积
- 鬼谷八荒逆天改命修改教程(3月亲测有效)
- Qt4.7.3在dm6446平台上的移植经验与教训
- 分子对接软件(薛定谔Schrodinger) 使用
- 软件测试类工具大全2009版
热门文章
- 工作3年的985硕士,精通数据和代码,但在报表上我却无能为力
- HFSS 初学者入门(一)
- 为什么要发布新闻稿?新闻稿发布的9大优势
- 坑爹的freemarker引用 css样式变乱
- 2019 第十届蓝桥杯省赛C/C++大学B组 试题+题解
- 北航计算机考研复试线预测,2021年北京航空航天大学考研分数线预测!考生数学满分,网友:内心炸裂...
- ABAP 二分法查找与SORT排序
- 看似复杂炫酷的数据可视化大屏,学会这个工具轻松搞定
- 微信网站链接提示已停止访问该网页怎么办
- 什么是docker和docker的架构