学习 Kubernetes - 第一部分:简介
这篇文章是 Kubernetes 系列文章的第一篇。与其说是一系列教程,不如说是一份定期记录我学习使用 Kubernetes 进行编排的概念和工具的历程的日志。
安装
由于我打算学习如何使用 Kubernetes(而不是管理它),所以我在 Google Cloud Platform 上启动了一个 Kubernetes 集群,并从那里开始工作。因此,本系列文章中我不会讨论 Kubernetes 集群的安装和配置。有关如何使用 GCP Kubernetes 集群的更多详细信息,请点击此处。
第一:概念
总是能帮助我更好地理解和学习一项新技术或工具的一件事是了解该工具或技术的用途是什么、它用于什么,并正确掌握概念。
确保您理解基本概念对于提高您对所学工具/技术的了解有很大帮助。
那么,让我们首先了解什么是 Kubernetes。
Kubernetes
Kubernetes 是一个编排工具,它允许我们跨一组节点管理容器化应用程序。它不仅提供了快速运行这些应用程序的机制,还提供了更新、部署和访问这些应用程序的方法。
Pod:Kubernetes 宇宙中的原子
Pod 是 Kubernetes 集群中的最小单元,它代表在同一隔离执行环境中运行的应用程序容器和卷的集合。同一 Pod 中的每个容器共享相同的 IP 地址、命名空间和存储。
虽然我将 Pod 描述为容器的集合,但最常见的模式是每个 Pod 包含一个容器。如果你需要再三考虑是否将多个容器分组到同一个 Pod 中,请问自己
这些容器如果落在不同的机器上还能正常工作吗?
如果答案是“否”,那么您确实应该将这些容器分组到同一个 pod 中,否则就不要这样做。
Kubectl:基础知识
在继续之前,让我们先了解一下 kubectl(Kubernetes 命令行工具)的一些基本功能。
版本和状态
为了确保 kubectl 和 Kubernetes 正常工作,您可以运行:
kubectl version
您应该会看到如下图所示的内容,其中列出了您的 Kubernetes 集群和客户端的版本。
此外,您还可以使用以下命令检查 Kubernetes 集群主要组件的状态:
kubectl get componentstatuses
它应该为您提供类似于此的输出:
节点
要获取有关组成 Kubernetes 集群并可安排工作的节点的信息,请运行以下命令:
kubectl get nodes
如下图所示,此命令会列出集群中每个节点的一些基本信息。正如我之前所说,我的集群位于 Google Cloud Platform 上,因此,根据您的设置(本地集群或其他云提供商的集群),输出可能会略有不同。
豆荚
现在,为了快速向您展示 pod,让我们通过运行以下命令创建一个:
kubectl run kubernetes-hello-world --image=paulbouwer/hello-kubernetes:1.9 --port=8080
请注意,这kubectl run
不是理想的做法,但为了便于示例,我们先这样做。在下一篇文章中,我们将探索定义资源的正确方法(声明式方法)。您应该会看到类似如下的输出:
现在,如果你运行:
kubectl get pods
您将获得以下输出,您可以在其中看到使用该命令创建的 pod kubectl run
。
您还可以使用其他命令(如describe
和logs
)检查更多详细信息,如下所示:
kubectl describe pods kubernetes-hello-world
kubectl logs kubernetes-hello-world
第一个为您提供指定 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
第二个选项提供与正在运行的容器相关的日志。这些调试和检查方法适用于 Kubernetes 中所有可用的资源(Pod、Deployment、Services 等)。
除了日志之外,调试应用程序的最后一种方法是使用以下命令检查正在运行的容器并与之交互exec
:
kubectl exec -it kubernetes-hello-world -- sh
您可以在下图中看到此交互的一个示例:
最后,要删除创建的 pod,请运行:
如果你喜欢我的讲解,可以关注我,我将在接下来的几周内发布本系列的后续部分。
单击此处查看下一部分。
文章来源:https://dev.to/vascoalramos/learning-kubernetes-concepts-part-1-pb0