• 【k8s学习笔记】理解kubernetes对象


    Kubernetes对象

    在Kubernetes中,对象是持久化到etcd中的实体,使用这些对象的状态来表示集群的状态。

    创建对象本质上是告知k8s系统期望工作负载是什么样子的,称为期望状态(Desired State)。

    操作k8s对象本身就是通过Kubernetes API操作etcd中对象的状态。

    对象规格与状态(Object Spec and Status)

    绝大多数k8s的对象都包含两部分,分别为 期望状态(Spec)实际状态(Status),Spec 是用户设置的期望状态;而Status由k8s系统提供,由k8s系统设置。

    当Spec 与 Status 不一致时,控制平面会启动新的 Pod 以匹配期望状态。

    以一个简单的 nginx-deployment举例(暂不关心内容):

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    
    

    通过kubectl diff -f nginx-deployment,我们可以看到spec与status处于平级关系:

    kubectl diff 命令不是真的去应用配置文件,而是展示应用后会如何,后续有时间介绍kubectl的常用命令

    用yaml描述Kubernetes对象

    当需要创建k8s对象时,必须提供对象的期望状态,包含此对象的基本信息(如,名称等)。这些描述信息要被Kubernetes API接收,都需要转换成 JSON的请求体。一般而言,对于kubectl使用的是yaml格式的文件,kubectl 会将其转换为JSON发送到 Kubernetes API

    还用刚才的文件nginx-deployment.yaml进行举例,以展示Kubernetes Deployment的必要字段:

    apiVersion: apps/v1         #创建此对象使用的Kubernetes API版本
    kind: Deployment            #对象类型
    metadata:                   #唯一标识对象,常包含name、UID和可选的namespace
      name: nginx-deployment    #对象名称唯一标识
    spec:                       #期望状态
      selector:                 #label选择器
        matchLabels:
          app: nginx            #匹配的标签
      replicas: 2               #副本数,告知k8s集群要创建几个当前对象的pod
      template:                 #根据此模板创建Pod副本
        metadata:
          labels:
            app: nginx          #Pod副本的标签,可用于Service匹配
        spec:
          containers:           #Pod内容器定义部分
          - name: nginx         #容器名称
            image: nginx:1.14.2 #docker镜像
            ports: 
            - containerPort: 80 #容器内占用的端口号
            
    

    通过kubectl 创建Deployment类型对象到集群

    kubectl apply -f nginx-deployment.yaml
    

    每个描述k8s对象的yaml文件,都需要设置四个字段:

    • apiVersion:创建此对象使用的Kubernetes API版本
    • kind:创建对象类型
    • metadata:对象唯一标识设置
    • spec:期望状态

    更多关于配置spec,可以参考官方文档相关类型的部分

  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/hellxz/p/13267478.html
Copyright © 2020-2023  润新知