在之前的课程中,当我们安装kubernetes集群时,我们使用了一些YAML组件来创建相关资源,但人们对YAML组件仍然不熟悉。所以让我们简单看看YAML是如何制造的,让YAML定义k8s pod,然后定义k8s部署。
YAML基金会的基本语法规则如下:
写敏感缩进表示层次结构是缩进的。不允许⽤Tab,只允许空格。缩进的空格数无所谓,只要同一级别的元素左侧对齐#表示注释即可。从这个字符到结尾,解析器都会忽略。在我们的kubernetes中,您只需要两种类型的结构:
也就是说,你可能会遇到列表的地图,地图的列表,等等。不过不用担心,只要你掌握了这两个结构,我们暂时不讨论其他更复杂的。
地图我们先来看看地图。我们都知道Maps是一个字典,也就是key:value的键值对。地图可以让我们更容易地编写配置信息,例如:
- - - API版本:V1种类:POD的第四个- - -是分隔符,可选。在单个棋子中,可以用三个连续的连字符---来区分多个棋子。我们可以看到我们有两个键:kind和apiVersion,它们对应的值是v1和Pod。如果把YAML上的转换成JSON格式,你就很容易理解了:
{"API version": "v1 "," kind": "pod"}我们正在创建一个相对复杂的YAML块,一个键对应的值不是字符串而是Maps:
---API版本:V1种类:Pod元数据:名称:kube 100-站点标签:App: Yaml on the Web。元数据的关键字对应一个地图,嵌套标签的关键字是一个地图。可以根据自己的情况进行多层嵌套。
我们还提到了YAML的语法规则。YAML处理器根据缩进知道内容之间的关系。例如,在我们的YAML作品中,我缩进了两个空格。空格的数量并不重要,但是你要保持平直,要求空格少一点(什么意思?就是不缩进两个空格,缩进四个空格)。
我们可以看到名称和标签是在同一级别缩进的,所以YAML处理器知道它们属于同一个地图,app是标签的值因为app缩进更多。
注意:在YAML千万不要使用TAB键。
类似地,我们可以将YAML片段转换成JSON片段:
{"API version": "v1 "," kind": "pod "," metadata ":{ " name ":" kube 100-site "," labels": {"app": "web"}}也许你对上的JSON组件更熟悉,但你不得不承认YAML组件的语义。
ListsLists是一个列表或数组。在YAML,我们可以这样定义它:
Arg - cat -dog -fish你可以在列表中有任意数量的项目。每一项的定义都以破折号(-)开头,元素可以直接缩进一个空格。对应的JSON格式如下:
{"args": ['猫','狗','鱼']}当然list的物品也可以是地图,地图的物品也可以是如下图的列表:
--- apiVersion: v1种类:Pod元数据:名称:kube 100-站点标签:app: web规格:containers: -名称:front-end image: nginx端口:-container po Rt:80 -名称:flaskap P-demo image:JC demo/flaskapp ports:-container port:5000。对于这个YAML,我们定义了一个名为containers的列表对象。每个条目由名称、图像和端口组成,每个端口都有一个映射,映射的关键字是containerPort。同样,我们可以将其转换为JSON格式,如下所示:
{ "apiVersion": "v1 "," kind": "Pod "," metadata ":{ " name ":" kube 100-site "," labels": { "app": web" } }," spec ":{ " containers ":[{ " name ":" front -end "," image": "nginx "," ports ":[{ " container port ":" 80 " }]},{ " name ":" flaskap-demo "," image": "jcdemo/flaskapp "," ports ":[{ " container port ":":" 5000
让YAML制造Pod现在我们对YAML棋子有了一个大致的了解,相信你也不像以前那么笨了吧?让我们使用YAML创建一个部署。
API描述:https://kubernetes.io/docs/reference/generated/kubernetes & MINUS;API/v 1.10/\ color { # 00 c5cd } { https://kubernetes . io/docs/reference/generated/kubernetes -API/v 1.10/} https://kubernetes . io/docs/reference/generated/kubernetes & MINUS;api/v1.10/
创建Pod---API版本:V1种类:pod metadata:Name:kube 100-site labels:App:web spec:Containers:-Name:front -Endimage:nginxports:-Conta Erport:80 -Name:flaskap P-demo image:JC demo/flaskap ports:-container port:5000。这是我们定义的普通pod。我们先简单分析下一个的内容:
ApiVersion,它的值是v1,这个版本号需要根据我们安装的kubernetes版本和资源类型来改变。记住它不是一个死亡的种类,这是我们创造的一个圆荚体。当然,根据你的实际情况,这个资源类型可以是部署、作业、入口、服务等待。元数据:它包含我们定义的Pod的一些元信息,如名称、命名空间、标签等。Spec:包括容器、存储、卷或其他Kubernetes需要知道的一些参数,以及一些属性,比如当容器失败时是否重新启动容器。您可以在特定的Kubernetes API中找到Kubernetes Pod的完整属性。让我们看看典型容器的定义:
…spec:containers:-name:front-end image:nginx ports:-container port:80…在本例中,这是一个简单的定义:一个名称(front -end),一个基于nginx的镜像,以及一个容器将监听的终端(80)。其中,通常只需要名称,您还可以指定一个更复杂的属性,比如启动容器时要发送的命令、要使用的参数、记录,或者是否在每次实例化时提取图像的新副本。以下是容器的一些可选设置属性:
名字
imagecommandarsgworkingdirportsenvresourcesvolumemountsliveness probereadinessprobelivecycleterminationmessagepathimagpullpolicysecuritycontextstdinstd在inOncetty知道了POD的定义后,我们将创建POD的YAML保存为POD.yaml,然后让Kubectl创建POD:
$ kubectl create -f POD . YAML pod“kube 100-site”已创建,然后我们可以使用我们之前熟悉的kubectl命令来检查pod的状态:
$ kubectl获取pod名称就绪状态重新启动age kube100-site2/2在此处运行0 1m,我们的pod已成功创建。如果您在创建过程中有任何问题,我们也可以让前kubectl描述进行故障排除。让我们先删除在以下位置创建的POD:
$ kubectl delete -f pod . YAML pod“kube 100-site”已删除
创建部署现在,我们可以创建一个真正的部署。在上面的例子中,我们只是简单地创建了一个POD实例,但是如果这个POD出现故障,我们的服务也会挂起,所以k8s提供了一个部署的概念,让kubernetes管理group POD的副本,也就是副本集,从而保证固定数量的副本可用,整个服务不会因为这个POD的挂起而挂起。我们可以这样定义部署:
---API版本:Extensions/v1 beta 1 kind:Deployment Metadata:Name:kube 100-site spec:Replicas:2注意API版本对应的值是Extensions/V1 beta1,当然kind要指定为Deployment,因为那是我们需要的,然后我们可以指定一些元信息,比如名称,或者标签。最后,最重要的是规格配置选项。我们需要两份这个定义。当然,有很多属性可以设置,比如一个Pod必须达到的最大秒数,不能有任何错误。我们可以在Kubernetes v1beta1 API reference中找到可由Depolyment指定的参数的完整列表。现在,让我们定义部署的完整YAML组件:
---API version:extensions/v1beta 1种类:部署元数据:名称:kube 100-站点规格:副本:2模板:元数据:标签:app: web规格:容器:-名称:front-end ima Ge: nginx端口:-container port:80 -名称:flaskapp -演示图像:JC demo/flaskapp ports:-container port:5000。是不是很像我们的POD.yaml?注意,模板实际上是pod对象的定义。将YAML保存为Deployment.yaml,然后创建部署:
$ kubectl create -fdeployment . YAML部署“kube100-site”已创建````同样,如果您想检查其状态,我们可以检查部署列表```` go $ kubectl get deployment name desired current up-to -date available age kube 100-site 2 2 2 2m我们可以看到所有的pod都已正常发货。至此,我们已经完成了为YAML片段创建Kubernetes部署的过程。了解了YAML作品的基础之后,定义YAML作品其实很简单。最重要的是根据实际情况定义YAML作品,因此参考Kubernetes文件非常重要。
Http://www.yamllint.com/可以检查YAML作品的合法性。
以上是云原生系列Kubernetes对YAML文件深度解析的详细内容。更多Kubernetes对YAML档案的分析,请关注主机频道zhujipindao的其他相关文章。com!
评论前必须登录!
注册