CSDN话题挑战赛第2期
参赛话题:云原生技术栈分享
k8s入门----k8s查看pods/nodes
目标:
- 了解 kubernetes pods(容器组)
- 了解kubernetes nodes(节点)
- 排查故障
kubernetes pods
在部署第一个应用程序中创建Deployment后,k8s创建了一个pod(容器组)来放置应用程序实例(container容器)。
pods概述
pod容器组是一个k8s中一个抽象的概念,用于存放一组 container(可包含一个或多个 container 容器,即图上正方体),以及这些container(容器)的一些共享资源。这些资源包括:
- 共享存储,称为卷(Volumes),即图上紫色圆柱
- 网络,每个pod(容器组)在集群中有个唯一的ip,pod(容器组)中的container(容器)共享该ip地址
- container(容器)的基本信息,例如容器的镜像版本,对外暴露的端口等
例如,pod可能即包含带有node.js应用程序的container容器,也包含另一个非node.js的container容器,用于提供node.js webserver 要发布的数据。 pod中的容器共享ip地址和端口空间(同一pod中的不同container端口不能相互冲突),始终同一位置并共同调度,并在同一节点上的共享上下文中运行。(同一个pod内的容器可以使用localhost+端口互相访问)。
pod(容器组)是k8s集群上的最基本的单元。当我们在k8s 上创建Deployment 时,会在集群上创建包含容器的pod(而不是直接创建容器)。每个pod都与运行它的worker节点(node)绑定,并保持在那里知道终止或呗删除。如果节点(node)发生故障,则会在集群中的其他可用节点(node)上运行相同的pod(从同样的镜像创建container,使用相同的配置,ip地址不同,pod名字不同)。
- pod 是一组容器(可包含一个或多个应用程序容器),以及共享存储(卷volumes)、ip 地址和有关如何运行容器的信息。
- 如果多个容器紧密耦合并且需要共享磁盘等资源,则他们应该被部署在同一个pod(容器组)中。
node(节点)
下图显示一个node(节点)上含有4个pod(容器组)
pod(容器组)总是在node(节点)上运行。node(节点)是kubernetes集群中的计算机。可以是物理机或虚拟机。每个node(节点)都由master管理。一个node(节点)上可以呀多个pod(容器组),kubernetes master会根据每一个node(节点)上的可用资源情况,自动调度pod(容器组)到最佳的node(节点)上。
每个kubernetes node(节点)至少运行:
- kubelet, 负责master节点和worker节点之间通信的进程;管理pod(容器组)和pod(容器组)内运行的Container(容器)。
- 容器运行环境(如docker)负责下载镜像、创建和运行容器等。
实战:障碍排除
在部署第一个应用程序 中,我们使用了 kubectl 命令行界面部署了 nginx 并且查看了 Deployment 和 Pod。kubectl 还有如下四个常用命令,在我们排查问题时可以提供帮助:
-
kubectl get - 显示资源列表
#kubectl get 资源类型 #获取类型为Deployment的资源列表 kubectl get deployment #获取类型为pod的资源列表 kubectl get pods #获取类型为node的资源 kubectl get node
名称空间
在命令后增加 -A或 --all-namespaces 可查看所有名称空间中的对象,使用参数 -n 可查看指定名称空间的对象。例如:
#查看所有名称空间的Deployment kubectl get deployments -A kubectl get deployments --all-namespaces #查看kub-system名称空间的 Deployment kubectl get deployments -n kube-system
并非所有对象都在名称空间中
-
kubectl describe - 显示有关资源的详细信息
#kubectl describe 资源类型 资源名称 # 查看名称为nginx-xxx的pod信息 kubectl describe pod nginx-xxx #查看名称为nginx的Deployment的信息 kubectl describe deployment nginx
-
kubectl logs - 查看pod中的容器的打印日志(类似于 docker logs)
#kubectl logs pod名称
#查看名称为nginx-xxxx的pod内的容器打印的日志
kubectl logs -f nginx-xxxx
- kubectl exec - 在pod中的容器环境内部执行命令(类似 docker exec)
#kubectl exec pod名称 操作命令
# 在名称为nginx-xxx的Pod中运行bash
kubectl exec -it nginx-xxx /bin/bash