Files
kuboard-press/learning/k8s-basics/explore.md
2020-12-24 13:57:19 +08:00

6.5 KiB
Raw Blame History

vssueId, layout, description, meta
vssueId layout description meta
22 LearningLayout Kubernetes教程_本文介绍了如何使用kubectl_Kuboard查看和浏览Kubernetes上的节点_容器组_部署等信息_并依据这些信息作出问题诊断
name content
keywords Kubernetes教程,K8S教程,容器组,,K8S培训,Kubernetes培训

2.查看Pods/Nodes

本文翻译自 Kubernetes Viewing Pods and Nodes ,并有所改写

目标

  • 了解Kubernetes Pods容器组
  • 了解Kubernetes Nodes节点
  • 排查故障

Kubernetes Pods

部署第一个应用程序 中创建 Deployment 后k8s创建了一个 Pod容器组 来放置应用程序实例container 容器)。

Pods概述

Kubernetes教程:Pod概念

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容器组

Kubernetes教程:Node概念

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 deployments
    
    #获取类型为Pod的资源列表
    kubectl get pods
    
    #获取类型为Node的资源列表
    kubectl get nodes
    

    ::: tip 名称空间 在命令后增加 -A--all-namespaces 可查看所有 名称空间中 的对象,使用参数 -n 可查看指定名称空间的对象,例如

    # 查看所有名称空间的 Deployment
    kubectl get deployments -A
    kubectl get deployments --all-namespaces
    # 查看 kube-system 名称空间的 Deployment
    kubectl get deployments -n kube-system
    

    并非所有对象都在名称空间里 :::

  • kubectl describe - 显示有关资源的详细信息

    # kubectl describe 资源类型 资源名称
    
    #查看名称为nginx-XXXXXX的Pod的信息
    kubectl describe pod nginx-XXXXXX	
    
    #查看名称为nginx的Deployment的信息
    kubectl describe deployment nginx	
    
  • kubectl logs - 查看pod中的容器的打印日志和命令docker logs 类似)

    # kubectl logs Pod名称
    
    #查看名称为nginx-pod-XXXXXXX的Pod内的容器打印的日志
    #本案例中的 nginx-pod 没有输出日志,所以您看到的结果是空的
    kubectl logs -f nginx-pod-XXXXXXX
    
  • kubectl exec - 在pod中的容器环境内执行命令(和命令docker exec 类似)

    # kubectl exec Pod名称 操作命令
    
    # 在名称为nginx-pod-xxxxxx的Pod中运行bash
    kubectl exec -it nginx-pod-xxxxxx /bin/bash
    

请尝试在您的集群中执行一下上述的几个命令,了解如何通过 kubectl 操作 kubernetes 集群中的 Node、Pod、Container。

在名称空间中查看部署

Kubernetes教程:查看 Pods/Nodes

查看部署及其容器组

Kubernetes教程:查看 Pods/Nodes

::: tip Worker节点是k8s中的工作计算机可能是VM或物理计算机具体取决于群集。多个Pod可以在一个节点上运行。 :::

~~现在我们已经学会在k8s上部署程序并且也知道了部署在k8s中涉及的资源和流程

~~等等我们的程序还不知道如何访问呢其实也是一个yaml文件就能实现

~~lets go-> 使用 Service服务公布您的应用程序