Creación de clústeres de Kubernetes mediante la CLI de Azure
Se aplica a: Azure Stack HCI, versión 23H2
En este artículo se describe cómo crear clústeres de Kubernetes en Azure Stack HCI mediante la CLI de Azure. El flujo de trabajo es el siguiente:
- Cree un clúster de Kubernetes en Azure Stack HCI 23H2 mediante la CLI de Azure. El clúster está conectado a Azure Arc de forma predeterminada.
- Al crear el clúster, se proporciona un grupo de Microsoft Entra que contiene la lista de usuarios de Microsoft Entra con acceso de administrador de clústeres de Kubernetes.
- Acceda al clúster mediante kubectl y el identificador de Microsoft Entra.
- Ejecución de una aplicación de varios contenedores de ejemplo con un servidor front-end web y una instancia de Redis en el clúster.
Antes de empezar
- Antes de empezar, asegúrese de que tiene los detalles siguientes del administrador de infraestructura local:
- Identificador de suscripción de Azure: el identificador de suscripción de Azure donde se usa Azure Stack HCI para la implementación y el registro.
- Id. de ubicación personalizada: identificador de Azure Resource Manager de la ubicación personalizada. La ubicación personalizada se configura durante la implementación del clúster de Azure Stack HCI. El administrador de infraestructura debe proporcionarle el identificador de Resource Manager de la ubicación personalizada. Este parámetro es necesario para crear clústeres de Kubernetes. También puede obtener el identificador de Resource Manager mediante
az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv
, si el administrador de infraestructura proporciona un nombre de ubicación personalizado y un nombre de grupo de recursos. - Identificador de red: identificador de Azure Resource Manager de la red lógica de Azure Stack HCI creada siguiendo estos pasos. El administrador debe proporcionarle el identificador de la red lógica. Este parámetro es necesario para crear clústeres de Kubernetes. También puede obtener el identificador de Azure Resource Manager mediante
az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv
si conoce el grupo de recursos en el que se creó la red lógica.
- Puede ejecutar los pasos descritos en este artículo en una máquina de desarrollo local para crear un clúster de Kubernetes en la implementación remota de Azure Stack HCI. Asegúrese de que tiene la versión más reciente de la CLI de Az en la máquina de desarrollo. También puede optar por actualizar la versión de la CLI de Az mediante
az upgrade
. - Para conectarse al clúster de Kubernetes desde cualquier lugar, cree un grupo de Microsoft Entra y agréguele miembros. Todos los miembros del grupo Microsoft Entra tienen acceso de administrador de clústeres al clúster. Asegúrese de agregarse como miembro al grupo Microsoft Entra. Si no se agrega usted mismo, no puede acceder al clúster de Kubernetes mediante kubectl. Para obtener más información sobre cómo crear grupos de Microsoft Entra y agregar usuarios, consulte Administrar grupos y pertenencia a grupos de Microsoft Entra.
- Descargue e instale kubectl en la máquina de desarrollo. La herramienta de línea de comandos de Kubernetes, kubectl, le permite ejecutar comandos en clústeres de Kubernetes. Puede usar kubectl para implementar aplicaciones, inspeccionar y administrar recursos de clúster y ver los registros.
Instalación de la extensión de la CLI de Azure
Ejecute el siguiente comando para instalar las extensiones de la CLI de Azure necesarias:
az extension add -n aksarc --upgrade
az extension add -n customlocation --upgrade
az extension add -n stack-hci-vm --upgrade
az extension add -n connectedk8s --upgrade
Creación de un clúster de Kubernetes
Use el az aksarc create
comando para crear un clúster de Kubernetes en AKS Arc. Asegúrese de iniciar sesión en Azure antes de ejecutar este comando. Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado mediante el comando az account set.
az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $logicnetId --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys --load-balancer-count 0 --control-plane-ip $controlplaneIP
Transcurridos unos minutos, el comando se completa y devuelve información en formato JSON sobre el clúster.
Nota:
- El valor de la clave SSH es la clave pública para acceder a los nodos del clúster aprovisionado. De forma predeterminada, esta clave se encuentra en
~/.ssh/id_rsa.pub
. Puede especificar una ubicación diferente mediante el parámetro durante la creación del--ssh-key-value
clúster. - El
--generate-ssh-keys
parámetro es necesario si no hay ninguna clave SSH preexistente en el equipo local. Si no incluye este parámetro durante la creación del clúster y no existe ninguna clave SSH, recibirá un mensaje de error. - Si ya tiene una clave SSH en el equipo local, el clúster de AKS reutiliza esa clave. En este caso, especificar
--generate-ssh-keys
o omitir ese parámetro no tiene ningún efecto.
Conectar al clúster de Kubernetes
Ahora puede conectarse al clúster de Kubernetes ejecutando el comando desde la az connectedk8s proxy
máquina de desarrollo. Asegúrese de iniciar sesión en Azure antes de ejecutar este comando. Si tiene varias suscripciones de Azure, seleccione el identificador de suscripción adecuado mediante el comando az account set.
Este comando descarga kubeconfig del clúster de Kubernetes en la máquina de desarrollo y abre un canal de conexión de proxy al clúster de Kubernetes local. El canal está abierto mientras se ejecute el comando. No puede acceder al clúster si este comando no está en ejecución. Si agota el tiempo de espera, cierre la ventana de la CLI, abra una nueva y vuelva a ejecutar el comando.
Debe tener permisos de colaborador en el grupo de recursos que hospeda el clúster de Kubernetes para ejecutar correctamente el siguiente comando:
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
Resultado esperado:
Proxy is listening on port 47011
Merged "aks-workload" as current context in .\\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using
kubeconfig at .\\aks-arc-kube-config
Press Ctrl+C to close proxy.
Mantenga esta sesión en ejecución y conéctese al clúster de Kubernetes desde otro símbolo del sistema o terminal. Compruebe que puede conectarse al clúster de Kubernetes mediante la ejecución del comando kubectl get. Este comando devuelve una lista de los nodos del clúster:
kubectl get node -A --kubeconfig .\aks-arc-kube-config
En el ejemplo de salida siguiente se muestra el nodo creado en los pasos anteriores. Asegúrese de que el estado del nodo es Listo:
NAME STATUS ROLES AGE VERSION
moc-l0ttdmaioew Ready control-plane,master 34m v1.24.11
moc-ls38tngowsl Ready <none> 32m v1.24.11
Implementación de la aplicación
Un archivo de manifiesto de Kubernetes define el estado deseado del clúster, por ejemplo, qué imágenes de contenedor se van a ejecutar.
Puede usar un manifiesto para crear todos los objetos necesarios para ejecutar la aplicación Azure Vote. Este manifiesto incluye dos implementaciones de Kubernetes:
- Las aplicaciones de Python de ejemplo de Azure Vote.
- Una instancia de Redis.
También se crean dos servicios de Kubernetes:
- Un servicio interno para la instancia de Redis.
- Un servicio externo para acceder a la aplicación Azure Vote desde Internet.
Cree un archivo denominado azure-vote.yaml y copie en el siguiente manifiesto:
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-back
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-back
template:
metadata:
labels:
app: azure-vote-back
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-back
image: <path to image>/oss/bitnami/redis:6.0.8
env:
- name: ALLOW_EMPTY_PASSWORD
value: "yes"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-back
spec:
ports:
- port: 6379
selector:
app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: azure-vote-front
spec:
replicas: 1
selector:
matchLabels:
app: azure-vote-front
template:
metadata:
labels:
app: azure-vote-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: azure-vote-front
image: <path to image>/azure-vote-front:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
env:
- name: REDIS
value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
Implemente la aplicación mediante el comando kubectl apply y especifique el nombre de su YAML:
kubectl apply -f azure-vote.yaml --kubeconfig .\\aks-arc-kube-config
En la salida de ejemplo siguiente se muestran las implementaciones y los servicios creados correctamente:
deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created
Prueba de la aplicación
Cuando se ejecuta la aplicación, un servicio de Kubernetes expone el front-end de la aplicación a Internet. Este proceso puede tardar unos minutos en completarse.
Supervise el progreso mediante el comando kubectl get service con el --watch
argumento .
kubectl get service azure-vote-front --watch --kubeconfig .\aks-arc-kube-config
La salida EXTERNAL-IP del servicio azure-vote-front se muestra inicialmente como pendiente.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Una vez que la dirección EXTERNAL-IP cambia de pendiente a una dirección IP pública real, use CTRL-C para detener el proceso de inspección kubectl. En la salida del ejemplo siguiente se muestra una dirección IP pública válida asignada al servicio:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Para ver la aplicación Azure Vote en acción, abra un explorador web en la dirección IP externa del servicio.
Eliminación del clúster
Ejecute el az aksarc delete
comando para limpiar el clúster que creó:
az aksarc delete --resource-group $aksclustername --name $resource_group