K8s相关基础
K8s
- 是:Kubernetes(K8s)是一个开源的容器编排和管理平台。
- 容器编排
- 是:对容器化应用程序的自动部署、管理和协调的过程。
- 主要目标:简化和自动化 容器化应用程序的管理工作(容器创建、调度、扩缩容、负载均衡、健康检查、日志管理、服务发现等)。轻松管理大规模、复杂的容器化应用程序,并确保高可用性和可升缩性。
- 怎么实现:通过声明性的配置文件(YAML)来描述应用程序的拓扑结构、资源需求、服务依赖等信息。K8s负责解析和执行这些配置文件,并根据定义的规则和策略来自动化管理容器集群中的应用程序。
- 优势:
-
自动化部署:容器编排工具可以自动化地创建、更新和销毁容器,使应用程序的部署过程更加简单和可靠。
-
弹性扩缩容:容器编排工具可以根据系统负载和需求动态调整容器的数量,以实现高效的资源利用和应对不同负载的需求。
-
服务发现与负载均衡:容器编排工具可以自动管理容器之间的网络通信,并提供内建的服务发现和负载均衡功能,确保应用程序的稳定性和可用性。
-
健康检查和自愈能力:容器编排工具可以监控容器的健康状态,并在出现故障或异常情况时自动进行恢复和治理,提供自愈的能力。
-
- 容器化应用程序又是指什么?
- 使用容器技术将应用程序打包和交付的一种方法
- 容器技术: 将应用程序及其依赖项打包到一个可移植的容器中,以保证应用程序在不同的计算机环境中具有相同的行为和性能。
- 核心:容器引擎(eg: Docker 引擎)
- 容器技术: 将应用程序及其依赖项打包到一个可移植的容器中,以保证应用程序在不同的计算机环境中具有相同的行为和性能。
- 好处:
-
可移植性:由于容器使用相同的运行时环境和依赖项,因此可以在不同平台和操作系统上进行部署,并保持各项指标的稳定和一致。容器化应用程序可以完全独立于宿主操作系统和硬件,实现真正的可移植性。
-
速度和灵活性:容器化应用程序可以快速且可靠地启动和关闭,从而提高了应用程序的开发、测试和部署效率。容器还允许开发人员自定义应用程序的运行环境和配置,以满足特定的需求和要求。
-
隔离性和安全性:容器提供了完全隔离的运行环境,可以防止应用程序之间的干扰,并减少系统资源的竞争。此外,容器化应用程序还可以与宿主操作系统区分开来,从而更好地隔离和保护系统内的敏感数据和信息。
-
可伸缩性:容器化应用程序可以很容易地进行扩展和缩小,以应对不同负载和需求。开发人员可以使用容器编排工具(如 Kubernetes、Docker Swarm 等)来管理和自动化容器的部署和运行,以实现高效和可靠的应用程序管理。
-
- 使用容器技术将应用程序打包和交付的一种方法
- K8s的主要作用
-
容器编排:Kubernetes 可以帮助你定义和管理容器化应用程序的部署方式、容器之间的关系以及与底层基础设施的交互方式。
-
自动伸缩:Kubernetes 允许根据应用程序的负载情况自动调整副本数量,实现弹性伸缩,以满足实时需求。
-
负载均衡:Kubernetes 可以自动分配流量给应用程序的不同副本,确保负载均衡和高可用性。
-
存储管理:Kubernetes 提供了各种存储选项,例如本地存储、网络存储、云存储等,并提供了方便的方式来挂载和管理这些存储。
-
自愈性:Kubernetes 可以监控应用程序的状态,并在发生故障或节点出现问题时自动恢复应用程序的健康状态。
-
-
命令行工具kubectl ,用于与 Kubernetes 集群进行交互和管理。使用
kubectl
可以执行多种操作,包括创建、删除和管理 Kubernetes 资源,以及与集群进行交互。一些常用的 kubectl命令:
-
获取集群信息:
kubectl cluster-info Kubernetes control plane is running at *****://address:port To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. # kubectl cluster-info 命令用于获取 Kubernetes 集群的信息。 # Kubernetes 控制平面(control plane)正在运行,其地址为 *****://address:port。这是 Kubernetes API 服务器的地址和端口。 # 通过这个信息,可得知 Kubernetes 控制平面的运行状态以及 API 服务器的地址和端口。 # 若需要进一步调试和诊断集群问题,可以使用 kubectl cluster-info dump 命令生成详细的集群信息转储。这将提供更全面的数据,用于故障排除和分析集群问题。
-
获取集群节点列表:
kubectl get nodes # NAME STATUS ROLES AGE VERSION
-
获取资源列表(如 Pod、Deployment、Service 等):
kubectl get <资源类型>
-
获取资源详细信息:
kubectl describe <资源类型> <资源名称> # 显示yaml文件信息
-
创建资源:
kubectl create -f <资源配置文件>
-
删除资源:
kubectl delete <资源类型> <资源名称>
-
执行命令:
kubectl exec -it <Pod名称> -- <命令>
-
查看日志:
kubectl logs <Pod名称>
-
伸缩应用程序:
kubectl scale --replicas=<副本数> deployment/<应用名称>
-
在集群中部署应用程序:
kubectl apply -f <应用配置文件>
- 将 Deployment 暴露为一个服务:
kubectl expose deployment <deployment-name> --port=<port-number>
-
- 容器编排
上述命令中的 <资源类型>
可以是 Pod、Deployment、Service、Namespace 等各种 Kubernetes 资源的名称,而 <资源名称>
则是具体要操作的资源实例的名称。
这只是 kubectl
的一小部分命令,它还有很多其他功能和选项,你可以使用 kubectl --help
命令查看完整的命令列表,并通过 kubectl <command> --help
获取特定命令的详细信息和用法说明。
基于k8s环境编写yaml文件跑作业
- yaml文件编写
# 在 Kubernetes 中,使用 YAML 文件来定义和配置各种资源(如 Pod、Deployment、Service 等)
apiVersion:指定 Kubernetes API 的版本。例如,kubeflow.org/v1 是指 使用kubeflow.org API 组的版本 v1。
kind:指定要创建的 Kubernetes 资源类型。例如,kind: Pod 表示创建一个 Pod 资源。PyTorchJob表示要创建或管理的对象是一个 PyTorch 作业。
Kubernetes 提供了许多不同的对象类型,如 Deployment、Service、Pod、ConfigMap、Secret 等。每个对象类型都有其特定的用途和属性,用于实现不同的功能和需求。
kind 字段是区分不同对象类型的关键,它会告诉 Kubernetes 如何处理该对象类型,并对其进行相应的操作和管理。
metadata:包含资源的元数据信息,如名称、标签等。重要字段包括:
name:指定资源的名称。
labels:为资源定义标签,用于进行选择和过滤。
annotations:为资源添加注释或描述性信息。
spec:定义资源的规格和配置信息。具体字段根据不同资源类型而有所不同,以下是几个常见资源的重要字段:
Pod:
containers:定义 Pod 中的容器列表。
volumes:定义 Pod 的卷列表。
Deployment:
replicas:指定应该创建的副本数。
template:定义创建的 Pod 模板。
Service:
type:指定服务的类型,如 ClusterIP、NodePort、LoadBalancer 等。
ports:定义服务监听的端口。
ConfigMap:
data:定义配置数据的键值对。
Secret:
data:定义加密数据的键值对。
PersistentVolumeClaim:
accessModes:指定卷的访问模式。
resources:定义卷的资源请求。
status:用于显示资源的当前状态,由 Kubernetes 自动更新。
除了上述字段外,还有一些常见的字段用于资源间的关联和引用:
selector:在某些资源类型中,用于根据标签选择其他资源。
template:在某些资源类型(如 Deployment)中,用于定义创建其他资源的模板。
- 使用 PyTorchJob 创建的 Kubernetes Job 的yaml配置文件task.yaml
这是一个使用 PyTorchJob 创建的 Kubernetes Job 的配置文件。
apiVersion: "kubeflow.org/v1"
kind: "PyTorchJob"
metadata:
name: name # modify the name
namespace: default
spec:
runPolicy:指定该 Job 的运行策略。
schedulingPolicy:指定调度策略,其中的 queue 字段指定将任务调度到的队列。
elasticPolicy:弹性策略的配置参数。
rdzvBackend:指定后端类型。
rdzvId:指定该 Job 的 ID。
minReplicas:指定最小的副本数。
maxReplicas:指定最大的副本数。
maxRestarts:指定最大重启次数。
pytorchReplicaSpecs:指定 PyTorch 的 Replica 规格。
Worker:指定 Worker 的配置,包括副本数replicas和重启策略restartPolicy。
template:Worker 的模板配置,包括容器、镜像、命令等信息。
containers:指定容器的相关设置,可以定义多个容器,包括名称、镜像、命令和环境变量等。
name: 名称
image: 使用的容器镜像
imagePullPolicy
command
env指定了一些环境变量,如MY_MEM_LIMIT、LOGLEVEL
resources: 资源限制部分,可以设置任务使用的 CPU、内存等资源的限制。
- 部署应用程序
kubectl apply -f task.yaml