zoukankan      html  css  js  c++  java
  • 【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,可以参考官方文档相关类型的部分

  • 相关阅读:
    install jprofiler for ubuntu
    android manifest相关属性
    install nginx for ubuntu
    Android shape
    mobile web for no cookie session
    Android布局属性
    什么是强类型,强类型集合
    radl (三) (转)
    几个.net 基础问题,自己回答了一些,请大家指教
    c#接口和抽象类的区别
  • 原文地址:https://www.cnblogs.com/hellxz/p/13267478.html
Copyright © 2011-2022 走看看