kubernetes学习(四)资源清单
先了解一个概念,yaml叫做资源,由yaml创建的实例叫做对象,yaml文件内apiVersion、kind、metadata、spec包括但不限于这部分、定义资源的功能,叫字段
1、资源的分类
资源类别大致概括为三种(以下包括但不限于,举例记录)
名称空间 ,不是namespace,就是个称呼。就像某某大学,下面的介绍就类似专业,名称起到分割作用
-
工作负载性资源:pod、replicaset、deployment。。。
-
服务发现及负载均衡型资源:service、ingress。。。
-
配置与存储型资源:volume、CSI。。。
-
特殊类型的存储卷:configmap、secre。。。
集群级资源
-
namespace
-
node
-
clusterrole
-
clasterrolebinding
元数据型资源
-
HPA
-
PodTemplate
-
LimitRange
2、资源清单的编写
在 Kubernetes 中,资源清单(Resource Manifest)是用来描述和配置 Kubernetes 资源的 YAML 或 JSON 文件。这些清单文件定义了 Kubernetes 中各种资源对象(如 Pods、Deployments、Services 等)以及它们的属性和行为。通常,资源清单用于声明式地创建和管理 Kubernetes 对象。一个典型的 Kubernetes 资源清单文件通常由以下几个部分组成
-
apiVersion:定义资源对象使用的 Kubernetes API 版本
-
kind:指定资源类型(例如 Pod、Deployment、Service等)
-
metadata:包含资源的元数据,如名称、命名空间、标签等。
-
spec:资源的具体规格或配置,定义了资源的详细行为和属性
2.1写个初级的pod
apiVersion: v1 # API 版本,指定该资源的 API 版本为 `v1`,适用于 Pod 资源。
kind: Pod # 资源类型,表示这是一个 `Pod` 资源。
metadata: # 元数据,包含关于资源的基本信息。
name: pod-demo # Pod名称,Kubernetes 中唯一标识 Pod 的名称。
namespace: default # Pod所在命名空间,不指定的话默认default,加上便于理解
labels: # 标签,用于组织和筛选资源。这里给Pod加上一个标签app:myapp
app: myapp # 标签,标识该 Pod 属于 `myapp` 应用,方便进行选择和管理。
spec: # 规格,定义了 Pod 的具体配置和容器的行为。
containers: # 容器定义,Pod 可以包含多个容器。
- name: myapp-1
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/bitnami/nginx:latest
- name: myapp-2
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/centos:7
command: # 指定容器的启动命令,覆盖镜像的默认命令。
- "/bin/bash" # 启动 `bash` shell。
- "-c" # `bash` 选项,告诉 `bash` 执行后续的命令。
- "sleep 3600" # 容器启动后执行 `sleep 360`
注意一点:apiVersion:v1这个写法是缩写,正常写清单时候指定api完整写法是接口组:版本,上面严格来写是core:v1,core是核心组,从k8s立项就存在了,还有别的组。
可以通过kubectl api-versions查看所有的接口组。如下图


apiVersion、kind、metadata和sepc四个字段。这几个基本字段下还包含了许多子字段。可以用下面命令来进行查询,遇到多层级字段可以用“.”当作分隔符进行查询
#查询资源信息
kubectl explain 字段
#查询属性字段如果在多个层级下可用.做分隔符,如pod.spec.cotnainers.image
会用到的命令,排错三兄弟
kubectl describe pod <pod-name> #查看资源详情,常用
kubectl logs <pod-name> -c <container-name> #查看容器日志,常用
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh #进入容器
2.2启动资源对象
kubectl apply -f 1-pod.yaml
kubectl get pod <pod-name> -o wide #查看pod对象详细信息,查看pod分配节点,pod分配ip


可以使用curl 10.244.36.66进行访问,可以看到nginx的默认主页
然后去对应节点docker exec -it cname /bin/bash进入容器内部修改ngixn主页。但使用k8s来管理容器运行时,可以用
#pod内只有一个容器时可以不加-c指定容器名称
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
进入容器内部操作,如下

2.3写个错误的pod
apiVersion: v1
kind: Pod
metadata:
name: pod-demo-1
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp-1
image: nginx
- name: myapp-2
image: nginx
上面的代码pod启动会报错,用命令查看pod启动过程中的事件记录
kubectl describe <resource-kind> <resource-name>

从pod创建过程中发现了报错来自于第二个容器,查看容器日志,找出报错原因
kubectl logs <pod-name> -c <container-name>
如下图,报错是地址被使用,但不是很准确,应该是端口被使用才对。所以出问题排错的话先看创建过程,再看容器日志

更多推荐
所有评论(0)