入門-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM