|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Configurando proveedores de infraestructura CAPI nativos para aprovisionar clústeres RKE2
|
Esta es una vista previa tecnológica y el uso de proveedores de infraestructura CAPI nativos es una característica experimental introducida en Rancher 2.14. El propósito de esta guía es la evaluación y no debe utilizarse en clústeres de producción; ten en cuenta que algunos campos de configuración están sujetos a cambios. Las versiones futuras de esta característica pueden ser incompatibles con esta versión. |
Descripción general
Rancher 2.14 puede aprovisionar clústeres RKE2 utilizando proveedores de infraestructura CAPI nativos, como CAPA (Proveedor de API de Clúster AWS) y CAPV (Proveedor de API de Clúster vSphere).
El aprovisionamiento estándar de RKE2 se basa en los proveedores internos de iniciar y plano de control de Rancher junto con los controladores de nodo de Rancher (a través de rancher/machine) como el proveedor de infraestructura. Este nuevo modo te permite sustituir los controladores de nodo de Rancher por proveedores de infraestructura CAPI nativos mientras se conserva la lógica de iniciar y plano de control de Rancher.
Esta guía proporciona ejemplos simples para evaluar este modo de aprovisionamiento utilizando CAPA y CAPV. Consulta la documentación de cada proveedor para más detalles sobre las opciones disponibles y adapta estos ejemplos a tus necesidades.
|
El aprovisionamiento con un proveedor de infraestructura CAPI nativo y Rancher como proveedor de arranque y plano de control es distinto de usar SUSE® Rancher Prime: Cluster API y el CAPRKE2 para aprovisionar un clúster RKE2 y posteriormente importarlo en Rancher. |
Limitaciones y requisitos
-
Configuraciones no soportadas: Los nodos de trabajo de Windows y IPv6 actualmente no son compatibles.
-
Restricciones de la interfaz de usuario: La gestión detallada del clúster a través de la interfaz de usuario está deshabilitada; los clústeres deben ser creados y modificados aplicando objetos de Kubernetes al clúster local. Sin embargo, el Explorador de Clústeres sigue siendo accesible.
-
Requisitos del proveedor de nube de Kubernetes: Se requiere un proveedor de Kubernetes específico de la nube para la infraestructura donde se ejecuta el clúster en sentido descendente (por ejemplo, el Proveedor de Nube Kubernetes AWS para CAPA o el
rancher-vsphere-cpigráfico para CAPV).
Pasos generales
Para tanto CAPA como CAPV, los pasos generales son los siguientes:
-
Instalar Rancher.
-
Instalar un proveedor de infraestructura CAPI, ya sea CAPA o CAPV.
-
Configurar un recurso de identidad para el proveedor.
-
Crear un recurso de clúster de infraestructura CAPI.
-
Crear uno o más recursos de plantilla de máquina de infraestructura CAPI.
-
Crear un recurso Rancher
clusters.provisioning.cattle.ioque haga referencia a los recursos de identidad, clúster de infraestructura y plantilla de máquina de infraestructura.
Después de aplicar el recurso clusters.provisioning.cattle.io, el clúster aparece en la lista de Gestión de Clústeres de Rancher (haz clic en ☰ > Gestión de Clústeres), sin embargo, la vista detallada para este tipo de clúster no está disponible actualmente.
Para ver el progreso del proceso de aprovisionamiento y solucionar problemas, consulta el estado de los diversos recursos de aprovisionamiento de CAPI y Rancher en el clúster local:
-
Haz clic en ☰, luego haz clic en el icono de tu clúster local.
-
Utiliza el menú desplegable en la parte superior para filtrar por Todos los Espacios de Nombres.
-
Desde la barra lateral, selecciona Más Recursos > Aprovisionamiento de Clúster.
Los registros para la ampliación del proveedor de infraestructura (por ejemplo, capa-controller-manager) también muestran información útil.
Instalando el proveedor de infraestructura
Rancher permite instalar el proveedor de infraestructura de manera declarativa creando el recurso Rancher Turtles CAPIProvider.
Ejemplos
CAPA:
apiVersion: v1
kind: Namespace
metadata:
name: capa-system
---
apiVersion: turtles-capi.cattle.io/v1alpha1
kind: CAPIProvider
metadata:
name: aws
namespace: capa-system
spec:
type: infrastructure
variables:
# Global credentials for the provider are not needed
# as these examples define credentials for the AWSCluster.
AWS_B64ENCODED_CREDENTIALS: ""
CAPV:
apiVersion: v1
kind: Namespace
metadata:
name: capv-system
---
apiVersion: turtles-capi.cattle.io/v1alpha1
kind: CAPIProvider
metadata:
name: vsphere
namespace: capv-system
spec:
type: infrastructure
variables:
# Global credentials for the provider are not needed
# as these examples define credentials for the VsphereCluster.
VSPHERE_USERNAME: ""
VSPHERE_PASSWORD: ""
Aprovisionando un clúster
Para estos ejemplos, se utiliza un único grupo de máquinas con todos los roles (plano de control, etcd y trabajador), pero los ejemplos se pueden adaptar especificando más grupos de máquinas y roles separados.
Crea los recursos en tu clúster de sentido ascendente y reemplaza los valores dentro de los corchetes <>.
|
Cada grupo de máquinas definido en el recurso |
CAPA
Primero, configura IAM según lo requerido por CAPA. Estos roles son asumidos por nodos descendentes utilizando perfiles de instancia para habilitar el proveedor de nube AWS de Kubernetes.
Para hacer esto, CAPA proporciona la herramienta clusterawsadm para generar y aplicar los objetos requeridos. Consulta el manual de CAPA para más detalles.
Luego, configura la identidad del proveedor en el clúster ascendente para que el proveedor de CAPA pueda crear recursos en AWS. Consulta el manual para todas las opciones.
En este ejemplo, usaremos AWSClusterStaticIdentity.
Crea un secreto con tus credenciales:
apiVersion: v1
kind: Secret
metadata:
name: capa-lab-credentials
namespace: capa-system
type: Opaque
stringData:
AccessKeyID: <access key id>
SecretAccessKey: <secret access key>
# You might have a session token depending on your credential type.
# SessionToken: <session token>
Luego, crea el objeto de identidad que referencia el secreto:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSClusterStaticIdentity
metadata:
name: capa-lab-identity
spec:
secretRef: capa-lab-credentials
allowedNamespaces:
# The namespace of the AWSCluster resource that points
# to this identity for provisioning.
list:
- fleet-default
Ahora, crea el AWSCluster recurso. Este objeto define la configuración de infraestructura común a todos los grupos de máquinas.
CAPA crea VPCs, subredes, grupos de seguridad y un balanceador de carga en su configuración predeterminada, pero se deben configurar reglas adicionales para permitir los puertos necesarios por Rancher y RKE2. Para simplificar, este ejemplo define reglas adicionales de grupo de seguridad que permiten todo el tráfico entre los nodos, pero se pueden configurar reglas más restrictivas en su lugar.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSCluster
metadata:
name: capa-lab
namespace: fleet-default
spec:
identityRef:
kind: AWSClusterStaticIdentity
name: capa-lab-identity
controlPlaneLoadBalancer:
healthCheckProtocol: TCP
loadBalancerType: nlb
region: <e.g. us-east-1>
# These two additional rules allow all incoming traffic
# from other nodes.
network:
additionalControlPlaneIngressRules:
- protocol: "-1"
sourceSecurityGroupRoles:
- controlplane
- node
additionalNodeIngressRules:
- protocol: "-1"
sourceSecurityGroupRoles:
- controlplane
- node
A continuación, crea una plantilla de máquina para el grupo de máquinas del plano de control. Crea plantillas adicionales para cada grupo de máquinas definido en el recurso clusters.provisioning.cattle.io.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
kind: AWSMachineTemplate
metadata:
name: capa-lab-control-plane
namespace: fleet-default
spec:
template:
spec:
ami:
# The ami requires cloud-init.
id: <your ami>
# This should correspond to the profile created through clusterawsadm.
# Worker or etcd-only nodes should use nodes.cluster-api-provider-aws.sigs.k8s.io.
iamInstanceProfile: control-plane.cluster-api-provider-aws.sigs.k8s.io
instanceType: t3.medium
# This refers to the name of an EC2 key pair.
sshKeyName: <your ssh key>
rootVolume:
size: 16
cloudInit:
insecureSkipSecretsManager: true
|
La opción |
Finalmente, crea el recurso Rancher clusters.provisioning.cattle.io y apunta al clúster de CAPA y a la plantilla de máquina que se acaban de crear.
apiVersion: provisioning.cattle.io/v1
kind: Cluster
metadata:
name: capa-lab
namespace: fleet-default
spec:
kubernetesVersion: v1.35.1+rke2r1
rkeConfig:
# This is the ref to the infra cluster defined above.
infrastructureRef:
kind: AWSCluster
name: capa-lab
namespace: fleet-default
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
machinePools:
- name: ctrl
controlPlaneRole: true
etcdRole: true
workerRole: true
quantity: 3
machineConfigRef:
kind: AWSMachineTemplate
name: capa-lab-control-plane
namespace: fleet-default
apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
machineGlobalConfig:
cni: calico
disable-kube-proxy: false
etcd-expose-metrics: false
ingress-controller: traefik
protect-kernel-defaults: false
cloud-provider-name: external
node-name-from-cloud-provider-metadata: true
# The AWS cloud controller definition. The controller uses the IAM instance profile for its AWS credentials.
additionalManifest: |-
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: aws-cloud-controller-manager
namespace: kube-system
spec:
chart: aws-cloud-controller-manager
repo: https://kubernetes.github.io/cloud-provider-aws
targetNamespace: kube-system
bootstrap: true
valuesContent: |-
hostNetworking: true
nodeSelector:
node-role.kubernetes.io/control-plane: "true"
args:
- --configure-cloud-routes=false
- --v=5
- --cloud-provider=aws
CAPV
Primero, configura la identidad del proveedor en el clúster ascendente para que el proveedor de CAPV pueda crear recursos en tu servidor vSphere. Consulta el manual para todas las opciones de identidad opciones, y para los requisitos generales de vSphere requisitos.
En este ejemplo, usaremos VSphereClusterIdentity.
Crea un secreto con tus credenciales:
apiVersion: v1
kind: Secret
metadata:
name: capv-lab-credentials
namespace: capv-system
type: Opaque
stringData:
username: <your vSphere username>
password: <your vSphere password>
Luego, crea el objeto de identidad que referencia el secreto:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereClusterIdentity
metadata:
name: capv-lab-identity
spec:
secretName: capv-lab-credentials
allowedNamespaces:
selector:
# The namespace of the VSphereCluster for which this identity
# is used when provisioning.
matchLabels:
kubernetes.io/metadata.name: fleet-default
Al igual que para CAPA, también es necesario instalar el proveedor en la nube para vSphere en el clúster en sentido descendente.
Para transferir de forma segura las credenciales para el gráfico CPI, puedes habilitar la función de inicio previo en Rancher. Esto se puede hacer habilitando la bandera de función provisioningprebootstrap y provoca que Rancher se reinicie.
Ahora, crea el secreto que se envía al clúster en sentido descendente. Si utilizas un nombre diferente para crear el recurso clusters.provisioning.cattle.io, asegúrate de actualizar la anotación rke.cattle.io/object-authorized-for-clusters a continuación.
# Credential secret synced to the downstream cluster for the vsphere CPI chart.
apiVersion: v1
kind: Secret
metadata:
name: vsphere-cpi-creds
namespace: fleet-default
annotations:
# Can be a comma-separated list for multiple clusters, with no spaces.
rke.cattle.io/object-authorized-for-clusters: capv-lab
provisioning.cattle.io/sync-bootstrap: "true"
provisioning.cattle.io/sync-target-namespace: kube-system
type: Opaque
stringData:
# Change the prefix of the key to match your vCenter host.
<vsphere host>.username: <your vSphere username>
<vsphere host>.password: <your vSphere password>
Ahora, crea el recurso VSphereCluster. Este recurso define la configuración de infraestructura común a todos los grupos de máquinas. Consulta la documentación de CAPV para más opciones de configuración.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereCluster
metadata:
name: capv-lab
namespace: fleet-default
spec:
identityRef:
kind: VSphereClusterIdentity
name: capv-lab-identity
server: <vsphere fqdn>
A continuación, crea una plantilla de máquina para el grupo de máquinas del plano de control. Crea plantillas adicionales para cada grupo de máquinas definido en el recurso clusters.provisioning.cattle.io.
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: VSphereMachineTemplate
metadata:
name: capv-lab-control-plane
namespace: fleet-default
spec:
template:
spec:
datacenter: <datacenter>
datastore: <datastore>
diskGiB: 20
folder: <your folder>
memoryMiB: 4096
network:
devices:
- dhcp4: true
networkName: <your network>
numCPUs: 2
os: Linux
resourcePool: <your resource pool>
template: <your VM template>
Finalmente, crea el recurso Rancher clusters.provisioning.cattle.io y apunta al clúster CAPV y a la plantilla de máquina que se acaban de crear. Ten en cuenta que este ejemplo desactiva el gráfico CSI por simplicidad. El gráfico CPI es obligatorio.
apiVersion: provisioning.cattle.io/v1
kind: Cluster
metadata:
name: capv-lab
namespace: fleet-default
spec:
kubernetesVersion: v1.35.1+rke2r1
rkeConfig:
infrastructureRef:
kind: VSphereCluster
name: capv-lab
namespace: fleet-default
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
machinePools:
- name: ctrl
controlPlaneRole: true
etcdRole: true
workerRole: true
quantity: 3
machineConfigRef:
kind: VSphereMachineTemplate
name: capv-lab-control-plane
namespace: fleet-default
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
machineGlobalConfig:
cni: calico
disable-kube-proxy: false
etcd-expose-metrics: false
ingress-controller: traefik
protect-kernel-defaults: false
disable:
- rancher-vsphere-csi
cloud-provider-name: rancher-vsphere
chartValues:
rancher-vsphere-cpi:
vCenter:
datacenters: <your datacenter>
host: <vsphere fqdn>
# The credential secret is transferred by the prebootstrap mechanism,
# and the cpi chart expects the default name (vsphere-cpi-creds).
credentialsSecret:
generate: false
Cambio de plantillas de máquina
Las plantillas de máquina para proveedores de infraestructura CAPI, como AWSMachineTemplate y VSphereMachineTemplate, suelen ser inmutables. Para modificar la configuración de las instancias en un grupo de máquinas, crea una nueva plantilla con un nombre diferente, luego edita el grupo de máquinas en clusters.provisioning.cattle.io para apuntar a esta nueva plantilla. Esto provoca que todas las máquinas en ese grupo se recrearán con la nueva configuración.
Personalizando userdata
Se pueden definir datos de usuario personalizados para cada grupo de máquinas en el recurso clusters.provisioning.cattle.io. Para hacer esto, utiliza el .spec.rkeConfig.machinePools.userdata.inlineUserdata como una cadena yaml en línea en el formato de cloud-config plano. El contenido de este campo se fusiona con el userdata generado por Rancher para iniciar los nodos del clúster.
|
No incluyas datos sensibles en este campo, ya que forma parte de un recurso que no es un Secreto. Este campo es experimental y está sujeto a cambios. Solo es válido para los proveedores nativos de CAPI descritos en este documento, y no tiene efecto en los clústeres provisionados por Rancher a través del método estándar con controladores de nodo. |
Modificar el campo userdata provoca que todas las máquinas en el grupo sean recreadas.
# Only some fields of the provisioning cluster resource are shown here.
apiVersion: provisioning.cattle.io/v1
kind: Cluster
metadata:
name: capv-lab
namespace: fleet-default
spec:
kubernetesVersion: v1.35.1+rke2r1
rkeConfig:
machinePools:
- name: ctrl
userdata:
inlineUserdata: |
runcmd:
- ["echo", "Hello!"]