zoukankan      html  css  js  c++  java
  • 入门-k8s查看Pods/Nodes (四)

    目标

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

    Kubernetes Pods

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

    Pods概述

    Kubernetes教程:Pod概念

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

    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 get  - 显示资源列表

    # kubectl get 资源类型
    
    #获取类型为Deployment的资源列表
    kubectl get deployments
    
    #获取类型为Pod的资源列表
    kubectl get pods
    
    #获取类型为Node的资源列表
    kubectl get nodes
    [root@guanbin-k8s-master ~]# kubectl get deployments
    NAME               READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-deployment   1/1     1            1           23h
    [root@guanbin-k8s-master ~]# kubectl get pods
    NAME                                READY   STATUS    RESTARTS   AGE
    kubernetes-bootcamp                 1/1     Running   0          24h
    nginx                               1/1     Running   0          23h
    nginx-deployment-6dd8bc586b-kgn85   1/1     Running   0          23h
    [root@guanbin-k8s-master ~]# kubectl get nodes
    NAME                 STATUS   ROLES    AGE   VERSION
    guanbin-k8s-master   Ready    master   47h   v1.18.0
    guanbin-k8s-node     Ready    <none>   47h   v1.18.0

     kubectl get - 名称空间

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

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

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

    大部分的 Kubernetes 对象(例如,Pod、Service、Deployment、StatefulSet等)都必须在名称空间里。但是某些更低层级的对象,是不在任何名称空间中的,例如 nodespersistentVolumesstorageClass 等

    执行一下命令可查看哪些 Kubernetes 对象在名称空间里,哪些不在:

    # 在名称空间里
    kubectl api-resources --namespaced=true
    
    # 不在名称空间里
    kubectl api-resources --namespaced=false

    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
  • 相关阅读:
    代数基本定义
    离散数学CONDITIONAL STATEMENTS
    欧几里德算法及其实现
    欧几里得 算法复杂度
    养成习惯
    解决在myeclipse中启动服务器就进入调试模式的方法
    oracle中对索引的操作
    schema在oracle里是什么意思(转:http://shanbei.info/schemainoraclewhatismeantin.html)
    java 加载properties 文件
    java.io.IOException: mark() not supported
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/12741491.html
Copyright © 2011-2022 走看看