kubernetes基础知识之资源和资源清单

B站影视 2025-01-22 15:45 2

摘要:资源就是kubernetes集群中的一切。kubernetes中所有的内容都抽象为资源,资源实例化之后,叫对象。

kubernetes 最新版是v1.32.0。

Pod是kubernetes集群内部运行的最小单位。

资源就是kubernetes集群中的一切。kubernetes中所有的内容都抽象为资源,资源实例化之后,叫对象。

资源就是一种特殊的类型,资源是一种特殊类型的结合。

对象就是在这个类型之上,通过我们指定不同的参数,得到的不同结果。

kubernetes集群中的资源分成三类:

①:命名空间级别

②:集群级资源

③:元数据类型资源

命名空间叫namespace,它是Linux系统提供的一种隔离机制。

集群包含不同的命名空间。

命名空间级别:

①:工作负载类型资源:pod、ReplicaSet、Deployment

②:服务发现及负载均衡类型资源:service、ingress

③:配置与存储类型资源:Volume、CSI

④:特殊类型的存储卷:Configmap、secret

命名空间级别只是概念上的隔离。

集群级资源:

Namespace、worker Node节点、ClusterRole集群角色、ClusterRoleBinding集群角色绑定。

元数据类型资源:

HPA、PodTemplate、LimitRange。

HPA是根据当前kubernetes集群中的资源使用率实现自动扩容。

资源清单中缩进代表层次关系,编写结构是:

根空间中有:apiVersion(接口组/版本)、Kind类别、Metadata元数据、spec期望、status状态这五个根对象。

这五个根对象是每个资源清单都必须去使用的使用的,也是必须去设定的。

apiVersion:v1 ,v1代表core/v1。

微服务:把一个大型的功能拆分成不同的独立的可以运行的小单元,每个小单元负责自己一部分的业务功能,不同的人开发不同的模块,最后再拼凑在一起。

微服务的好处:可以共同开发,独立进行模块的升级,便于水平扩展部署。

查看apiVersion:

kubectl api-versions

结果格式:

接口组/版本号

查看资源版本:

kubectl explain pod(资源类别)

不同的kubernetes版本下,创建同一个资源类别,可能使用的接口组和版本不一样。

kind是类别,就是创建资源的类别。

Pod是命名空间级别的资源,它要归属于某个命名空间。如果不指定命名空间,那么久属于默认的命名空间default。如果把pod归属到指定的某个命名空间,必须指定命名空间的名字。

Metadata:元数据,包括:

①:name

②:namespace

③:labels 标签,给每个资源对象打上一个标签,用于去筛选识别资源对象,能够更好地进行资源分类。

spec:期望,是kubernetes非常重要的概念,也叫声明式的表达,就是你最终想让它达成的状态。

kubernetes的相关认证:cka和cks。

status:状态。告知spec期望的当前状态,status状态字段是kubernetes集群本身去实时更新和维护的,描绘的是当前资源对象的状态。

写一个资源清单,从资源的创建到对象,一般只需要写前面4个一级对象,包括:apiVersion接口组/版本、kind类别、metadata元数据、spec期望,这就是资源清单的核心构成。

查询pod的描述情况:

kubectl explain pod

查询pod的期望:

kubectl explain pod.spec

查询pod期望的容器:

kubectl explain pod.spec.containers

在kubernetes集群中,最小的运行单元是pod。

Pod是由pause容器组成。

可以编写一个pod的资源清单文件,结尾是.yaml为后缀,例如:1.pod.yaml。

kubectl create -f 1.pod.yaml

-f代表基于文件创建pod

就可以完成资源的实例化。

kubectl get pod -n $namespace

例如:

kubectl get pod -n default

AGE:代表容器创建的时间。

在做资源对象的获取操作时,如果不用-n 指定命名空间,那么命名空间是默认的default。

kube-system命名空间存放的是kubernetes集群的组件和插件。

kubectl get pod -n kube-system

kube-system命名空间是kubernetes集群系统所存放的地方,包括:kube-scheduler调度器、kube-proxy、kube-controller-manager副本控制器、kube-apiserver、etcd键值数据库、DNS插件coredns、calico网络插件calico等pod容器。

kube-system命名空间下,最好不要做相关的操作,这些是命名空间级别的资源。

集群级别的资源,包括worker node节点。

kunectl get node

集群级别的资源,在任何命名空间下看到的结果都是相同的。

命名空间级别的资源,在不同命名空间下,看到的资源不同。

kubectl get pod -A

-A代表查看当前所有的命名空间,相当于--all-namespaces

查询pod的详细信息:

kubectl get pod -A -o wide

Pod是一个逻辑概念,它本质上是多个容器组合而成的。

查询容器的进程:

docker ps -a

可以通过curl pod节点IP去访问。

Docker进入容器的命令:

docker exec -it $container_name /bin/bash

kunernetes进入容器的命令:

kubectl exec -it $pod_name -c $container_name -- /bin/bash

Pod本质上是多个容器组合成的集合。

查看pod的标签:

kubectl get pod --show-labels

一个pod可以有多个标签,可以通过标签去分类和筛选pod。

kubectl get pod -l app

Docker查看容器日志:

docker logs

kubernetes查看pod日志,查看容器前台输出的信息:

kubectl logs $pod_name -c $container_name

kubernetes筛选pod:

kubectl get pod -l key=value

描述pod信息:

kubectl describe pod -n $namespace

举例:

kubectl describe pod -n default

同一个pod内部不同容器之间共享网络、IPC和PID。

排查问题:

kubectl logs $pod_name -c $container_name

同一个pod内的不同容器,不能使用相同的业务端口,否则会报错端口被占用导致pod中容器无法创建成功。

班超

鼓励的话语:你永远都不会知道自己到底有多坚强,直到有一天你除了坚强别无选择!

来源:哲城教育

相关推荐