-
#python #kubernetes #k3d #ray

foto de Growtika Unsplash

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

如果一切按预期进行,则在命令的末尾显示了群集成功创建的消息:

exibição da mensagem de cluster criado com sucesso

我们标记了数字以使管理这些段落变得更容易,例如,我们可以使用以下命令寻求一个不具体的内容:

# 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 的兴趣数量的卷。在下面的 yaml文件中,我们定义了no koud3的流氓。为了攀登应用程序,我们使用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