Kubernetes (K8s) 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。下面是 Kubernetes 的一些核心概念:
-
Pod(容器组):Pod 是 Kubernetes 中最小的可调度和管理的单元 ,它可以包含一个或多个相关的容器。这些容器共享网络和存储资源,并在同一主机上运行。Pod 是临时性的,可以根据需要创建、销毁或重新创建。Pod 提供了一种抽象层,使容器可以作为一个逻辑单元来管理。
-
Replication Controller(复制控制器):Replication Controller 确保在集群中运行指定数量的 Pod 副本。如果 Pod 失败或被删除,Replication Controller 将自动创建新的 Pod 副本以替换它们。Replication Controller 可以认为是Pod的管理器。
-
Service(服务):Service 定义了一组 Pod 的访问方式。它为 Pod 提供了一个稳定的网络终结点,并通过负载均衡将请求分发到后端的 Pod。Service 可以是永久性的,即使 Pod 的 IP 地址发生变化,Service 仍然可以保持不变。
-
Namespace(命名空间):Namespace 是 Kubernetes 中用于对集群资源进行虚拟隔离的一种机制。通过将资源划分为不同的命名空间,可以将集群的逻辑上的划分、访问控制和资源配额管理进行隔离和管理。类似Java 包名称一样做隔离使用。
-
Deployment(部署):Deployment 控制 Pod 和 ReplicaSet 的创建和更新过程。它提供了一个声明式的方式来定义应用程序的部署,可以轻松地进行滚动更新和回滚操作。
-
Node(节点):Node 是 Kubernetes 集群中的工作节点。它是物理或虚拟机器,用于运行 Pod 和其他 Kubernetes 组件。每个 Node 都具有所需的容器运行时(如 Docker),并通过 Kubernetes 控制平面进行管理。
-
Cluster(集群):Cluster 是由多个节点组成的 Kubernetes 环境。它包含了用于管理、调度和运行容器化应用程序的主节点(master node)和工作节点(worker node)。
-
Volume(卷):提供了 Pod 内持久化存储的抽象。Volume 可以挂载到 Pod 中的一个或多个容器,并存储应用程序的数据。
-
ConfigMap(配置映射):用于存储应用程序的配置数据,如环境变量、命令行参数等。ConfigMap 可以被挂载到 Pod 中的容器,供应用程序读取配置信息。
-
Secret(密钥):用于存储敏感的数据,如密码、API 密钥等。Secret 以加密的方式保存,并可以被挂载到 Pod 中的容器。
-
Master 控制平面:Master 控制平面是 Kubernetes 集群的中央管理部分,包含多个组件,如 API Server、Controller Manager、Scheduler 和 etcd 等。它负责接受和处理用户请求、调度和管理 Pod、监控集群状态等。
-
Worker 节点:Worker 节点是集群中的工作节点,负责运行应用程序的容器。它接收来自 Master 节点的指令,并根据指令启动、停止和管理 Pod。
-
ReplicaSet:ReplicaSet 是 Kubernetes 中用于定义 Pod 副本数量的对象。它确保指定数量的 Pod 始终在运行,并且在 Pod 失效时能够自动替换它们。
Kubernetes 的优势在于它提供了一种可靠、强大和灵活的容器编排和管理平台,可以简化应用程序的部署、扩展和管理,提高应用程序的可靠性、可伸缩性和弹性。
-
自动化容器化应用程序的部署和扩展:Kubernetes 提供了一种简化和自动化应用程序部署的机制。它可以根据配置和规则自动创建、启动和停止容器,从而减少了手动操作的工作量。
-
弹性和可伸缩性:Kubernetes 允许根据负载情况自动扩展应用程序的副本数量。它可以根据指定的规则自动调整副本数量,从而保证应用程序的高可用性和性能。
-
负载均衡和服务发现:Kubernetes 提供了内建的负载均衡功能,可以将流量均匀地分发给后端的容器。它还提供了服务发现机制,使应用程序能够通过服务名称来访问其他容器或服务,而无需了解其具体的网络地址。
-
自我修复和健康检查:Kubernetes 可以监控容器的状态,并在发生故障或容器崩溃时自动重新启动或替换它们。它还可以执行健康检查来确保容器的正常运行,并在检测到问题时采取相应的措施。
-
跨主机和多区域部署:Kubernetes 具有跨主机和多区域部署的能力。它可以在多个节点上分布和调度容器,从而实现容器的高可用性和容错性。
-
操作简化和统一管理:Kubernetes 提供了统一的管理接口和工具,可以简化应用程序的管理和操作。它提供了丰富的命令行工具和可视化界面,使管理员和开发人员能够方便地管理和监控集群中的应用程序。
-
社区支持和生态系统:Kubernetes 是一个开源项目,拥有庞大的社区支持和活跃的开发者社区。这意味着可以从社区中获得丰富的资源、文档和解决方案,并且能够与其他工具和技术进行集成,构建更强大的容器化基础设施。
-
滚动更新和回滚:Kubernetes 具有强大的应用程序更新和回滚机制。它可以实现滚动式更新,逐步替换旧版本的容器实例,以最小化应用程序的中断时间。如果出现问题,可以快速回滚到先前的稳定版本。
-
多云和混合云支持:Kubernetes 提供了对多云和混合云环境的良好支持。它可以在不同的云提供商之间实现应用程序的移植性和可移植性,使应用程序能够在不同的云平台上运行,降低了云供应商锁定的风险。
常用的 Kubernetes (K8s) 基础命令:
-
kubectl get <资源类型>
:获取特定资源类型的列表,例如kubectl get pods
获取所有 Pod 的列表。 -
kubectl describe <资源类型> <资源名称>
:显示指定资源的详细信息,例如kubectl describe pod my-pod
显示名为 my-pod 的 Pod 的详细信息。 -
kubectl create -f <配置文件>
:使用配置文件创建资源,例如kubectl create -f pod.yaml
根据 pod.yaml 文件创建 Pod。 -
kubectl apply -f <配置文件>
:使用配置文件创建或更新资源,例如kubectl apply -f deployment.yaml
根据 deployment.yaml 文件创建或更新 Deployment。 -
kubectl delete <资源类型> <资源名称>
:删除指定的资源,例如kubectl delete pod my-pod
删除名为 my-pod 的 Pod。 -
kubectl edit <资源类型> <资源名称>
:使用默认编辑器编辑指定的资源,例如kubectl edit pod my-pod
编辑名为 my-pod 的 Pod。 -
kubectl exec -it <Pod名称> -- <命令>
:在运行的 Pod 中执行命令,例如kubectl exec -it my-pod -- sh
在名为 my-pod 的 Pod 中打开一个交互式终端。 -
kubectl logs <Pod名称>
:查看 Pod 的日志,例如kubectl logs my-pod
查看名为 my-pod 的 Pod 的日志。 -
kubectl port-forward <Pod名称> <本地端口>:<远程端口>
:将本地端口和 Pod 的端口进行端口转发,例如kubectl port-forward my-pod 8080:80
将名为 my-pod 的 Pod 的 80 端口转发到本地的 8080 端口。 -
kubectl scale <资源类型> <资源名称> --replicas=<副本数量>
:调整资源的副本数量,例如kubectl scale deployment my-deployment --replicas=3
将名为 my-deployment 的 Deployment 的副本数量调整为 3。
参考文档: