参考资料:从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资源对象相关推荐

  1. client-go入门之3:解析 yaml 文件并创建 k8s 资源对象

    我们使用 k8s 提供的命令行工具 kubeclt 可以很方便地使用kubectl apply -f xx.yaml从 yaml 文件创建 k8s 的资源对象,但使用 client-go 的时候,通常 ...

  2. CoreDNS与k8s资源对象详解-Day03

    1. K8s DNS 官网地址:https://github.com/coredns/coredns https://coredns.io/ https://coredns.io/plugins 1. ...

  3. 源码解读:KubeVela 是如何将 appfile 转换为 K8s 特定资源对象的

    作者 | 樊大勇 KubeVela 是一个简单易用又高度可扩展的云原生应用管理引擎,是基于 Kubernetes 及阿里云与微软云共同发布的云原生应用开发模型 OAM 构建. KubeVela 基于 ...

  4. k8s系列(四)——资源对象

    k8s系列四--资源对象 pod概念 思考:为什么k8s会引出pod这个概念,容器不能解决么? 我的理解:一组密切相关的服务使用容器的话,如果他们的镜像不在一个容器里的话,那么就需要配置反向代理进行通 ...

  5. 使用yaml文件创建deployment来部署一个应用程序到k8s集群

    作者: wucong60 原文: https://blog.csdn.net/wucong60/article/details/81586272 系列链接 Kubernetes系列之一:在Ubuntu ...

  6. k8s(三):命令行工具kubectl与核心技术Pod

    文章目录 1. kubectl 1.1 概述 1.2 kubectl命令语法 1.3 kubectl命令举例 2. 核心技术-Pod 2.1 概述 2.2 Pod特性 2.3 拉取镜像策略 2.4 资 ...

  7. K8S——关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署)

    K8S--关于K8S控制台的yaml文件编写(基于上一章多节点K8S部署) 一.yaml文件编写流程 二.证书自签 一.yaml文件编写流程 rbac.yaml---->secret.yaml- ...

  8. K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路

    K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 文章目录 K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 1.Node节点资源不足可能会产生的故障 2.Node节点 ...

  9. k8s-------(| 二 |)资源对象Namespace,Service

    文章目录 一. Namespace(命名空间) Pod跨namespace访问Service服务 二 . Service kube-proxy和service的关系: 一.Service 代理方式 1 ...

最新文章

  1. c语言菱形花圃,一种便于自动修剪花圃的电锯支架的制作方法
  2. 3.API的调用过程(保存现场)
  3. SESSION常见问题辑
  4. 直线的端点画垂线的lisp_【以课说法】线段、射线、直线
  5. python远程登录并执行命令_Python - 远程SSH执行命令
  6. 流水线调度(51Nod-1205)
  7. SQLite的sqlite3_column_blob函数
  8. [转载] python indices_Python numpy.indices() 使用实例
  9. ERROR: The environment variable VG_GNU_PACKAGE must be set. Aborting.
  10. 2021年老杨通信工程师中级互联网技术视频讲解
  11. 斐讯K3刷官方root版
  12. 微信获取当前位置-vue中
  13. 历年美赛赛题和特等奖论文集合,文中直接获取!!!
  14. 设计模式之装饰者模式
  15. tc android开发工具,TC5.0 (一个脚本开发工具)其底层实现原理分析与推测(半成品)...
  16. sMRI影像数据3维CNN卷积
  17. 鬼谷八荒逆天改命修改教程(3月亲测有效)
  18. Qt4.7.3在dm6446平台上的移植经验与教训
  19. 分子对接软件(薛定谔Schrodinger) 使用
  20. 软件测试类工具大全2009版

热门文章

  1. 工作3年的985硕士,精通数据和代码,但在报表上我却无能为力
  2. HFSS 初学者入门(一)
  3. 为什么要发布新闻稿?新闻稿发布的9大优势
  4. 坑爹的freemarker引用 css样式变乱
  5. 2019 第十届蓝桥杯省赛C/C++大学B组 试题+题解
  6. 北航计算机考研复试线预测,2021年北京航空航天大学考研分数线预测!考生数学满分,网友:内心炸裂...
  7. ABAP 二分法查找与SORT排序
  8. 看似复杂炫酷的数据可视化大屏,学会这个工具轻松搞定
  9. 微信网站链接提示已停止访问该网页怎么办
  10. 什么是docker和docker的架构