当前位置:首页 > PAAS > 正文内容

kubernetes中的yaml文件

poppy-jun3个月前 (12-05)PAAS127

注: 这里的C#代码,都是虚拟机命令

一、yaml文件基础:

    YAML是“YAML Ain't a Markup Langua”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

     YAML的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

    YAML的配置文件后缀为.yml或.yaml,如test.yml。

YAML的基本语法规则:

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进时不允许使用Tab键,只允许使用空格

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

YAML支持的数据结构如下:

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)

  • 纯量(scalars):单个的、不可再分的值

1. YAML对象

  • 对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。也可以使用 key:{key1: value1, key2: value2, ...}

  • 较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value

2. YAML数组

  • 以 - 开头的行表示构成一个数组

   - A

   - B

   - C

  • YAML 支持多维数组,可以使用行内表示:key: [value1, value2, ...]

  • 数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。

    -

     - A

     - B

     - C

  • 数组也可以使用流式(flow)的方式表示:

    companies: [{id: 0,name: company0,price: 700W},{id: 1,name: company1,price: 800W}]

3. 复合结构

数组和对象可以构成复合结构

4. 纯量

纯量是最基本的,不可再分的值,包括:

  •  字符串

  •  布尔值

  •  整数

  •  浮点数

  •  Null

  •  时间

  •  日期

5. 引用

“&”和“*”可以用来引用

简单的说:YAML实质上是一种通用的数据串行化格式。它是一种专门用来写配置文件的语言,非常简洁和强大,书写和使用都比json更加方便。

二、YAML的书写规则:

  1. 大小写敏感

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

  3. 缩进时不允许使用Tal键,只允许使用空格

  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

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

三、用yaml文件创建一个pod

1. 查看资源标签:(这些是我的K8S中的版本)

[root@master ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

2. 下面是通过写pod.yaml文件定义一个pod:

[root@master ~]# cat pod.yaml 
apiVersion: v1         #指定api版本
kind: Pod              #定义资源的类型/角色
metadata:               #定义资源的元数据信息
  name: pod-test     #定义资源的名称
  labels:             #定义资源的标签
     app: httpd  #资源的标签
spec:
  containers:          #定义容器的信息
   - name: httpd    #容器名,与标签名要相同
     image: 192.168.200.23/library/httpd:2.2.32    #容器使用的镜像和版本
     ports:        
        - containerPort: 3306    #容器对外的端口号
  containers:
   - name: nginx
     image: 192.168.200.23/library/nginx:1.14
     ports:
        - containerPort: 3875
[root@master ~]# kubectl create -f pod.yaml        #根据pod.yaml文件创建pod
pod/pod-test created
[root@master ~]# kubectl get pods                  #查看pods的状体(Running就是创建成功)
NAME       READY   STATUS    RESTARTS   AGE
pod-test   1/1     Running   0          16s
#如果出错,可以通过这个来查看pods的所有信息
[root@master ~]# kubectl describe pods
Name:         pod-test
Namespace:    default
Priority:     0
Node:         node/192.168.200.24
Start Time:   Sat, 05 Dec 2020 02:53:35 -0500
Labels:       app=httpd
Annotations:  <none>
Status:       Running
IP:           10.244.1.7
IPs:
  IP:  10.244.1.7
Containers:
  nginx:
    Container ID:   docker://e8cb94ab7a88674cfe04efdd358e03c717bd3b9652bc49e22daddc5167668b87
    Image:          192.168.200.23/library/nginx:1.14
    Image ID:       docker-pullable://192.168.200.23/library/nginx@sha256:706446e9c6667c0880d5da3f39c09a6c7d2114f5a5d6b74a2fafd24ae30d2078
    Port:           3875/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 05 Dec 2020 02:53:38 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-rjpwz (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-rjpwz:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-rjpwz
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  82s   default-scheduler  Successfully assigned default/pod-test to node
  Normal  Pulled     80s   kubelet, node      Container image "192.168.200.23/library/nginx:1.14" already present on machine
  Normal  Created    80s   kubelet, node      Created container nginx
  Normal  Started    79s   kubelet, node      Started container nginx

3. 通过登录K8S的仪表盘查看pod的创建是否成功

图片.png

这里的token不记得,我前面有写怎么查看的。

图片.png

这个绿色就是创建成功的。

附录:

  • apiVersion:此处值是v1,这个版本号需要根据安装的Kubernetes版本和资源类型进行变化,记住不是写死的。

  • kind:此处创建的是Pod,根据实际情况,此处资源类型可以是Deployment、Job、Ingress、Service等。

  • metadata:包含Pod的一些meta信息,比如名称、namespace、标签等信息。

  • spec:包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性。可在特定Kubernetes API找到完整的Kubernetes Pod的属性。

  • containers:容器的一些信息

  • restartpolicy:

        Always:当容器终止退出后,总是重启容器,默认策略。

        OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。

        Never:当容器终止退出,从不重启容器。


版权声明:本文为原创文章,版权归 Jun所有!

转载请注明出处:https://cranek.cn/?id=98

分享给朋友:

相关文章

安装docker-ce报错

安装docker-ce报错

注: 这里的C#代码都是虚拟机的命令,而且我安装虚拟机的时候选择了中文版,所以这里是中文。(手滑)安装docker-ce报错,我直接删除原来的原来旧版本的docker就可以了[root@server&...

查看容器最后5条日志文件

注: 这里的C#代码都是虚拟机的命令查看Nignx容器的最后五条日志文件先查看Nginx容器状态[root@master ~]# docker ps -a C...

Unable to find image 'nginx:latest' locally

Unable to find image 'nginx:latest' locally

注: 这里的C#代码都是虚拟机中的命令今天在做运维的时候,有一个题目是这样的:在容器 server 节点创建/opt/xiandian-ro 目录,使用镜像 nginx:latest 创建名为 xia...

k8s创建pod

k8s创建pod

注: 这里的C#代码,是虚拟机终端的命令。Pod的模板文件:apiVersion: v1 kind: Pod metadata:   name: ...

docker 中的inspect命令的使用

docker 中的inspect命令的使用

注 : 这里的命令都不是C#的代码,而是终端的命令。我用的是远程连接工具docker inspect的命令是查看容器或者镜像的详细信息的。    我在这用镜像c...

Docker中删除网桥

注: 这里的命令都是虚拟机中的,不是C#语言。先查看网桥状态,我这里要删除的是xd_br   # brctl show bridge na...