K8S操作对象(K8s中的资源)

K8s对象是什么?

在 Kubernetes 系统中,Kubernetes 对象是持久化的实体。 Kubernetes 使用这些实体去表示整个集群的状态。 具体而言,它们描述了如下信息:

  • 哪些容器化应用正在运行(以及在哪些节点上运行)
  • 可以被应用使用的资源
  • 关于应用运行时行为的策略,比如重启策略、升级策略以及容错策略

Kubernetes 对象是一种“意向表达(Record of Intent)。一旦创建该对象, Kubernetes 系统将不断工作以确保该对象存在。通过创建对象,你本质上是在告知 Kubernetes 系统,你想要的集群工作负载状态看起来应是什么样子的, 这就是 Kubernetes 集群所谓的期望状态(Desired State)

操作 Kubernetes 对象——无论是创建、修改或者删除——都需要经过 API server。 比如,当使用 kubectl 命令行接口(CLI)时,CLI 会调用必要的 Kubernetes API; 也可以在程序中使用客户端库, 来直接调用 Kubernetes API。

K8s对象的创建(K8s如何创建资源?)

创建 Kubernetes 对象时,必须提供对象的 spec,用来描述该对象的期望状态, 以及关于对象的一些基本信息(例如名称)。 当使用 Kubernetes API 创建对象时(直接创建或经由 kubectl 创建), API 请求必须在请求主体中包含 JSON 格式的信息。 大多数情况下,你会通过 清单(Manifest) 文件为 kubectl 提供这些信息。 按照惯例,清单是 YAML 格式的(你也可以使用 JSON 格式)。kubectl 这样的工具在通过 HTTP 进行 API 请求时, 会将清单中的信息转换为 JSON 或其他受支持的序列化格式。

这里有一个清单示例文件,展示了 Kubernetes Deployment 的必需字段和对象 spec

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2   #告知Deployment运行2个与该模板匹配的Pod
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80


kubectl apply -f https://k8s.io/examples/application/deployment.yaml

deployment.apps/nginx-deployment created

创建K8s对象的必需字段

在想要创建的 Kubernetes 对象所对应的清单(YAML 或 JSON 文件)中,必需配置的字段如下:

  • apiVersion - 创建该对象所使用的 Kubernetes API 的版本
  • kind - 想要创建的对象的类别
  • metadata - 帮助唯一标识对象的一些数据,包括一个 name 字符串、UID 和可选的 namespace
  • spec - 你所期望的该对象的状态

对每个 Kubernetes 对象而言,其 spec 之精确格式都是不同的,包含了特定于该对象的嵌套字段。

参:K8s清单格式

K8s核心资源简介

- 名称空间:namespace   
- 容器组:Pod
- 网络:service
- 配置文件:config
- 控制器:controller
- 节点:node
...

 只要是操作对象都可以增删改查(create、get、describe、delete..
K8s核心资源-Pod

什么是Pod?

1、Pod是K8s的最小单位
2、Pod的IP地址是随机的,删除Pod会改变IP
3、Pod都有一个根容器
4、一个Pod内可以由一个容器或多个容器组成
5、一个Pod内的容器共享根容器的网络、名称空间、和文件系统卷
6、一个Pod内的网络地址由根容器提供

容器共享网络:通过container模式共享,共享根容器的网络

在这里插入图片描述

Pod的运行状态

状态描述
Pending(等待)Pod已经被K8s系统接受,但是有一个或多个容器,尚未创建,亦未运行。此阶段包括等待Pod被调度的时间和通过网络下载镜像的时间
Running(运行)Pod已经绑定到某个节点(node),Pod中所有容器都已被创建,至少有一个容器仍在运行,或者处于启动或重启状态
Succeeded(成功)Pod中所有容器都已成功终止,并且不会再重启
Failed(失败)Pod中所有容器都已成功终止,并且有一个容器是因为失败而终止
Unknown(未知)因为某些原因无法获取Pod状态,这种情况,通常是因为与Pod所在主机通信失败
K8S核心资源-Label
Label标签是K8S中非常重要的一个属性,Label标签就像身份证一样,可以用来识别K8s的对象。
传统架构中,不同的服务应用之间通讯,都是通过IP和端口,但是在K8S中很多匹配关系都是通过标签来找。
K8S核心资源-Namespace
Namespace(名称空间)是K8s中非常重要的一个概念,Namespace将集群内部的资源进行隔离划分。
在Namespace中,形成逻辑上的不同项目组或用户组。
K8S核心资源-Controller
Controller用来管理Pod。
Pod控制器的种类有很多:
- RC Replication Controller 控制Pod有多个副本
- RS ReplicaSet  RC控制器的升级版
- Deployment    推荐使用,功能强大,包含了RS控制器
- DaemonSet     保证所有的Node节点上,有且只有一个Pod运行
- StatefulSet   有状态的应用,为Pod提供唯一标识,它可以保证部署和scale的顺序
K8S核心资源-service(提供网络)
Service也是K8s核心资源之一,Service定义了服务的入口地址,用来将后端的Pod服务暴露给外部的用户访问(提供网络)

Service提供三种网络:

Pod IP(根容器的IP);

集群IP,Cluster IP(相当于个负载均衡);

NodePort(用于用户访问)

Pod IP和Cluster IP是对外隔绝的,相当于内网IP。那么问题来了,我Pod IP会变,那Pod挂了后咋办?

这时就是label了,它们是通过Label访问的。不通过ip找

在这里插入图片描述

在这里插入图片描述

Logo

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

更多推荐