Motiva㧣o
最近,我一直在寻找并行执行Python应用程序的方法。我曾经使用多处理库并行我的应用程序。但是,多处理的重点是当地母亲的并行过程,我需要在kubernetes进行,一些搜索找到了射线。
因此,在本教程中,我介绍了我遵循的一些步骤,以在 kubernetes 的局部群集中配置射线。第一部分的重点是与K3D的群集的配置,第二部分是通过Ray使用此群集的第二部分。1.准备气氛
要开始,我们需要安装以下工具:
1.1
使用的操作系统是Ubuntu 22.04,在310版中具有Python虚拟环境。已经使用的kubectl的版本已经为v1.27.3。
docker --version
# Docker version 24.0.3, build 3713ee1
helm version --short
# v3.12.1+gf32a527
kubectl version --client --output=yaml
# clientVersion:
# buildDate: "2023-06-14T09:53:42Z"
# compiler: gc
# gitCommit: 25b4e43193bcda6c7328a6d147b1fb73a33f1598
# gitTreeState: clean
# gitVersion: v1.27.3
# goVersion: go1.20.5
# major: "1"
# minor: "27"
# platform: linux/amd64
# kustomizeVersion: v5.0.1
k3d --version
# k3d version v5.5.1
# k3s version v1.26.4-k3s1 (default)
python --version
# Python 3.10.12
ray --version
# ray, version 2.6.1
1.2创建本地kubernetes群集
我们定义了一个配置文件,以用K3D攀登群集。根据documentação的说法,apiVersion
和Koud1的属性是义务,两者都涉及配置文件本身的特征。
apiVersion: k3d.io/v1alpha5 # versão mais recente no momento
kind: Simple
metadata:
name: mycluster # nome do nosso cluster (k3d-mycluster)
servers: 1 # quantidade de servidores
agents: 2 # quantidade de nós que serão criados
image: rancher/k3s:v1.26.4-k3s1 # versão do k3s a ser usada
ports: # mapear as portas dos nós do container para o host (https://k3d.io/v5.5.1/usage/exposing_services/)
- port: 8265:80
nodeFilters:
- loadbalancer
options:
k3s:
nodeLabels: # adiciona rótulos aos nós do cluster
- label: type=node1
nodeFilters:
- agent:0
- label: type=node2
nodeFilters:
- agent:1
1.3创建本地群集
要创建一个本地群集,我们使用以下命令:
k3d cluster create --config k3d-config.yml
如果一切按预期进行,则在命令的末尾显示了群集成功创建的消息:
我们标记了数字以使管理这些段落变得更容易,例如,我们可以使用以下命令寻求一个不具体的内容:
# label de interesse (type=node1)
kubectl get nodes --selector type=node1
# NAME STATUS ROLES AGE VERSION
# k3d-mycluster-agent-0 Ready <none> 21m v1.26.4+k3s1
1.3.1 标签 e 选择器
可以使用归因于每个编号的规则来定义哪些 kubernetes的资源将使用哪些资源,在本小节中,我们在a pod < /em>。 /p>中执行此操作。
我们在nodeSelector
字段中指定了将链接到POD kubectl apply -f pod.yaml
命令。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeSelector:
type: node2 # atribuir esse pod ao nó de interesse
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
然后,我们可以验证该功能是否归因于咨询 node 消息时指定的指定:
kubectl get pods --output=wide
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# nginx 1/1 Running 0 18s 10.42.0.5 k3d-mycluster-agent-1 <none> <none>
由于创建了此应用程序仅是为了显示 labels 的使用,因此我们可以使用以下命令将其从群集中删除。
kubectl delete -f pod.yaml
可以更好地了解标签的概念和选择器,可以咨询documentação do kubernetes。