Kubernetes对象总结

学习本节内容前,希望你已经对Kubernetes中的Pod,ReplicaSet,Deployment等对象有了初步的了解,具体可以参考以下文章:

在Kubernetes中,几乎一切都是对象。常见的对象包括:Node,Pod,Deployment,ReplicationController, ReplicaSet等等。我们通常通过在描述文件中指定kind来创建不同种类的对象。Kubernetes通过etcd存储我们创建的对象,从而使应用按照你期望的方式稳定运行在容器中。

1. 理解Kubernetes对象

Kubernetes对象本质上一种用于持久化的实体,Kubernetes使用这些持久化实体来描述一个集群。通常一个Kubernetes对象可以包含以下信息:

  • 需要运行的应用以及运行在哪些node上
  • 应用可以使用哪些资源
  • 应用运行时的一些配置,例如重启策略,升级以及容错性

因此,一个Kubernetes对象,其实就是你意图的体现(通过.yaml文件来描述)。一旦你创建了一个对象后,Kubernetes会确保这个对象一直处于你所期望的状态。

1.1 对象定义和对象状态

每一个Kubernetes对象都包含两个属性:对象定义(Spec)和对象状态(Status)。Spec包含了你期望对象应有的状态,一般通过.yaml文件来描述。Status是该对象当前实际的状态。Kubernetes最大的魅力就在于,在任何状况下,它都会尽力确保对象的状态处于你所期望的状态。

举个例子,一个Deployment类型的对象,代表了你在集群上运行的一个应用。当你创建这个对象的时候,指定了replicas=3,这意味着你希望这个应用以拥有三个副本的状态下运行。如果其中一个副本由于程序问题崩溃了,那么当前应用的Status就是副本数为2,这与你期望的状态(Spec: replicas=3)不相同,因此Kubernetes会自动为你新建一个副本,从而使此应用的实际状态与你期望的状态相符。

2. 创建Kubernetes对象

创建一个Kubernetes对象通常分为两步:

  1. 创建对象描述文件
  2. 通过kubectl命令行接口创建对象

2.1 Kubernetes对象描述文件

Kubernetes对象描述文件是一个必须满足yaml语法的文件。下面是一个用于描述Deployment类型的对象的例子:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

一个描述文件通常包含以下字段:

  • apiVersion: 使用哪个版本的Kubernetes API来创建此对象
  • kind:要创建的对象类型,例如Pod,Deployment等
  • metadata:用于唯一区分对象的元数据,包括:name,UID和namespace
  • spec: 其它描述信息。不同类型的对象拥有不同的spec定义。详情参见API文档:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/

2.2 kubectl命令行接口

描述文件创建好之后,就可以通过kubectl命令行接口来创建对象了:

kubectl apply -f nginx-deployment.yaml

输出信息如下:

deployment "nginx-deployment" created

猜你喜欢

转载自blog.csdn.net/weixin_34087301/article/details/87642635