1.什么是kubernetes资源?
kubernetes中所有的内容都抽象为资源,资源实例化之后叫做对象。
2.kubernetes资源分类
kubernetes资源主要有,名称空间级别资源、集群级别资源、元数据型资源,等三种资源类型。
2.1名称空间级别资源
只对此名称空间生效,名称空间是一种隔离级别,不同的名称空间之间的资源是相互隔离的,比如我们常用的公有云平台阿里云,A公司和B公司都在阿里云上购买了云服务器资源,虽然是在同一个云平台,也有可能两家公司的云主机在相同的物理机房。但是A不能查看和使用B公司的服务器,B同样也不能查看A的。
2.1.1名称空间级别资源
2.1.1.1工作负载型资源
资源名称 | 概念 |
Pod | Pod是kubernetes中的最小调度单元,容器包含在Pod中,一个Pod中有一个pause容器和若干个业务容器,而Pod是一个单独的容器,简而言之Pod就是一组容器的集合。 |
ReplicaSet | ReplicaSet是kuberntees集群中的副本控制器,主要作用是控制和管理Pod,通常和deployment结合使用 |
Deployment | 用于部署应用的对象,为Pod和ReplicaSet提供了一个声明式定义方法,主要用来管理应用 |
DaenonSet | 守护进程集和守护进程类似,确保在每一个节点上都部署一个pod |
Job | 负责批量处理短暂的一次性任务,仅执行一次,并保证处理的一个或者多个Pod成功结束。 |
CronJob | 负责定时任务,在指定的时间周期运行指定的任务。 |
StatefulSet | StatefulSet是为了解决有状态服务的问题,如稳定的持久化存储、稳定的网络标识、有序部署,有序扩展。有序收缩,有序删除 |
2.1.1.2服务发现及负载均衡型资源
资源名称 | 概念 |
Service | 是一个抽象概念,它定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。 |
Ingress | 是一种向kubernetes集群外部的客户端公开服务的方法。 |
2.1.1.3配置与存储型资源
资源名称 | 概念 |
Volume | 是kubernetes抽象出来的对象,是为了解决Pod容器运行时文件存放问题以及多容器间文件目录共享问题。 |
CSI | 容器存储接口,可以扩展各种第三方存储卷 |
2.1.1.4特殊类型资源及存储卷资源
资源名称 | 概念 |
ConfigMap | 配置管理组件,。可以将配置以键值对的形式传递,通常用来保存不需要加密的配置信息 |
Secret | 是一种包含少量敏感信息如密码、令牌、或密钥的对象。 |
DownwardAPI | 用于把外部环境中的信息输出给容器。 |
2.2集群级别资源
一个集群可能会有多个名称空间、而集群级别资源管理着名称空间级别资源,集群级别资源,不管在那个名称空间下定义集群级别资源,在其他的名称空间下都可以看到,在定义时无需指定名称空间,在整个集群可见、可调用、而且全局唯一。
2.2.1集群级别资源有哪些
资源名称 | 概念 |
Namespace | 名称空间 |
Node | 集群节点 |
Role | 角色 |
ClusterRole | 集群角色 |
ClusterRoleBinding | 集群角色绑定 |
2.3元数据型资源
给我们提供一个指标,比如HPA通过定义cpu或者内存使用率的指标来对pod进行水平扩展。这就一个典型的元数据型资源
资源名称 | 概念 |
HPA | 全称Horizontal Pod Autoscaler是一种资源对象,能够根据某些指标对statefulset、deployment中的pod进行动态伸缩 |
PodTemplate | pod模板 |
LimitRange | 资源限制 |
什么是资源清单?
kubernetes中一般使用yaml格式的文件来创建我们所需求的pod、deployment、service等资源对象,这样的yaml文件我们一般称为资源清单。
Pod资源清单示例文件
通过kubectl explain pod
来获取,pod资源清单使用帮助
编写pod资源清单文件
#cat demo-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
labels:
app: pod-demo
spec:
containers:
- name: pod-demo
image: registry.cn-hangzhou.aliyuncs.com/my_app_repo/nginx:v1
Deployment资源清单示例文件
#cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ngx-demo
labels:
app: ngx-dep-demo
spec:
replicas: 3
selector:
matchLabels:
app: ngx-dep-demo
template:
metadata:
labels:
app: ngx-dep-demo
spec:
containers:
- name: ngx-demo
image: registry.cn-hangzhou.aliyuncs.com/my_app_repo/nginx:v1
ports:
- containerPort: 80
Service资源清单示例文件
#cat deployment-svc.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: ngx-dep-test
spec:
replicas: 3
selector:
matchLabels:
app: ngx-dep-test
template:
metadata:
labels:
app: ngx-dep-test
spec:
containers:
- name: ngx-dep-test
image: registry.cn-hangzhou.aliyuncs.com/my_app_repo/nginx:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
labels:
app: ngx-dep-test
name: ngx-dep-test-svc
spec:
type: ClusterIP
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: ngx-dep-test
创建及查看使用资源清单创建的资源
使用kubectl create或apply -f xxfilename
来创建资源
示例
#kubectl apply -f pod.yaml
deployment.apps/ngx-dep-test created
service/ngx-dep-test-svc created
使用kubectl get xxxx
(资源类型名称不指定名称空间的话默认获取的是default名称空间下的资源)
删除资源
kubectl delete -f xxxfilename
示例
#kubectl delete -f pod.yaml
deployment.apps "ngx-dep-test" deleted
service "ngx-dep-test-svc" deleted