

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.

# Configuración y uso del operador de Flink Kubernetes
<a name="jobruns-flink-kubernetes-operator"></a>

En las siguientes páginas, se describe cómo configurar y usar el operador de Kubernetes de Flink para ejecutar trabajos de Flink con Amazon EMR en EKS. Los temas disponibles incluyen los requisitos previos necesarios, cómo configurar el entorno y cómo ejecutar una aplicación Flink en Amazon EMR en EKS.

**Topics**
+ [Configuración del operador de Kubernetes de Flink para Amazon EMR en EKS](jobruns-flink-kubernetes-operator-setup.md)
+ [Instalación del operador de Flink Kubernetes de Amazon EMR en EKS](jobruns-flink-kubernetes-operator-getting-started.md)
+ [Ejecutar una aplicación de Flink](jobruns-flink-kubernetes-operator-run-application.md)
+ [Permisos de rol de seguridad para ejecutar una aplicación Flink](jobruns-flink-kubernetes-security.md)
+ [Desinstalación del operador de Kubernetes de Flink de Amazon EMR en EKS](jobruns-flink-kubernetes-operator-uninstall.md)

# Configuración del operador de Kubernetes de Flink para Amazon EMR en EKS
<a name="jobruns-flink-kubernetes-operator-setup"></a>

Complete las siguientes tareas para configurarlo todo antes de instalar el operador de Flink Kubernetes en Amazon EKS. Si ya se registró en Amazon Web Services (AWS) y ha usado Amazon EKS, lo tiene todo casi listo para comenzar a utilizar Amazon EMR en EKS. Complete las siguientes tareas para la configuración del operador de Flink en Amazon ECS. Si ya ha completado alguno de los requisitos previos, puede omitirlos y pasar al siguiente.
+ **[Instalar o actualizar a la última versión de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)**: si ya ha instalado el AWS CLI, confirme que tiene la última versión.
+ **[Configure kubectl y eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)**: eksctl es una herramienta de línea de comandos que se utiliza para comunicarse con Amazon EKS.
+ **[Instale Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html)**: el administrador de paquetes Helm para Kubernetes le ayuda a instalar y administrar aplicaciones en el clúster de Kubernetes. 
+ **[Comience con Amazon EKS: eksctl](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-eksctl.html) **: siga los pasos para crear un nuevo clúster de Kubernetes con nodos en Amazon EKS.
+ **[Elija una etiqueta de versión de Amazon EMR](jobruns-flink-security-release-versions.md) (versión 6.13.0 o posterior)**: el operador de Flink Kubernetes es compatible con las versiones 6.13.0 y posteriores de Amazon EMR.
+ **[Habilite los roles de IAM para las cuentas de servicio (IRSA) en el clúster de Amazon EKS](setting-up-enable-IAM.md)**.
+ **[Cree un rol de ejecución de trabajos](creating-job-execution-role.md)**.
+ **[Actualice la política de confianza del rol de ejecución de trabajos](setting-up-trust-policy.md)**.
+ Cree un rol de ejecución de operador. Este paso es opcional. Puede usar el mismo rol para los trabajos y el operador de Flink. Si desea que su operador tenga un rol de IAM diferente, puede crear un rol independiente.
+ Actualice la política de confianza del rol de ejecución del operador. Debe agregar explícitamente una entrada de política de confianza para los roles que desee utilizar para la cuenta de servicio del operador de Flink Kubernetes de Amazon EMR. Puede seguir este formato de ejemplo:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "sts:AssumeRoleWithWebIdentity"
        ],
        "Resource": [
          "*"
        ],
        "Condition": {
          "StringLike": {
            "aws:userid": "system:serviceaccount:emr:emr-containers-sa-flink-operator"
          }
        },
        "Sid": "AllowSTSAssumerolewithwebidentity"
      }
    ]
  }
  ```

------

# Instalación del operador de Flink Kubernetes de Amazon EMR en EKS
<a name="jobruns-flink-kubernetes-operator-getting-started"></a>

Este tema le ayuda a empezar a utilizar el operador de Flink Kubernetes en Amazon EKS mediante una implementación de Flink.

## Instalación del operador de Kubernetes
<a name="jobruns-flink-kubernetes-operator-getting-started-install-operator"></a>

Siga estos pasos para instalar el operador de Kubernetes para Apache Flink.

1. Si aún no lo ha hecho, complete los pasos de [Configuración del operador de Kubernetes de Flink para Amazon EMR en EKS](jobruns-flink-kubernetes-operator-setup.md).

1. Instale el *cert-manager* (una vez por clúster de Amazon EKS) para poder añadir el componente webhook.

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

1. Instale el gráfico de Helm.

   ```
   export VERSION=7.12.0 # The Amazon EMR release version
   export NAMESPACE=The Kubernetes namespace to deploy the operator
   
   helm install flink-kubernetes-operator \
   oci://public.ecr.aws/emr-on-eks/flink-kubernetes-operator \
   --version $VERSION \
   --namespace $NAMESPACE
   ```

   Ejemplo de código de salida:

   ```
   NAME: flink-kubernetes-operator
   LAST DEPLOYED: Tue May 31 17:38:56 2022
   NAMESPACE: $NAMESPACE
   STATUS: deployed
   REVISION: 1
   TEST SUITE: None
   ```

1. Espere a que se complete la implementación y verifique la instalación del gráfico.

   ```
   kubectl wait deployment flink-kubernetes-operator --namespace $NAMESPACE --for condition=Available=True --timeout=30s
   ```

1. Debería ver el siguiente mensaje cuando se complete la implementación.

   ```
   deployment.apps/flink-kubernetes-operator condition met
   ```

1. Use el siguiente comando para ver el operador implementado.

   ```
   helm list --namespace $NAMESPACE
   ```

   A continuación, se muestra un ejemplo de resultado, en el que la versión de la aplicación `x.y.z-amzn-n` se correspondería con la versión del operador de Flink para su versión de Amazon EMR en EKS. Para obtener más información, consulte [Versiones de Amazon EMR en EKS compatibles con Apache Flink](jobruns-flink-security-release-versions.md).

   ```
   NAME                              NAMESPACE    REVISION    UPDATED                                STATUS      CHART                                   APP VERSION          
   flink-kubernetes-operator    $NAMESPACE   1           2023-02-22 16:43:45.24148 -0500 EST    deployed    flink-kubernetes-operator-emr-7.12.0    x.y.z-amzn-n
   ```

### Actualización del operador de Kubernetes
<a name="jobruns-flink-kubernetes-operator-upgrade"></a>

Para actualizar la versión del operador de Flink, siga estos pasos:

1. Desinstale el antiguo `flink-kubernetes-operator`: `helm uninstall flink-kubernetes-operator -n <NAMESPACE>`.

1. Elimine la CRD (ya que helm no eliminará automáticamente la CRD anterior): `kubectl delete crd flinkdeployments.flink.apache.org flinksessionjobs.flink.apache.org`.

1. Vuelva a instalar `flink-kubernetes-operator` con la versión más reciente.

# Ejecutar una aplicación de Flink
<a name="jobruns-flink-kubernetes-operator-run-application"></a>

A partir de Amazon EMR 6.13.0, puede ejecutar una aplicación Fink con el operador Flink Kubernetes en el modo de aplicación de Amazon EMR en EKS. Además, a partir de Amazon EMR 6.15.0, puede ejecutar una aplicación de Flink en el modo de sesiones. En esta página, se explican los dos métodos con los que puede ejecutar una aplicación de Flink con Amazon EMR en EKS.

**Topics**

**nota**  
Debe tener un bucket de Amazon S3 creado para almacenar los metadatos de alta disponibilidad cuando envíe su trabajo de Flink. Si no desea usar esta característica, puede desactivarla. Está habilitada de forma predeterminada.

**Requisito previo**: antes de poder ejecutar una aplicación de Flink con el operador de Flink Kubernetes, complete los pasos indicados en [Configuración del operador de Kubernetes de Flink para Amazon EMR en EKS](jobruns-flink-kubernetes-operator-setup.md) y [Instalación del operador de Kubernetes](jobruns-flink-kubernetes-operator-getting-started.md#jobruns-flink-kubernetes-operator-getting-started-install-operator).

------
#### [ Application mode ]

A partir de Amazon EMR 6.13.0, puede ejecutar una aplicación Fink con el operador Flink Kubernetes en el modo de aplicación de Amazon EMR en EKS.

1. Cree un archivo `basic-example-app-cluster.yaml` de definición de `FlinkDeployment` como en el siguiente ejemplo. Si ha activado y utilizado una de las [opciones opcionales Regiones de AWS](https://docs.aws.amazon.com/controltower/latest/userguide/opt-in-region-considerations.html), asegúrese de eliminar los comentarios y configurar la configuración. `fs.s3a.endpoint.region`

   ```
   apiVersion: flink.apache.org/v1beta1
   kind: FlinkDeployment
   metadata:
     name: basic-example-app-cluster
   spec:
     flinkConfiguration:
       taskmanager.numberOfTaskSlots: "2"
       #fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME
       state.checkpoints.dir: CHECKPOINT_S3_STORAGE_PATH
       state.savepoints.dir: SAVEPOINT_S3_STORAGE_PATH 
     flinkVersion: v1_17
     executionRoleArn: JOB_EXECUTION_ROLE_ARN
     emrReleaseLabel: "emr-6.13.0-flink-latest" # 6.13 or higher
     jobManager:
       storageDir: HIGH_AVAILABILITY_STORAGE_PATH
       resource:
         memory: "2048m"
         cpu: 1
     taskManager:
       resource:
         memory: "2048m"
         cpu: 1
     job:
       # if you have your job jar in S3 bucket you can use that path as well
       jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
       parallelism: 2
       upgradeMode: savepoint
       savepointTriggerNonce: 0
     monitoringConfiguration:    
       cloudWatchMonitoringConfiguration:
          logGroupName: LOG_GROUP_NAME
   ```

1. Envíe la implementación de Flink con el siguiente comando. Esto también creará un objeto de `FlinkDeployment` llamado `basic-example-app-cluster`.

   ```
   kubectl create -f basic-example-app-cluster.yaml -n <NAMESPACE>
   ```

1. Acceda a la interfaz de usuario de Flink.

   ```
   kubectl port-forward deployments/basic-example-app-cluster 8081 -n NAMESPACE
   ```

1. Abra `localhost:8081` para ver sus trabajos de Flink de forma local.

1. Limpie el trabajo. Recuerde limpiar los artefactos de S3 que se crearon para este trabajo, como los puntos de control, la alta disponibilidad y los metadatos de puntos guardados y los registros. CloudWatch

[Para obtener más información sobre cómo enviar solicitudes a Flink a través del operador de Kubernetes de Flink, consulte los ejemplos de operadores de Flink Kubernetes en la carpeta de.](https://github.com/apache/flink-kubernetes-operator/tree/main/examples) `apache/flink-kubernetes-operator` GitHub

------
#### [ Session mode ]

A partir de Amazon EMR 6.15.0, puede ejecutar una aplicación Fink con el operador Flink Kubernetes en el modo de sesiones de Amazon EMR en EKS.

1. Cree un archivo de definición `FlinkDeployment` denominado `basic-example-app-cluster.yaml` como en el siguiente ejemplo. Si activaste y usaste una de las [opciones opcionales Regiones de AWS](https://docs.aws.amazon.com/controltower/latest/userguide/opt-in-region-considerations.html), asegúrate de quitar los comentarios y configurar la configuración. `fs.s3a.endpoint.region`

   ```
   apiVersion: flink.apache.org/v1beta1
   kind: FlinkDeployment
   metadata:
     name: basic-example-session-cluster
   spec:
     flinkConfiguration:
       taskmanager.numberOfTaskSlots: "2"
       #fs.s3a.endpoint.region: OPT_IN_AWS_REGION_NAME
       state.checkpoints.dir: CHECKPOINT_S3_STORAGE_PATH
       state.savepoints.dir: SAVEPOINT_S3_STORAGE_PATH
     flinkVersion: v1_17
     executionRoleArn: JOB_EXECUTION_ROLE_ARN
     emrReleaseLabel: "emr-6.15.0-flink-latest"
     jobManager:
       storageDir: HIGH_AVAILABILITY_S3_STORAGE_PATH
       resource:
         memory: "2048m"
         cpu: 1
     taskManager:
       resource:
         memory: "2048m"
         cpu: 1
     monitoringConfiguration:    
       s3MonitoringConfiguration:
          logUri: 
       cloudWatchMonitoringConfiguration:
          logGroupName: LOG_GROUP_NAME
   ```

1. Envíe la implementación de Flink con el siguiente comando. Esto también creará un objeto de `FlinkDeployment` llamado `basic-example-session-cluster`.

   ```
   kubectl create -f basic-example-app-cluster.yaml -n NAMESPACE
   ```

1. Utilice el siguiente comando para confirmar que el clúster de sesión `LIFECYCLE` sea `STABLE`:

   ```
   kubectl get flinkdeployments.flink.apache.org basic-example-session-cluster -n NAMESPACE
   ```

   La salida debería tener un aspecto similar al siguiente ejemplo:

   ```
   NAME                              JOB STATUS   LIFECYCLE STATE
   basic-example-session-cluster                          STABLE
   ```

1. Cree un archivo de recursos de definición personalizado para un `FlinkSessionJob` con el nombre `basic-session-job.yaml` y el siguiente contenido:

   ```
   apiVersion: flink.apache.org/v1beta1
   kind: FlinkSessionJob
   metadata:
     name: basic-session-job
   spec:
     deploymentName: basic-session-deployment
     job:
       # If you have your job jar in an S3 bucket you can use that path.
       # To use jar in S3 bucket, set 
       # OPERATOR_EXECUTION_ROLE_ARN (--set emrContainers.operatorExecutionRoleArn=$OPERATOR_EXECUTION_ROLE_ARN)
       # when you install Spark operator
       jarURI: https://repo1.maven.org/maven2/org/apache/flink/flink-examples-streaming_2.12/1.16.1/flink-examples-streaming_2.12-1.16.1-TopSpeedWindowing.jar
       parallelism: 2
       upgradeMode: stateless
   ```

1. Envíe la sesión de trabajo de Flink con el siguiente comando. Esto también creará el objeto de `FlinkSessionJob` con el nombre`basic-session-job`.

   ```
   kubectl apply -f basic-session-job.yaml -n $NAMESPACE
   ```

1. Utilice el siguiente comando para confirmar que el clúster de sesión `LIFECYCLE` sea `STABLE` y que `JOB STATUS` sea `RUNNING`:

   ```
   kubectl get flinkdeployments.flink.apache.org basic-example-session-cluster -n NAMESPACE
   ```

   La salida debería tener un aspecto similar al siguiente ejemplo:

   ```
   NAME                              JOB STATUS   LIFECYCLE STATE
   basic-example-session-cluster     RUNNING      STABLE
   ```

1. Acceda a la interfaz de usuario de Flink.

   ```
   kubectl port-forward deployments/basic-example-session-cluster 8081 -n NAMESPACE
   ```

1. Abra `localhost:8081` para ver sus trabajos de Flink de forma local.

1. Limpie el trabajo. Recuerde limpiar los artefactos de S3 que se crearon para este trabajo, como los puntos de control, la alta disponibilidad y los metadatos de puntos guardados y los registros. CloudWatch

------

# Permisos de rol de seguridad para ejecutar una aplicación Flink
<a name="jobruns-flink-kubernetes-security"></a>

En este tema se describen los roles de seguridad para implementar y ejecutar una aplicación Flink. Hay dos roles necesarios para administrar una implementación y para crear y administrar trabajos: el rol de operador y el rol de trabajo. En este tema se presentan y se enumeran sus permisos.

## Control de acceso basado en roles
<a name="jobruns-flink-kubernetes-security-rbac"></a>

Para implementar el operador y ejecutar los trabajos de Flink, se deben crear dos roles en Kubernetes: un rol de operador y otro de trabajo. Amazon EMR crea los dos roles de forma predeterminada al instalar el operador.

## Rol de operador
<a name="jobruns-flink-kubernetes-security-operator-role"></a>

Usamos el rol de operador `flinkdeployments` para gestionar la creación y administración de cada trabajo de JobManager Flink y otros recursos, como los servicios.

El nombre predeterminado del rol de operador es `emr-containers-sa-flink-operator` y requiere los siguientes permisos.

```
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - services
  - events
  - configmaps
  - secrets
  - serviceaccounts
  verbs:
  - '*'
- apiGroups:
  - rbac.authorization.k8s.io
  resources:
  - roles
  - rolebindings
  verbs:
  - '*'
- apiGroups:
  - apps
  resources:
  - deployments
  - deployments/finalizers
  - replicasets
  verbs:
  - '*'
- apiGroups:
  - extensions
  resources:
  - deployments
  - ingresses
  verbs:
  - '*'
- apiGroups:
  - flink.apache.org
  resources:
  - flinkdeployments
  - flinkdeployments/status
  - flinksessionjobs
  - flinksessionjobs/status
  verbs:
  - '*'
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - '*'
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - '*'
```

## Rol de trabajo
<a name="jobruns-flink-security-job-role"></a>

 JobManager Utiliza el rol de trabajo para crear y administrar TaskManagers y ConfigMaps para cada trabajo.

```
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - configmaps
  verbs:
  - '*'
- apiGroups:
  - apps
  resources:
  - deployments
  - deployments/finalizers
  verbs:
  - '*'
```

# Desinstalación del operador de Kubernetes de Flink de Amazon EMR en EKS
<a name="jobruns-flink-kubernetes-operator-uninstall"></a>

Siga estos pasos para desinstalar el operador de Kubernetes de Flink.

1. Elimine el operador.

   ```
   helm uninstall flink-kubernetes-operator -n <NAMESPACE>
   ```

1. Elimine los recursos de Kubernetes que Helm no desinstale.

   ```
   kubectl delete serviceaccounts, roles, rolebindings -l emr-containers.amazonaws.com/component=flink.operator --namespace <namespace>
   kubectl delete crd flinkdeployments.flink.apache.org flinksessionjobs.flink.apache.org
   ```

1. (Opcional) Elimine cert-manager.

   ```
   kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/v1.12.0/cert-manager.yaml
   ```