

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Instalar canalizaciones de Kubeflow
<a name="kubernetes-sagemaker-components-install"></a>

Las [canalizaciones de Kubeflow (KFP)](https://www.kubeflow.org/docs/components/pipelines/v2/introduction/) son el componente de orquestación de las canalizaciones de Kubeflow.

Puede implementar las canalizaciones de Kubeflow (KFP) en un Amazon Elastic Kubernetes Service (Amazon EKS) existente o crear un nuevo clúster de Amazon EKS. Utilice un nodo de puerta de enlace para interactuar con el clúster. El nodo de puerta de enlace puede ser su equipo local o una instancia de Amazon EC2.

En la siguiente sección, se explican los pasos necesarios para instalar y configurar estos recursos.

**Topics**
+ [Elegir una opción de instalación](#choose-install-option)
+ [Configura los permisos de tu canalización para acceder a la IA SageMaker](#configure-permissions-for-pipeline)
+ [Acceder a la interfaz de usuario de KFP (panel de Kubeflow)](#access-the-kfp-ui)

## Elegir una opción de instalación
<a name="choose-install-option"></a>

Kubeflow Pipelines está disponible como un componente principal de la distribución completa de Kubeflow en una instalación independiente o como una instalación independiente. AWS 

Seleccione la opción que se aplique a su caso de uso:

1. [Kubeflow completo en el momento de la implementación AWS](#full-kubeflow-deployment)

   Para usar otros componentes de Kubeflow además de las canalizaciones de Kubeflow, elija la implementación completa de [distribución de AWS de Kubeflow](https://awslabs.github.io/kubeflow-manifests). 

1. [Implementación independiente de canalizaciones de Kubeflow](#kubeflow-pipelines-standalone)

   Para usar las canalizaciones de Kubeflow sin los demás componentes de Kubeflow, instale las canalizaciones de Kubeflow de forma independiente. 

### Kubeflow completo en el momento de la implementación AWS
<a name="full-kubeflow-deployment"></a>

Para instalar la versión completa de Kubeflow AWS, elige la opción de implementación básica en la [guía de implementación de Kubeflow on AWS](https://awslabs.github.io/kubeflow-manifests/docs/deployment/) o cualquier otra opción de implementación que admita integraciones con varios servicios ( AWS Amazon S3, Amazon RDS, Amazon Cognito).

### Implementación independiente de canalizaciones de Kubeflow
<a name="kubeflow-pipelines-standalone"></a>

En esta sección se supone que el usuario tiene permisos para crear roles y definir políticas para el rol.

#### Configurar un nodo de puerta de enlace
<a name="set-up-a-gateway-node"></a>

Puede utilizar su equipo local o una instancia de Amazon EC2 como nodo de puerta de enlace. Se utiliza un nodo de puerta de enlace para crear un clúster de Amazon EKS y acceder a la interfaz de usuario de las canalizaciones de Kubeflow. 

Realice los siguientes pasos para configurar su nodo. 

1. 

**Cree un nodo de puerta de enlace.**

   Puede utilizar una instancia de Amazon EC2 existente o crear una nueva instancia con la versión más reciente de DLAMI de Ubuntu 18.04 según los pasos que se indican en [Launching and Configuring a DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/launch-config.html).

1. 

**Cree un rol de IAM para permitir que su nodo de puerta de enlace acceda a los recursos. AWS**

   Cree un rol de IAM con permisos para los siguientes recursos: CloudWatch,, IAM CloudFormation, Amazon EC2, Amazon S3, Amazon EKS.

   Adjunte las políticas siguientes al rol de IAM:
   + CloudWatchLogsFullAccess 
   + [https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAWSCloudFormationFullAccess)
   + IAMFullAcceda 
   + Amazon S3 FullAccess 
   + Amazon EC2 FullAccess 
   + EKSAdminPolítica de Amazon (cree esta política con el esquema de los ejemplos de [políticas basadas en la identidad de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/security_iam_id-based-policy-examples.html)) 

   Para obtener información sobre cómo permisos de IAM a un rol de IAM, consulte [Adición y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html).

1. 

**Instale las siguientes herramientas y clientes.**

   Instale y configure las siguientes herramientas y recursos en su nodo de puerta de enlace para acceder al clúster de Amazon EKS y a la interfaz de usuario (UI) de KFP. 
   + [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html): La herramienta de línea de comandos para trabajar con AWS los servicios. Para obtener información sobre la configuración de AWS CLI , consulte [Configuración del AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html). 
   + [aws-iam-authenticator](https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html)versión 0.1.31 y versiones posteriores: herramienta que utiliza las credenciales de AWS IAM para autenticarse en un clúster de Kubernetes.
   + [https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html), versión superior a 0.15: la herramienta de línea de comandos para trabajar con clústeres de Amazon EKS.
   + [https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl): la herramienta de línea de comandos para trabajar con clústeres de Kubernetes. La versión debe coincidir con su versión de Kubernetes dentro de una versión secundaria.
   + [https://aws.amazon.com/sdk-for-python/](https://aws.amazon.com/sdk-for-python/).

     ```
     pip install boto3
     ```

#### Configurar un clúster de Amazon EKS
<a name="set-up-anamazon-eks-cluster"></a>

1. Si no tiene un clúster de Amazon EKS existente, ejecute los siguientes pasos desde la línea de comandos de su nodo de puerta de enlace; de lo contrario, omita este paso.

   1. Ejecute el siguiente comando para crear un clúster de Amazon EKS con la versión 1.17 o superior. Reemplace `<clustername>` por el nombre del clúster. 

      ```
      eksctl create cluster --name <clustername> --region us-east-1 --auto-kubeconfig --timeout=50m --managed --nodes=1
      ```

   1. Cuando se complete la creación del clúster, asegúrese de tener acceso a él mediante una lista de los nodos del clúster. 

      ```
      kubectl get nodes
      ```

1. Asegúrese de que el contexto `kubectl` actual apunta al clúster con el siguiente comando. El contexto actual se marca con un asterisco (\$1) en la salida.

   ```
   kubectl config get-contexts
   
   CURRENT NAME     CLUSTER
   *   <username>@<clustername>.us-east-1.eksctl.io   <clustername>.us-east-1.eksctl.io
   ```

1. Si el clúster deseado no está configurado como el predeterminado actual, actualícelo con el siguiente comando. 

   ```
   aws eks update-kubeconfig --name <clustername> --region us-east-1
   ```

#### Instalar canalizaciones de Kubeflow
<a name="install-kubeflow-pipelines"></a>

Ejecute los siguientes pasos desde la terminal de su nodo de puerta de enlace para instalar canalizaciones de Kubeflow en su clúster.

1. Instale todos los [componentes cert-manager](https://cert-manager.io/docs/installation/kubectl/).

   ```
   kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
   ```

1. Instale las canalizaciones de Kubeflow.

   ```
   export PIPELINE_VERSION=2.0.0-alpha.5
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/cluster-scoped-resources?ref=$KFP_VERSION"
   kubectl wait --for condition=established --timeout=60s crd/applications.app.k8s.io
   kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/cert-manager/dev?ref=$KFP_VERSION"
   ```

1. Asegúrese de que el servicio de canalizaciones de Kubeflow y otros recursos relacionados funcionen.

   ```
   kubectl -n kubeflow get all | grep pipeline
   ```

   El resultado debería tener el siguiente aspecto.

   ```
   pod/ml-pipeline-6b88c67994-kdtjv                      1/1     Running            0          2d
   pod/ml-pipeline-persistenceagent-64d74dfdbf-66stk     1/1     Running            0          2d
   pod/ml-pipeline-scheduledworkflow-65bdf46db7-5x9qj    1/1     Running            0          2d
   pod/ml-pipeline-ui-66cc4cffb6-cmsdb                   1/1     Running            0          2d
   pod/ml-pipeline-viewer-crd-6db65ccc4-wqlzj            1/1     Running            0          2d
   pod/ml-pipeline-visualizationserver-9c47576f4-bqmx4   1/1     Running            0          2d
   service/ml-pipeline                       ClusterIP   10.100.170.170   <none>        8888/TCP,8887/TCP   2d
   service/ml-pipeline-ui                    ClusterIP   10.100.38.71     <none>        80/TCP              2d
   service/ml-pipeline-visualizationserver   ClusterIP   10.100.61.47     <none>        8888/TCP            2d
   deployment.apps/ml-pipeline                       1/1     1            1           2d
   deployment.apps/ml-pipeline-persistenceagent      1/1     1            1           2d
   deployment.apps/ml-pipeline-scheduledworkflow     1/1     1            1           2d
   deployment.apps/ml-pipeline-ui                    1/1     1            1           2d
   deployment.apps/ml-pipeline-viewer-crd            1/1     1            1           2d
   deployment.apps/ml-pipeline-visualizationserver   1/1     1            1           2d
   replicaset.apps/ml-pipeline-6b88c67994                      1         1         1       2d
   replicaset.apps/ml-pipeline-persistenceagent-64d74dfdbf     1         1         1       2d
   replicaset.apps/ml-pipeline-scheduledworkflow-65bdf46db7    1         1         1       2d
   replicaset.apps/ml-pipeline-ui-66cc4cffb6                   1         1         1       2d
   replicaset.apps/ml-pipeline-viewer-crd-6db65ccc4            1         1         1       2d
   replicaset.apps/ml-pipeline-visualizationserver-9c47576f4   1         1         1       2d
   ```

## Configura los permisos de tu canalización para acceder a la IA SageMaker
<a name="configure-permissions-for-pipeline"></a>

En esta sección, crearás una función de ejecución de IAM que permita a los pods de Kubeflow Pipeline acceder a SageMaker los servicios de IA. 

### Configuración de los componentes de SageMaker IA, versión 2
<a name="permissions-for-SM-v2"></a>

Para ejecutar la versión 2 de SageMaker AI Components para Kubeflow Pipelines, debes instalar [SageMaker AI Operator para Kubernetes y configurar el control de acceso basado en roles (RBAC) para](https://github.com/aws-controllers-k8s/sagemaker-controller) que los pods de Kubeflow Pipelines puedan crear recursos de IA personalizados en tu clúster de Kubernetes. SageMaker 

**importante**  
Siga esta sección si va a utilizar la implementación independiente de las canalizaciones de Kubeflow. Si utilizas la AWS distribución de Kubeflow en la versión 1.6.0-aws-b1.0.0 o superior, los componentes de IA de la versión 2 ya están configurados. SageMaker 

1. Instala SageMaker AI Operator para Kubernetes para usar los componentes de IA de la versión 2. SageMaker 

   Siga la sección de *configuración* del [tutorial Machine Learning with ACK SageMaker AI Controller](https://aws-controllers-k8s.github.io/community/docs/tutorials/sagemaker-example/#setup).

1. Configure los permisos RBAC para el rol de ejecución (cuenta de servicio) que utilizan los pods de las canalizaciones de Kubeflow. En la implementación independiente de las canalizaciones de Kubeflow, las ejecuciones de la canalización se ejecutan en el espacio de nombres `kubeflow` mediante la cuenta de servicio `pipeline-runner`.

   1. Cree una [RoleBinding](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-example)que dé permiso a la cuenta de servicio para administrar los recursos personalizados de SageMaker IA.

      ```
      cat > manage_sagemaker_cr.yaml <<EOF
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
      name: manage-sagemaker-cr  
      namespace: kubeflow
      subjects:
      - kind: ServiceAccount
      name: pipeline-runner
      namespace: kubeflow
      roleRef:
      kind: ClusterRole
      name: ack-sagemaker-controller 
      apiGroup: rbac.authorization.k8s.io
      EOF
      ```

      ```
      kubectl apply -f manage_sagemaker_cr.yaml
      ```

   1. Asegúrese de que el enlace de roles se haya creado ejecutando:

      ```
      kubectl get rolebinding manage-sagemaker-cr -n kubeflow -o yaml
      ```

### Configuración de los componentes de SageMaker IA, versión 1
<a name="permissions-for-SM-v1"></a>

Para ejecutar la versión 1 de SageMaker AI Components para Kubeflow Pipelines, los pods de Kubeflow Pipeline necesitan acceso a la IA. SageMaker 

**importante**  
Sigue esta sección tanto si utilizas el Kubeflow completo durante la implementación como si utilizas Kubeflow Pilepines de forma independiente. AWS 

Para crear una función de ejecución de IAM que permita a los módulos de canalización de Kubeflow acceder a la IA, sigue estos pasos: SageMaker 

1. Exporta el nombre del clúster (p. ej. *my-cluster-name*) y la región del clúster (p. ej., *us-east-1*).

   ```
   export CLUSTER_NAME=my-cluster-name
   export CLUSTER_REGION=us-east-1
   ```

1. Exporte el espacio de nombres y el nombre de la cuenta de servicio a su instalación.
   + Para obtener el Kubeflow completo durante la AWS instalación, exporta tu perfil `namespace` (por ejemplo *kubeflow-user-example-com*) y el editor *predeterminado como cuenta de servicio.*

     ```
     export NAMESPACE=kubeflow-user-example-com
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=default-editor
     ```
   + Para la implementación independiente de las canalizaciones, exporte *kubeflow* como el `namespace` y *pipeline-runner* como la cuenta de servicio.

     ```
     export NAMESPACE=kubeflow
     export KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT=pipeline-runner
     ```

1. Cree un [proveedor de OIDC de IAM para el clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) con el siguiente comando.

   ```
   eksctl utils associate-iam-oidc-provider --cluster ${CLUSTER_NAME} \
               --region ${CLUSTER_REGION} --approve
   ```

1. Cree una función de ejecución de IAM para que los pods de KFP accedan AWS a los servicios (AI,). SageMaker CloudWatch

   ```
   eksctl create iamserviceaccount \
   --name ${KUBEFLOW_PIPELINE_POD_SERVICE_ACCOUNT} \
   --namespace ${NAMESPACE} --cluster ${CLUSTER_NAME} \
   --region ${CLUSTER_REGION} \
   --attach-policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess \
   --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchLogsFullAccess \
   --override-existing-serviceaccounts \
   --approve
   ```

[Una vez que sus permisos de canalización estén configurados para acceder a la versión 1 de SageMaker AI Components, siga la guía de componentes de SageMaker IA para canalizaciones de Kubeflow que se encuentra en la documentación de Kubeflow on. AWS](https://awslabs.github.io/kubeflow-manifests/docs/amazon-sagemaker-integration/sagemaker-components-for-kubeflow-pipelines/)

## Acceder a la interfaz de usuario de KFP (panel de Kubeflow)
<a name="access-the-kfp-ui"></a>

La interfaz de usuario de las canalizaciones de Kubeflow se utiliza para administrar y realizar un seguimiento de los experimentos, los trabajos y las ejecuciones en el clúster. Para obtener instrucciones sobre cómo acceder a la interfaz de usuario de las canalizaciones de Kubeflow desde su nodo de puerta de enlace, siga los pasos correspondientes a la opción de implementación en esta sección.

### Kubeflow completo en el momento de la implementación AWS
<a name="access-kfp-ui-full-kubeflow-deployment"></a>

Sigue las instrucciones del [AWS sitio web de Kubeflow](https://awslabs.github.io/kubeflow-manifests/docs/deployment/connect-kubeflow-dashboard/) para conectarte al panel de control de Kubeflow y acceder a la pestaña de canalizaciones.

### Implementación independiente de canalizaciones de Kubeflow
<a name="access-kfp-ui-standalone-kubeflow-pipelines-deployment"></a>

Use el reenvío de puertos para acceder a la interfaz de usuario de canalizaciones de Kubeflow desde su nodo de puerta de enlace según estos pasos.

#### Configurar el reenvío de puertos al servicio de interfaz de usuario de KFP
<a name="set-up-port-forwarding-to-the-kfp-ui-service"></a>

Ejecute el siguiente comando desde la línea de comandos de su nodo de puerta de enlace.

1. Compruebe que el servicio de interfaz de usuario de KFP se ejecute mediante el siguiente comando.

   ```
   kubectl -n kubeflow get service ml-pipeline-ui
   
   NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
   ml-pipeline-ui   ClusterIP   10.100.38.71   <none>        80/TCP    2d22h
   ```

1. Ejecute el siguiente comando para configurar el reenvío de puertos al servicio de interfaz de usuario de KFP. Esto reenvía la interfaz de usuario de KFP al puerto 8080 de su nodo de puerta de enlace y le permite acceder a la interfaz de usuario de KFP desde su navegador. 

   ```
   kubectl port-forward -n kubeflow service/ml-pipeline-ui 8080:80
   ```

   El reenvío de puertos desde su equipo remoto se interrumpe si no hay actividad. Vuelva a ejecutar este comando si su panel no puede obtener registros o actualizaciones. Si los comandos devuelven un error, asegúrese de que no haya ningún proceso en ejecución en el puerto que está intentando utilizar. 

#### Acceder al servicio de interfaz de usuario de KFP
<a name="set-up-port-forwarding-to-the-kfp-ui-service-access"></a>

El método de acceso a la interfaz de usuario de KFP depende del tipo de nodo de la puerta de enlace.
+ Equipo local como nodo de puerta de enlace:

  1. Acceda al panel de su navegador de la siguiente manera: 

     ```
     http://localhost:8080
     ```

  1. Seleccione **Canalizaciones** para acceder a la interfaz de usuario de las canalizaciones. 
+ Instancia de Amazon EC2 como nodo de puerta de enlace:

  1. Debe configurar un túnel SSH en su instancia de Amazon EC2 para acceder al panel de Kubeflow desde el navegador de su equipo local. 

     Desde una nueva sesión de terminal en su equipo local, ejecute lo siguiente. Reemplace `<public-DNS-of-gateway-node>` por la dirección IP de la instancia que se encuentra en la consola de Amazon EC2. También puede usar el DNS público. Reemplace `<path_to_key>` por la ruta de acceso a la clave pem utilizada para acceder al nodo de puerta de enlace. 

     ```
     public_DNS_address=<public-DNS-of-gateway-node>
     key=<path_to_key>
     
     on Ubuntu:
     ssh -i ${key} -L 9000:localhost:8080 ubuntu@${public_DNS_address}
     
     or on Amazon Linux:
     ssh -i ${key} -L 9000:localhost:8080 ec2-user@${public_DNS_address}
     ```

  1. Acceda al panel de su navegador. 

     ```
     http://localhost:9000
     ```

  1. Elija **Canalizaciones** para acceder a la interfaz de usuario de KFP. 

#### (Opcional) Conceda a las instancias de libretas de SageMaker IA acceso a Amazon EKS y ejecute los pipelines de KFP desde su notebook.
<a name="add-access-to-additional-iam-users-or-roles"></a>

Una instancia de SageMaker notebook es una instancia de cómputo de Amazon EC2 totalmente gestionada que ejecuta la aplicación Jupyter Notebook. Puede usar una instancia de cuaderno para crear y administrar cuadernos de Jupyter y, a continuación, definir, compilar, implementar y ejecutar sus canalizaciones de KFP mediante AWS SDK para Python (Boto3) o la CLI de KFP. 

1. Siga los pasos que se indican en [Crear una instancia de SageMaker Notebook para crear su instancia](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html) de Notebook y, a continuación, adjunte la `S3FullAccess` política a su función de ejecución de IAM.

1. Desde la línea de comandos del nodo de puerta de enlace, ejecute el siguiente comando para recuperar el ARN del rol de IAM de la instancia de cuaderno que creó. Reemplace `<instance-name>` por el nombre de la instancia.

   ```
   aws sagemaker describe-notebook-instance --notebook-instance-name <instance-name> --region <region> --output text --query 'RoleArn'
   ```

   Este comando muestra el ARN del rol de IAM en el formato `arn:aws:iam::<account-id>:role/<role-name>`. Tome nota de este ARN.

1. Ejecute este comando para adjuntar las siguientes políticas (Amazon AmazonSageMakerFullAccess EKSWorkerNodePolicy, AmazonS3FullAccess) a esta función de IAM. Reemplace el `<role-name>` por el `<role-name>` de su ARN. 

   ```
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
   aws iam attach-role-policy --role-name <role-name> --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
   ```

1. Los clústeres de Amazon EKS utilizan roles de IAM para controlar el acceso al clúster. Las reglas se implementan en un mapa de configuración denominado `aws-auth`. `eksctl` proporciona comandos para leer y editar el mapa de configuración `aws-auth`. Solo los usuarios que tienen acceso al clúster pueden editar este mapa de configuración.

   `system:masters` es uno de los grupos de usuarios predeterminados con permisos de superusuario para el clúster. Agregue su usuario a este grupo o cree un grupo con permisos más restrictivos.

1. Implemente el rol en el clúster ejecutando el siguiente comando. Reemplace el `<IAM-Role-arn>` por el ARN del rol de IAM. `<your_username>` puede ser cualquier nombre de usuario único.

   ```
   eksctl create iamidentitymapping \
   --cluster <cluster-name> \
   --arn <IAM-Role-arn> \
   --group system:masters \
   --username <your-username> \
   --region <region>
   ```

1. Abre un cuaderno de Jupyter en tu instancia de SageMaker IA y ejecuta el siguiente comando para asegurarte de que tiene acceso al clúster.

   ```
   aws eks --region <region> update-kubeconfig --name <cluster-name>
   kubectl -n kubeflow get all | grep pipeline
   ```