Kubernetes入门实践(YAML)
YAML是Kubernetes的标准工作语言
YAML介绍
Kubernetes使用了YAML语言一个非常关键的特性,叫作"声明式",对应的有另外一个词: "命令式"
先简单描述声明式和命令式之间的区别: 如Docker和Dokcerfile就属于"命令式",大多数编程语言属于命令式,特点是交互性强,注重顺序和过程,必须告诉计算机每步该做什么。所有的步骤都列清楚,这样程序才能一步步走下去。对应的,声明式不关心具体过程,更注重结果,只要告诉它一个目标状态,就会自己想办法完成任务,较为智能化。我们希望Kubernetes能够自动化,其内部的众多组件和插件能够自动监控和管理应用,这个时候用命令式操控它就不合适了,应该使用声明式,因此使用专门的YAML语言。
YAML是JSON的超集,支持整数、浮点数、布尔、字符串、数组和对象等数据类型,也就是说,任何JSON文档都是YAML文档
YAML简单实例:
数组
# YAML数组(列表)
OS:
- linux
- macOS
- Windows
这段YAML对应的JSON如下:
{
"OS": ["linux","macOS","Windows"]
}
对比之下,YAML的形式更为简单,没有闭合花括号、方括号的麻烦,每个元素后面无需逗号
字典
# YAML对象(字典)
Kubernetes:
master:1
worker:3
等价的JSON:
{
"Kubernetes": {
"master": 1,
"worker": 3
}
}
YAML中的Key无需双引号
利用这两个对象,可以描述任意的Kubernetes资源对象:
Kubernetes:
master:
- apiserver: running
- etcd: running
node:
- kubelet: running
- kube-proxy: down
- container-runtime: [docker,containerd,cri-o]
Kubernetes下有两个数组master和node,maste中是两对键值:apiserver:running和etcd:running,而node同理
API对象
使用kubectl api-resources来查看当前Kubernetes版本支持的所有对象:
$ minikube kubectl -- api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
...
NAME一列是对象的名字,比如ConfigMap、Pod、Service等等,第二列SHORTNAME是该资源的简写
API对象全面描述了集群的节点、应用、配置、服务、帐号等信息,apiserver会将它们存储在数据库etcd里,然后kubelet、scheduler、controller-manager等组件通过apiserver来操作,就在API对象这个抽象层次实现了对整个集群的管理
可以编辑YAML,让Kubernetes自己去拉取镜像:
apiVersion: v1
kind: Pod
metadata:
name: ngx-pod
labels:
env: demo
owner: test
spec:
containers:
- image: nginx:alpine
name: ngx
ports:
- containerPort: 80
kind指明了这是一个Pod,image要使用nginx:alpine镜像创建一个容器,containerPort指明开放80端口
apiVersion、kind、metadata算是API对象的基本信息,apiVersion表示操作这种资源的API版本号,kind表示资源对象类型,metadata表示资源的元信息
name和labels是元信息,name为Pod命名,labels为Pod的标签信息,便于查找,分别是env和owner
kubectl将基于这些基本信息生成HTTP请求发送给apiserver,spec表示对对象的期望状态,其中有一个containers数组,其中每个元素都是一个对象,指定了名字、镜像、端口等信息
上述的YAML文档完整地描述了一个类型是Pod的API对象,使用kubectl apply和kubectl delete再加上参数-f就可以用这个文件创建和删除对象
创建:
$ minikube kubectl -- apply -f ngx-pod.yml
pod/ngx-pod created
删除:
$ minikube kubectl -- delete -f ngx-pod.yml
pod "ngx-pod" deleted
加上--v=9就可以看到HTTP请求的详细信息:
$ minikube kubectl -- apply -f ngx-pod.yml --v=9
I0723 21:22:29.488559 14027 loader.go:372] Config loaded from file: /home/hwx/.kube/config
I0723 21:22:29.488939 14027 cert_rotation.go:137] Starting client certificate rotation controller
I0723 21:22:29.489379 14027 round_trippers.go:466] curl -v -XGET -H "Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf" -H "User-Agent: kubectl/v1.23.3 (linux/amd64) kubernetes/816c97a" 'https://192.168.59.100:8443/openapi/v2?timeout=32s'
I0723 21:22:29.493235 14027 round_trippers.go:510] HTTP Trace: Dial to tcp:127.0.0.1:7890 succeed
I0723 21:22:29.498071 14027 round_trippers.go:570] HTTP Statistics: DNSLookup 0 ms Dial 0 ms TLSHandshake 3 ms ServerProcessing 0 ms Duration 8 ms
I0723 21:22:29.498087 14027 round_trippers.go:577] Response Headers:
I0723 21:22:29.498092 14027 round_trippers.go:580] Audit-Id: b9d283c2-26c6-4c7b-953a-91edcc96c164
I0723 21:22:29.498098 14027 round_trippers.go:580] Content-Type: application/octet-stream
I0723 21:22:29.498102 14027 round_trippers.go:580] Last-Modified: Sat, 23 Jul 2022 10:25:52 GMT
编写技巧
使用kubectl api-resources命令查看资源对象相应的API版本和类型
使用kubectl explain相当于是Kubernetes自带的API文档,会给出对象字段的详细说明
$ minikube kubectl -- explain pod
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
....
$ minikube kubectl -- explain pod.metadata
KIND: Pod
VERSION: v1
RESOURCE: metadata <Object>
DESCRIPTION:
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
ObjectMeta is metadata that all persisted resources must have, which
includes all objects users must create.
......
生成样板:
$ minikube kubectl -- run ngx --image=nginx:alpine --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: ngx
name: ngx
spec:
containers:
- image: nginx:alpine
name: ngx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
加上两个特殊参数--dry-run=client和-o yaml,前者是空运行,后者是生成YAML格式,这两者结合不会有实际的创建动作,只生成YAML文件
Kubernetes入门实践(YAML)的更多相关文章
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- kubernetes入门实践
k8s中文文档 k8s概念比较多,有什么概念的疑惑的推荐看k8s中文文档. me的环境 操作系统:centos7 docker:1.12.6 环境跟me的不一致?不要慌,基本大部分操作都是行的通的. ...
- 云原生入门 第五章:kubernetes学习实践
1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...
- 第一章 Kubernetes入门
第一章 Kubernetes入门 kubernetes是基于容器技术的分布式架构领先方案,是一个完备的分布式系统支撑平台. kubernetes带来的好处:1)全面拥抱微服务:2)统可以随时随地整体“ ...
- Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型
机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- sass、less和stylus的安装使用和入门实践
刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用c ...
- Django入门实践(三)
Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...
- Django入门实践(二)
Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...
- Django入门实践(一)
Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...
随机推荐
- echarts图表自适应屏幕/浏览器窗口大小
昨天完成echarts柱状图的生成,突然发现在项目中还有个小缺陷,当柱状图完成渲染之后,放大缩小浏览器窗口echarts柱状图宽度没有随之改变. 接昨天的代码做了小调整: setTimeout(fun ...
- DNS解析原理(www.baidu.com)
QueryDns,py程序运行问题解决 关于远程访问数据库问题 这个我用NAVICAT或者是python程序连接都连不上他那个数据库(可能是数据库设定的权限没有开启?) 这个程序真的跑不起来,考虑自己 ...
- antd动态tree 自定义样式
import React, { useEffect, useState } from 'react';import { Tree } from 'antd';import './index.less' ...
- BlenderGIS记录
blender GIS 的插件名:"3Dview:blenderGIS" 具体使用方法看文档. 选择地图时选择bing地图会快一点.如果能挂梯子可以选择google地图 shift ...
- 用猿大师的VLC播放插件在高版本Chrome播放RTSP视频流,并抓图、录像、回放、倍速等
因为项目上需要把海康威视摄像头集成到WEB网页中播放,于是开始了对WEB播放摄像头方案的各种折腾. 2015年之前还可以用VLC原生播放器在Chrome.Firefox等浏览器中直接播放,延迟比较低, ...
- JS和PHP中能转为布尔false的值的对比
实际开发中经常会使用到JS和PHP中的变量转布尔值进行条件判断,下面对两种语言中转布尔类型结果为false的值进行对比,加深记忆和方便引用. 除了下表列出项,其它的值均转成真值true . 转布尔值后 ...
- Python学习笔记W1
今天正式开始学习Python语言,学习方式观看教学视频,完成作业.视频共计28周,争取每天2天完成一周教学内容,共计56天,预计完成日期:2019-2-28. Owen写于2018-12-22 ...
- Winform 使用DotNetBar 设置界面为Office2007 样式
public partial class FrmMain : DevComponents.DotNetBar.Office2007RibbonForm { public FrmMain() { Ini ...
- 如何加快打开网页的速度------通过调节“QoS数据包计划程序”的“限制可保留宽带”实现&如何解决win10可能找不到gpedit.msc的问题
参考:http://www.windowszj.com/news/win10/42119.html http://www.docin.com/p-1510367352.html(QoS数据包计划程序有 ...
- Android笔记--图形控制
图形Drawable 形状图形(其定义文件是以shape标签为根节点的XML描述文件,支持四种类型的形状) 具体实现: 在shape标签里面,solid指定填充的颜色,stroke指定边框颜色,cor ...