kubernetes08(kubernetes的资源对象)

一.引子

我们在第三篇中提到了API对象,那对象和资源之间的是什么关系呢?这里我们可以给他们下一个定义:K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象。比如pod就是k8s的资源实例化。也就是我们所说的对象。要使用Kubernetes对象(无论是创建,修改还是删除),都需要使用Kubernetes API。例如,当使用kubectl命令管理工具时,CLI会为提供Kubernetes API调用。你也可以直接在自己的程序中使用Kubernetes API,Kubernetes提供一个golang客户端库 (其他语言库正在开发中-如Python)。

二.kubernetes资源

(一)kubernetes的资源对象作用

Kubernetes对象是Kubernetes系统中的持久实体。Kubernetes使用这些实体来表示集群的状态。
1.容器化应用正在运行(以及在哪些节点上),
2.这些应用可调用的资源,
3.关于这些应用如何运行的策略,如重新策略,升级和容错。

(二).kubernetes的资源对象分类

Kubernetes的对象可以分为很多种。以下是kuberbetes资源在名称空间级别的分类。

  • 1.工作负载型资源( workload ): Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、 CronJob (ReplicationController 在 v1.11 版本被废弃 )
  • 2.服务发现及负载均衡型资源( ServiceDiscovery LoadBalance ): Service、Ingress、…
  • 3.配置与存储型资源: Volume( 存储卷 )、CSI( 容器存储接口,可以扩展各种各样的第三方存储卷 )
  • 4.特殊类型的存储卷:ConfigMap( 当配置中心来使用的资源类型 )、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)
  • 5.集群级资源:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
  • 6.元数据型资源:HPA、PodTemplate、LimitRange

三.kubernetes资源清单

(一).kubenetes的资源清单格式

apiVersion: group/apiversion  # 如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions # 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )
kind:       #资源类别
metadata:  #资源元数据
   name
   namespace
   lables
   annotations   # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义

(二).资源清单常用命令

1.获取 apiversion 版本信息

[root@k8s-master01 ~]# kubectl api-versions 
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1

2.获取资源的 apiVersion 版本信息

[root@k8s-master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1
#字段配置格式
apiVersion <string>          #表示字符串类型
metadata <Object>            #表示需要嵌套多层字段
labels <map[string]string>   #表示由k:v组成的映射
finalizers <[]string>        #表示字串列表
ownerReferences <[]Object>   #表示对象列表
hostPID <boolean>            #布尔类型
priority <integer>           #整型
name <string> -required-     #如果类型后面接 -required-,表示为必填字段
[root@k8s-master01 ~]# kubectl explain ingress
KIND:     Ingress
VERSION:  extensions/v1beta1

(三).通过资源清单创建Pod

在Kubernetes中创建对象时,必须提供描述其所需Status的对象Spec,以及关于对象(如name)的一些基本信息。当使用Kubernetes API创建对象(直接或通过kubectl)时,该API请求必须将该信息作为JSON包含在请求body中。通常,可以将信息提供给kubectl .yaml文件,在进行API请求时,kubectl将信息转换为JSON。
以下示例是一个.yaml文件,显示Kubernetes Deployment所需的字段和对象Spec:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

使用上述.yaml文件创建Deployment,是通过在kubectl中使用kubectl create命令来实现。将该.yaml文件作为参数传递。如下例子:

[root@k8s-master01 ~]# kubectl create -f dep.yaml 
deployment.apps/nginx-deployment created
[root@k8s-master01 ~]# kubectl get pod
NAME                                READY   STATUS             RESTARTS   AGE
nginx-deployment-5754944d6c-5fxlw   0/1     ImagePullBackOff   0          38s
nginx-deployment-5754944d6c-bmmx8   0/1     ErrImagePull       0          38s
nginx-deployment-5754944d6c-bmzzd   0/1     ImagePullBackOff   0          38s

以上关于kubernetes的资源对象整理送给大家。感谢大家浏览。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐