title: 
style: nestedList # TOC style (nestedList|nestedOrderedList|inlineFirstLevel)
minLevel: 0 # Include headings from the specified level
maxLevel: 0 # Include headings up to the specified level
includeLinks: true # Make headings clickable
debugInConsole: false # Print debug info in Obsidian console

Terminology

1. Pod

定义

  • Pod 是 Kubernetes 中的基本计算单元,包含一个或多个容器。这些容器共享网络和存储资源。

功能

  • 运行应用程序:Pod 实际上承载着运行应用程序的容器。
  • 共享资源:Pod 内的容器共享相同的网络和存储卷。

联系

  • 与 Service 的联系:Service 可以将流量路由到运行在 Pod 中的容器。
  • 与 Deployment/StatefulSet 的联系:Deployment 和 StatefulSet 控制和管理 Pods 的创建和更新。

2. Service

定义

  • Service 是一种 Kubernetes 资源,用于定义如何访问运行在 Pods 中的应用程序。它提供了一个稳定的访问点来访问 Pods,无论 Pods 的 IP 地址如何变化。

功能

  • 负载均衡:在多个 Pods 之间分配流量。
  • 服务发现:为 Pods 提供稳定的访问地址(ClusterIP、NodePort、LoadBalancer)。

联系

  • 与 Pod 的联系:Service 将流量路由到符合选择器条件的 Pods。
  • 与 Ingress 的联系:Ingress 通过路由规则将外部流量转发到 Service,Service 再将流量分发到 Pods。

3. Ingress

定义

  • Ingress 是 Kubernetes 中的一个资源,用于管理集群外部的 HTTP 和 HTTPS 流量。它定义了如何将外部流量路由到集群内部的 Service。

功能

  • 路由控制:根据主机名和路径将外部请求路由到不同的 Service。
  • TLS 终止:提供 HTTPS 访问的能力。

联系

  • 与 Service 的联系:Ingress 通过定义路由规则将外部流量转发到 Service。Service 进一步将流量分发到 Pods。

4. Deployment

定义

  • Deployment 是一种 Kubernetes 控制器,用于管理 Pods 的生命周期。它确保指定数量的 Pods 始终运行,并支持滚动更新和回滚。

功能

  • 管理 Pods:自动创建、更新和删除 Pods。
  • 滚动更新和回滚:逐步更新 Pods 并支持恢复到旧版本。

联系

  • 与 Pod 的联系:Deployment 创建和管理 Pods,并确保它们的健康状态。
  • 与 Service 的联系:Deployment 管理的 Pods 可以通过 Service 暴露和访问。

5. StatefulSet

定义

  • StatefulSet 是 Kubernetes 控制器,用于管理有状态应用程序。它提供稳定的网络标识和持久化存储。

功能

  • 有序部署和滚动更新:有序地启动和停止 Pods。
  • 稳定的网络标识:每个 Pod 有一个稳定的名字。

联系

  • 与 Pod 的联系:StatefulSet 管理有状态的 Pods。
  • 与 Service 的联系:StatefulSet 通常与 Headless Service 一起使用,以便为 Pods 提供稳定的网络标识。

6. ConfigMap

定义

  • ConfigMap 是一种 Kubernetes 资源,用于存储非敏感的配置信息。

功能

  • 配置管理:将配置信息分离出来,使应用程序能够动态读取这些配置。

联系

  • 与 Pod 的联系:Pod 可以从 ConfigMap 中读取配置信息。

7. Secret

定义

  • Secret 是一种 Kubernetes 资源,用于存储敏感信息,如密码和密钥。

功能

  • 安全存储:保护敏感数据,避免在容器镜像中硬编码敏感信息。

联系

  • 与 Pod 的联系:Pod 可以从 Secret 中读取敏感信息,并用作环境变量或挂载到容器内的文件。

8. Namespace

定义

  • Namespace 是 Kubernetes 中的一个逻辑隔离机制,用于将资源分组到不同的虚拟环境中。

功能

  • 资源隔离:在同一个集群中创建多个 Namespace,以隔离不同的环境(如开发、测试、生产)。

联系

  • 与其他组件的联系:所有的 Kubernetes 资源(Pod、Service、Deployment 等)都可以在 Namespace 内部定义和使用,以实现资源的组织和隔离。

9. Horizontal Pod Autoscaler (HPA)

定义

  • HPA 是 Kubernetes 控制器,用于根据 CPU 使用率或其他指标自动调整 Pods 的副本数。

功能

  • 自动扩缩容:根据负载自动调整 Pods 的副本数,以保持应用程序的性能和可用性。

联系

  • 与 Deployment 的联系:HPA 可以自动扩缩容由 Deployment 管理的 Pods。

总结

  • Pod 是 Kubernetes 中的基础计算单元,实际运行应用程序的容器。
  • Service 提供稳定的访问点来访问 Pods,负责负载均衡和服务发现。
  • Ingress 管理外部 HTTP/HTTPS 流量的路由,将流量转发到 Service。
  • DeploymentStatefulSet 负责 Pods 的管理,前者适用于无状态应用,后者适用于有状态应用。
  • ConfigMapSecret 提供了配置和敏感数据的管理。
  • Namespace 用于资源的逻辑隔离。
  • HPA 自动调整 Pods 的副本数以应对负载变化。

这些组件和概念在 Kubernetes 中互相协作,共同实现容器化应用程序的高效部署和管理。掌握它们将帮助你更好地设计和维护 Kubernetes 集群。

Useful Commands

Namespace

  1. Save Namespace for subsequent kubectl commands: `kubectl config set-context —current —namespace=

Ingress

Use the below two commands to check if the access name is unique in the cluster.

  1. kubectl get ingress
  2. kubectl describe ingress/<INGRESS_NAME>

Pods

To see if your pods are deploying, run:

kubectl get pods

If no pods are listed, check events:

kubectl get events

To see your status on the deployment, run:

kubectl get deployments

To see your service, run:

kubectl get services

All traffic is blocked by default, so we added NetworkPolicy to enable you to connect to your application.

To enter your service, run: kubectl exec -it my-pod --container my-container -- /bin/bash Ignore container parameter if you only want to enter the first container.

Scale

kubectl scale deployment your_app --replicas=5

To watch your pods, run:

kubectl get pods -w

Try scaling up or down a few times to see the deployment behavior.