K8s操作对象(K8s中的资源)
K8s对象
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找
更多推荐
所有评论(0)