学习 Kubernetes - 第一部分:简介

2025-05-28

学习 Kubernetes - 第一部分:简介

这篇文章是 Kubernetes 系列文章的第一篇。与其说是一系列教程,不如说是一份定期记录我学习使用 Kubernetes 进行编排的概念和工具的历程的日志。

安装

由于我打算学习如何使用 Kubernetes(而不是管理它),所以我在 Google Cloud Platform 上启动了一个 Kubernetes 集群,并从那里开始工作。因此,本系列文章中我不会讨论 Kubernetes 集群的安装和配置。有关如何使用 GCP Kubernetes 集群的更多详细信息,请点击此处

第一:概念

总是能帮助我更好地理解和学习一项新技术或工具的一件事是了解该工具或技术的用途是什么、它用于什么,并正确掌握概念

确保您理解基本概念对于提高您对所学工具/技术的了解有很大帮助。

那么,让我们首先了解什么是 Kubernetes

Kubernetes

Kubernetes 是一个编排工具,它允许我们跨一组节点管理容器化应用程序。它不仅提供了快速运行这些应用程序的机制,还提供了更新、部署和访问这些应用程序的方法。

Pod:Kubernetes 宇宙中的原子

Kubernetes - Pod
Pod 是 Kubernetes 集群中的最小单元,它代表在同一​​隔离执行环境中运行的应用程序容器和卷的集合。同一 Pod 中的每个容器共享相同的 IP 地址、命名空间和存储。

虽然我将 Pod 描述为容器的集合,但最常见的模式是每个 Pod 包含一个容器。如果你需要再三考虑是否将多个容器分组到同一个 Pod 中,请问自己

这些容器如果落在不同的机器上还能正常工作吗?

如果答案是“否”,那么您确实应该将这些容器分组到同一个 pod 中,否则就不要这样做。

Kubectl:基础知识

在继续之前,让我们先了解一下 kubectl(Kubernetes 命令行工具)的一些基本功能。

版本和状态

为了确保 kubectl 和 Kubernetes 正常工作,您可以运行:

kubectl version
Enter fullscreen mode Exit fullscreen mode

您应该会看到如下图所示的内容,其中列出了您的 Kubernetes 集群和客户端的版本。

kubectl 版本输出

此外,您还可以使用以下命令检查 Kubernetes 集群主要组件的状态:

kubectl get componentstatuses
Enter fullscreen mode Exit fullscreen mode

它应该为您提供类似于此的输出:

kubectl 获取组件状态<br>输出

节点

要获取有关组成 Kubernetes 集群并可安排工作的节点的信息,请运行以下命令:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

如下图所示,此命令会列出集群中每个节点的一些基本信息。正如我之前所说,我的集群位于 Google Cloud Platform 上,因此,根据您的设置(本地集群或其他云提供商的集群),输出可能会略有不同。

kubectl 获取节点<br>输出

豆荚

现在,为了快速向您展示 pod,让我们通过运行以下命令创建一个:

kubectl run kubernetes-hello-world --image=paulbouwer/hello-kubernetes:1.9 --port=8080
Enter fullscreen mode Exit fullscreen mode

请注意,这kubectl run不是理想的做法,但为了便于示例,我们先这样做。在下一篇文章中,我们将探索定义资源的正确方法(声明式方法)。您应该会看到类似如下的输出:

kubectl run<br> 输出

现在,如果你运行:

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

您将获得以下输出,您可以在其中看到使用该命令创建的 pod kubectl run

kubectl get pods<br>输出

您还可以使用其他命令(如describelogs)检查更多详细信息,如下所示:

kubectl describe pods kubernetes-hello-world
kubectl logs kubernetes-hello-world
Enter fullscreen mode Exit fullscreen mode

第一个为您提供指定 pod 的详细描述,如下所示:

Name:         kubernetes-hello-world
Namespace:    default
Priority:     0
Node:         gke-kuar-cluster-default-pool-41051aa0-hs4q/10.138.15.194
Start Time:   Thu, 11 Mar 2021 17:44:41 +0000
Labels:       run=kubernetes-hello-world
Annotations:  <none>
Status:       Running
IP:           10.96.14.3
IPs:
  IP:  10.96.14.3
Containers:
  kubernetes-hello-world:
    Container ID:   docker://db09b9c745c03f3e757f1f386f5df8e04e48faaace587cfa72ed1f3e6a751300
    Image:          paulbouwer/hello-kubernetes:1.9
    Image ID:       docker-pullable://paulbouwer/hello-kubernetes@sha256:be6b5ba3abdca6e01689e0d1d27b41410fb5bf5793da407108a89ef355f362f0
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 11 Mar 2021 17:44:50 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-dzc9f (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-dzc9f:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-dzc9f
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  23m   default-scheduler  Successfully assigned default/kubernetes-hello-world to gke-kuar-cluster-default-pool-41051aa0-hs4q
  Normal  Pulling    23m   kubelet            Pulling image "paulbouwer/hello-kubernetes:1.9"
  Normal  Pulled     23m   kubelet            Successfully pulled image "paulbouwer/hello-kubernetes:1.9"
  Normal  Created    23m   kubelet            Created container kubernetes-hello-world
  Normal  Started    23m   kubelet            Started container kubernetes-hello-world
Enter fullscreen mode Exit fullscreen mode

第二个选项提供与正在运行的容器相关的日志。这些调试和检查方法适用于 Kubernetes 中所有可用的资源(Pod、Deployment、Services 等)。

除了日志之外,调试应用程序的最后一种方法是使用以下命令检查正在运行的容器并与之交互exec

kubectl exec -it kubernetes-hello-world -- sh
Enter fullscreen mode Exit fullscreen mode

您可以在下图中看到此交互的一个示例:

kubectl get pods<br>输出

最后,要删除创建的 pod,请运行:

kubectl delete pod<br>输出


如果你喜欢我的讲解,可以关注我,我将在接下来的几周内发布本系列的后续部分。

单击此处查看下一部分

文章来源:https://dev.to/vascoalramos/learning-kubernetes-concepts-part-1-pb0
PREV
2020 年学习软件开发的 33 个最佳材料
NEXT
如何使用简单的 JavaScript 创建文件共享网站