kubernetes08(kubernetes的资源对象)
kubernetes08(kubernetes的资源对象)一.引子我们在第三篇中提到了API对象,那对象和资源之间的是什么关系呢?这里我们可以给他们下一个定义:K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象。比如pod就是k8s的资源实例化。也就是我们所说的对象。要使用Kubernetes对象(无论是创建,修改还是删除),都需要使用Kubernetes API。例如,当使用kubec
文章目录
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的资源对象整理送给大家。感谢大家浏览。
更多推荐
所有评论(0)