Files
kuboard-press/learning/k8s-basics/explore.md
huanqing.shao 6ffe11aef3 ConfigMap
2019-08-29 16:25:04 +08:00

138 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: 本文介绍了如何使用 kubectl / Kuboard 查看和浏览 Kubernetes 上的节点、容器组、部署等信息,并依据这些信息作出问题诊断。
---
# 2. 查看 Pods / Nodes
本文翻译自 Kubernetes 官网 [Viewing Pods and Nodes](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) ,并有所改写
## 目标
- 了解Kubernetes Pods容器组
- 了解Kubernetes Nodes节点
- 排查故障
## Kubernetes Pods
在 [部署第一个应用程序](./deploy-app.html) 中创建 Deployment 后k8s创建了一个 **Pod容器组** 来放置应用程序实例container 容器)。
## Pods概述
<img src="./explore.assets/module_03_pods.svg" style="border: 1px solid #d7dae2; max-width: 800px;"></img>
**Pod 容器组** 是一个k8s中一个抽象的概念用于存放一组 container可包含一个或多个 container 容器,即图上正方体),以及这些 container (容器)的一些共享资源。这些资源包括:
- 共享存储,称为卷(Volumes),即图上紫色圆柱
- 网络,每个 Pod容器组在集群中有个唯一的 IPpod容器组中的 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 名字不同)。
::: tip
重要:
* Pod 是一组容器(可包含一个或多个应用程序容器),以及共享存储(卷 Volumes、IP 地址和有关如何运行容器的信息。
* 如果多个容器紧密耦合并且需要共享磁盘等资源则他们应该被部署在同一个Pod容器组中。
:::
## Node节点
下图显示一个 Node节点上含有4个 Pod容器组
<img src="./explore.assets/module_03_nodes.svg" style="border: 1px solid #d7dae2; max-width: 600px;"></img>
Pod容器组总是在 **Node节点** 上运行。Node节点是 kubernetes 集群中的计算机,可以是虚拟机或物理机。每个 Node节点都由 master 管理。一个 Node节点可以有多个Pod容器组kubernetes master 会根据每个 Node节点上可用资源的情况自动调度 Pod容器组到最佳的 Node节点上。
每个 Kubernetes Node节点至少运行
- Kubelet负责 master 节点和 worker 节点之间通信的进程;管理 Pod容器组和 Pod容器组内运行的 Container容器
- 容器运行环境如Docker负责下载镜像、创建和运行容器等。
## 实战:故障排除
:::: tabs type:border-card
::: tab 使用kubectl lazy
在[部署第一个应用程序](./deploy-app.html) 中,我们使用了 kubectl 命令行界面部署了 nginx 并且查看了 Deployment 和 Pod。kubectl 还有如下四个常用命令,在我们排查问题时可以提供帮助:
- **kubectl get** - 显示资源列表
``` sh
# kubectl get 资源类型
#获取类型为Deployment的资源列表
kubectl get deployments
#获取类型为Pod的资源列表
kubectl get pods
#获取类型为Node的资源列表
kubectl get nodes
```
- **kubectl describe** - 显示有关资源的详细信息
``` sh
# kubectl describe 资源类型 资源名称
#查看名称为nginx-XXXXXX的Pod的信息
kubectl describe pod nginx-XXXXXX
#查看名称为nginx-XXXXXXX的Deployment的信息
kubectl describe deployment nginx-XXXXXXX
```
- **kubectl logs** - 查看pod中的容器的打印日志和命令docker logs 类似)
``` sh
# kubectl logs Pod名称
#查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志
kubectl logs -f nginx-pod-XXXXXXX
```
- **kubectl exec** - 在pod中的容器环境内执行命令(和命令docker exec 类似)
```sh
# kubectl exec Pod名称 操作命令
# 在名称为nginx-pod-xxxxxx的Pod中运行bash
kubectl exec -it nginx-pod-xxxxxx /bin/bash
```
请尝试在您的集群中执行一下上述的几个命令,了解如何通过 kubectl 操作 kubernetes 集群中的 Node、Pod、Container。
:::
::: tab 使用Kuboard lazy
**在名称空间中查看部署**
![image-20190822172329141](./explore.assets/image-20190822172329141.png)
**查看部署及其容器组**
![image-20190822172457417](./explore.assets/image-20190822172457417.png)
:::
::::
::: tip
Worker节点是k8s中的工作计算机可能是VM或物理计算机具体取决于群集。多个Pod可以在一个节点上运行。
:::
~~现在我们已经学会在k8s上部署程序并且也知道了部署在k8s中涉及的资源和流程
~~等等我们的程序还不知道如何访问呢其实也是一个yaml文件就能实现
~~lets go-> [使用 Service服务公布您的应用程序](./expose.html)