K8s-资源清单
资源清单
资源
概念:K8S中所有的内容都抽象为资源,资源实例化之后,叫做对象
Kuberbetes中存在哪些资源?
- 名称空间级别(作用域在名称空间内)
- 工作负载资源:pod,ReplicaSet,Deployment....
- 服务发现及负载均衡型资源:Service,Ingress....
- 配置与存储型资源:Volume,CSI....
- 特殊类型的存储卷:ConfigMap,Secert....
- 集群级资源(作用域在集群)
- Namespace,Node,ClusterRole,ClusterRoleBinding(集群 角色绑定)
- 元数据型资源(不能独立存在,必须依附在别的容器之上)
- HPA,PordTemplate,LimitRange
资源清单:
在K8S中,一般使用yaml格式的文件来创建符合我们预期望的 pod,这样的yaml文件我们一般称为资源清单
-
资源清单格式:必须具备一级字段关键字,如下
-
apiVersion: group/apiversion # 如果没有给定 group 名称, 那么默认为 core,可以使用 kubectl api-versions # 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 ),即核 心组件版本
-
kind: #资源类别
-
metadata: #资源元数据
name #myapp,名称
namespace #名称空间
lables #标签,复合数据类型,可以有多个
app:nginx
version:v1 annotations # 主要目的是方便用户阅读查找
-
spec: # 期望的状态(disired state)
-
status: # 当前状态,本字段有 Kubernetes 自身维护,用户 不能去定义
-
-
关键字查看
- kubectl explain pod
- 说明
- 名称空间级别的资源如果在创建时不指定namespace,那默认是 default
- kubectl get pod -n kube-system #查看名称空间系统级别的pod
--配置清单主要有五个一级字段,其中status用户不能定义,
有k8s自身维护--检索的时候通过元数据检索
- 资源清单的常用命令
# 获取apiversion版本信
$ kubectl api-versions
# 获取资源的apiVersion版本信息
$ kubectl explain pod
$ kubectl explain Ingress
- 字段配置格式
apiVersion <string> #表示字符串类型
metadata <Object> #表示需要嵌套多层字段
labels <map[string]string> #表示由k:v组成的映射
finalizers <[]string> #表示字串列表
ownerReferences <[]Object> #表示对象列表
hostPID <boolean> #布尔类型
priority <integer> #整型
name <string> -required- #如果类型后面接 -required-,表示为必填字段
# 通过自定义清单文件创建pod
$ vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
spec:
containers:
- name: nginx-1
image: chenxiyanglinux/nginx:vq
- name: busybox-1
image: chenxiyanglinux/busybox:v1
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
# 使用kubectl进入容器
$ kubectl exec -it pod-demo -c nginx-1 -- /bin/sh
name -c 指定容器名
# 如果是此项目只有一个容器运行,则不需指定容器
# 实现过程:文件的转换
yaml > kubectl > json > apiserver
# 查看pod-demo启动的描述信息
$ kubectl describe pod pod-demo
# 查看指定容器的日志信息
$ kubectl logs pod-demo -c nginx-1
$ kubectl logs pod-demo -c busybox-1
# 查看pod的详细描述信息
$ kubectl get pod pod-demo -o yaml # 以yaml格式输出
$ kubectl get pod pod-demo -o json # 以json格式输出
# 常用命令总结
$ kubectl get 资源类型 对象名 -o yaml/json
# 可以把已经存在的对象输出为 json 或者 yaml 文件,进行查看或重新定义
# kubectl get 资源类型
-n default # 指定名字空间,默认即为 default 空间
-o wide # 显示详细参数,比如分配的节点以及地址
--all-namespaces:kubectl get pod --all-namespaces # 显示当前资源在所有名称空间中拥有的对象
-w watch # 将当前资源的变化内容进行显示
--show-labels # 查看当前资源对象的标签
-l key、key=values # 根据资源对象的标签 匹配成功后打印匹配结果
# 基于 yaml、json 文件创建资源对象
$kubectl create -f xxx.yaml \ xxx.json
yaml > kubectl > json > apiserver # 格式的转换
# 查看 kubernetes 官方描述文档
$ kubectl explain pod.spec.containers
# 查看kuberbetes标签类型
$kubectl explain pod.metadata.labels
k:v映射的类型---字典
# 让 pod 内部对应的 container 执行命令
$ kubectl exec -it podName -c containerName -- command
# 查看资源对象的运行信息,比如事件
$ kubectl describe 资源类型 对象名
# 查看当前 pod 内部的日志信息
$ kubectl logs podName -c containerName
# 删除pod资源类型
$ kubectl delete pod 资源名称
# 删除所有pod资源
$ kubectl delete pod --all
# 删除svc资源类型
$ kubectl delete svc 资源名称
# 注释:pod删除的时候时间比较慢是因为删除是一个同步状态,只有pod不在了,终端才会释放,还有原因是当前pod不具备优雅退出