摘要:资源就是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中容器无法创建成功。
班超
鼓励的话语:你永远都不会知道自己到底有多坚强,直到有一天你除了坚强别无选择!
来源:哲城教育