「走进k8s」Kubernetes1.15.1配置软知识yaml(16)

上次说了在Kubernetes1.15.1上安全 Dashboard,也接触到了yaml文件,就是通过github下载dashboard.yaml安装dashboard。许多了解可能对yaml不是太熟悉,开发的接触最多的就是配置文件properties,但是在springboot官方也开始建议使用yml来进行配置。.

(一)YAML 基础

yml是什么鬼,今天我带你们来一探究竟。 YAML(Yet Another Markup Language)(发音 /ˈjæməl/ ) 一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言。

  • ① 官网

https://yaml.org/

  • ②适应场景
  1. 脚本语言:由于实现简单,解析成本很低,YAML 特别适合在脚本语言中使用
  2. 序列化: YAML是由宿主语言数据类型直转,的比较适合做序列化。
  3. 配置文件:写 YAML 要比写 XML 快得多(无需关注标签或引号),并且比 INI 文档功能更强。由于兼容性问题,不同语言间的数据流转建议不要用 YAML。
  • ③语言优点
  1. 易于人们阅读。
  2. 数据在编程语言之间是可移植的。
  3. 匹配敏捷语言的本机数据结构。
  4. 具有一致的模型来支持通用工具。
  5. 支持单程处理。
  6. 具有表现力和可扩展性。
  7. 易于实现和使用。
  • ④基本语法

1.大小写敏感。

2.使用缩进表示层级关系。

3.缩进时不允许使用Tab键,只允许使用空格。(可以通过编译器将tab键设置成2个空格或者4个空格)

4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。(使用一个空格缩进,都使用一个。使用二个空格缩进,都使用二个),建议还是2个空格,这样好看些。

5.# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

6.破折号后面跟一个空格(a dash and space)表示列表

7.用冒号和空格表示键值对 key: value

  • ⑤解惑

有yaml 和yml 到底他们之前有什么区别? 我来解答语法格式完全一样。就是文件名不一样,yaml是Kubernetes的配置文件。

  • ⑥值的写法

普通的值(数字1234567890,字符串”ssss”/null,布尔true/false )

1.​ k: v:字面直接来写;
​2. 字符串默认不用加上单引号或者双引号;
3. “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
​ name: “idig8 n com”:输出;idig8换行com
4. ”:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: ‘idig8n com’:输出;idig8n com

(二)Kubernetes 中常用YAML格式(map,list)

http://www.bejson.com/validators/yaml/ 在线yml校验器

  • ①对象、Map(属性和值)(键值对)

第一行的—是分隔符,是可选的,在单一文件中,可用连续三个连字号—区分多个文件。这里我们可以看到,我们有两个键:friends,他们对应的值分别是:lastName: zhangsan 和 age: 20。

---
friends:
  lastName: zhangsan
  age: 20

针对这个json格式或许你对上面的 JSON 文件更熟悉,但是不得不说json是不是更麻烦些

{
  "friends":: {
    "lastName": "zhangsan",
    "age":20
  }
}
  • ②数组(List、Set)
    > 说白了就是数组。
    > 用- 值表示数组中的一个元素。
pets:
 - pig
 - cat
 - dog

对应的json格式

{
    "pets": ["pig","cat", "dog"]
}
  • 数组List和Map的混合
    > 来个混合的看看json和yml的对比
person:
    lastName: liming
    age: 34
    boss: false
    birth: 2019/08/03
    maps: {k1: v1,k2: 12}
    lists:
      - lisi
      - zhaoliu
    dog:
      name: 小狗
      age: 10

对应的json格式

{
    "person": {
        "lastName": "liming",
        "age": 34,
        "boss": false,
        "birth": "2019/08/03",
        "maps": {
            "k1": "v1",
            "k2": 12
        },
        "lists": [
            "lisi",
            "zhaoliu"
        ],
        "dog": {
            "name": "小狗",
            "age": 10
        }
    }
}

通过上边的对比很明显,yml要比json轻量很多。缩进就搞定了,不需要复杂的对照的大括号,中括号,双引号。

(三)Kubernetes 中 yaml的编写

  • ① kubernetes API文档

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15

不要直接创建一个pod,要通过Deployment, Job, or StatefulSet.

  • ② 尝试编写一个pod的yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: first-pod
  labels:
    app: bash
    tir: backend
spec:
  containers:
  - name: bash-container
    image: docker.io/busybox
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

  • ③ 执行yaml查看
kubectl apply -f pod.yaml
kubectl describe first-pod

kubectl  get pods

  • ④ 登录dashboard

查看token

 kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/admin/{print $1}')   

登录dashboard 输入token:https://192.168.86.101:32500/#!/login

查看到刚才通过命令的方式创建

查看容器详情:这个跟:kubectl describe first-pod 展示的内容是一致的

  • ④ 通过dashboard里面的yaml来生成pod

复制yaml文件格式进去

创建中

创建成功

PS:这次主要让大家了解yaml,也通过两种方式创建了pod。熟悉yaml的两种方式Map和List。
下次一起pod,重点还是通过官方api来学习。看一手资料。

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:「走进k8s」Kubernetes1.15.1配置软知识yaml(16)
上一篇: 下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注