Administrar Contrail de varios clústeres
RESUMEN Aprenda a realizar tareas de administración de ciclo de vida específicas de una instalación de varios clústeres.
En esta sección, se tratan las tareas específicas de una instalación de varios clústeres. Si desea realizar tareas de administración en un clúster específico (como agregar y quitar nodos dentro de un clúster y actualizar un clúster) dentro de la instalación de varios clústeres, consulte Administrar Contrail de clúster único.
Adjuntar un clúster de carga de trabajo
- Asegúrese de que ha preparado el clúster de carga de trabajo distribuido como se describe en Antes de instalar.
- Cree el clúster de cargas de trabajo distribuidas.
Cree un clúster nuevo. Puede seguir el procedimiento en Crear un clúster de Kubernetes o usar sus propios métodos para crear un clúster. El clúster debe tener las siguientes características:
- El clúster no tiene ningún complemento CNI.
- Desactive el DNS local del nodo.
- Si está ejecutando DPDK, active multus versión 0.3.1.
- En una configuración de varios clústeres, debe configurar diferentes subredes de pod y servicio en cada clúster. Estas subredes deben ser únicas en todo el clúster múltiple.
- En una configuración de varios clústeres, debe configurar nombres de nodo diferentes para los nodos de cada clúster. Los nombres de nodo deben ser únicos en todo el multi clúster.
- Instale los componentes de Contrail en el clúster de cargas de trabajo distribuidas.
- En el clúster de carga de trabajo, cree el espacio de nombres de contrail-deploy.
user@workload:~/contrail$ kubectl create ns contrail-deploy
- En el clúster de carga de trabajo, copie el kubeconfig del clúster central. Lo llamaremos kubeconfig de clústeres centrales aquí.
user@workload:~/contrail$ scp user@central:~/.kube/config central-cluster-kubeconfig
- En el clúster de carga de trabajo, cree un secreto de Kubernetes desde el kubeconfig del clúster central y nombre al secreto central-kubeconfig.
Nota:
Debe nombrar el secreto central-kubeconfig.
user@workload:~/contrail$ kubectl create secret generic central-kubeconfig -n contrail-deploy --from-file=kubeconfig=/root/contrail/central-cluster-kubeconfig
Nota:Debe especificar la ruta absoluta al archivo central-cluster-kubeconfig .
- En el clúster de carga de trabajo, aplique el manifiesto del implementador. El implementador proporciona administración del ciclo de vida de los componentes de Contrail.
Este manifiesto incluye una referencia al central-kubeconfig secreto que creó en el subsép anterior.
user@workload:~/contrail$ kubectl apply -f manifests/distributed_cluster_deployer.yaml
- Compruebe que el contrail-deployer haya surgido. Esto puede tardar unos minutos.
user@workload:~/contrail# kubectl get pods -n contrail-deploy NAME READY STATUS RESTARTS AGE contrail-k8s-deployer-6458859585-xhwx6 1/1 Running 0 6m
- En el clúster de carga de trabajo, cree el espacio de nombres de contrail-deploy.
- En el clúster central, conecte el nuevo clúster de carga de trabajo mediante la creación de un kubemanager para el nuevo clúster de carga de trabajo.
- En el clúster central, copie el kubeconfig del clúster de carga de trabajo distribuido. Llamaremos a esta carga de trabajo-cluster-kubeconfig aquí.
user@central:~/contrail$ scp user@workload:~/.kube/config workload-cluster-kubeconfig
- En el clúster central, cree un secreto de Kubernetes desde el clúster de carga de trabajo distribuido kubeconfig y elija un nombre significativo para el secreto (por ejemplo, workload-kubeconfig).
user@central:~/contrail$ kubectl create secret generic workload-kubeconfig -n contrail --from-file=kubeconfig=/root/contrail/workload-cluster-kubeconfig
- Cree el manifiesto kubemanager con el siguiente contenido. Elija un nombre significativo para el manifiesto (por ejemplo, kubemanager-cluster1.yaml).
apiVersion: configplane.juniper.net/v1alpha1 kind: Kubemanager metadata: name: <CR name> namespace: contrail spec: common: containers: - image: <contrail-image-repository> name: contrail-k8s-kubemanager nodeSelector: node-role.kubernetes.io/master: "" podV4Subnet: <pod-v4-subnet-of-remote-cluster> serviceV4Subnet: <service-v4-subnet-of-remote-cluster> podV6Subnet: <pod-v6-subnet-of-remote-cluster> serviceV6Subnet: <service-v6-subnet-of-remote-cluster> clusterName: <worker-cluster-name> kubeconfigSecretName: <secret-name> enableNad: <true/false> listenerPort: <listener-port> constantRouteTargetNumber: <rt-number>
Tabla 1: Kubemanager CRD Ejemplo de significado de parámetro Nombre El nombre del recurso personalizado. kubemanager-cluster1 Imagen El depósito donde se sacan las imágenes hub.juniper.net/cn2/contrail-k8s-kubemanager:22.1.0.93 podV4Subnet La subred pod IPv4 que configuró anteriormente para el clúster de carga de trabajo distribuida. Esta subred debe ser única en todo el clúster múltiple.
10.234.64.0 serviceV4Subnet La subred de servicio IPv4 que configuró anteriormente para el clúster de carga de trabajo distribuida. Esta subred debe ser única en todo el clúster múltiple.
10.234.0.0/18 podV6Subnet La subred pod IPv6 que configuró anteriormente para el clúster de carga de trabajo distribuido. Esta subred debe ser única en todo el clúster múltiple.
fd85:ee78:d8a6:8608::1:0000/112 serviceV6Subnet La subred de servicio IPv6 que configuró anteriormente para el clúster de carga de trabajo distribuido. Esta subred debe ser única en todo el clúster múltiple.
fd85:ee78:d8a6:8608::1000/116 clusterName El nombre del clúster de carga de trabajo. clúster de carga de trabajo kubeconfigSecretName El nombre del secreto que contiene el token kubeconfig del clúster de carga de trabajo. carga de trabajo-kubeconfig enableNad Verdadero o falso (para habilitar o no la definición de dirección de red) Verdad listenerPort El puerto que el controlador Contrail escucha para las comunicaciones con este clúster de carga de trabajo. Establezca el puerto para el primer clúster de carga de trabajo en 19446 e incremente en 1 para cada clúster de carga de trabajo posterior.
19446 constanteRouteTargetNumber El destino de la ruta para este clúster de carga de trabajo. Establezca el destino de ruta para el primer clúster de carga de trabajo en 7699 e incremente en 100 para cada clúster de carga de trabajo subsiguiente.
7699 - En el clúster central, aplique el manifiesto kubemanager que acaba de crear.
user@central:~/contrail$ kubectl apply -f manifests/kubemanager-cluster1.yaml
- En el clúster central, compruebe que puede ver los espacios de nombres del clúster de carga de trabajo.
kubectl get ns
Los espacios de nombres tienen el siguiente formato:
<kubemanager-name>-<workload-cluster-name>-<namespace>
. Por ejemplo:kubemanager-workload1-workload-cluster-contrail
- En el clúster central, copie el kubeconfig del clúster de carga de trabajo distribuido. Llamaremos a esta carga de trabajo-cluster-kubeconfig aquí.
- En el clúster de carga de trabajo, modifique el manifiesto deployer_ha_kernel.yaml según sea necesario. El manifiesto deployer_ha_kernel.yaml que proporcionamos es una muestra que es posible que deba adaptar a su configuración.
El archivo deployer_ha_kernel.yaml proporcionado especifica diferentes redes para los distintos nodos de clúster, que es diferente de nuestro clúster de ejemplo. En nuestro clúster, todos los nodos del clúster se conectan a la misma red de datos. Tendremos que modificar deployer_ha_kernel.yaml para eliminar las redes adicionales y la configuración de nodos adicionales.
- Elimine las redes adicionales.
Edite deployer_ha_kernel.yaml para quitar las siguientes líneas que definen el
contrail-network-config
ConfigMap:--- apiVersion: v1 kind: ConfigMap metadata: name: contrail-network-config namespace: contrail data: networkConfig: | controlDataNetworks: - subnet: 5.5.6.0/24 gateway: 5.5.6.254 - subnet: 5.5.7.0/24 gateway: 5.5.7.254 - subnet: 5.5.8.0/24 gateway: 5.5.8.254 - subnet: 5.5.14.0/24 gateway: 5.5.14.254
- Quite las siguientes líneas que definen el
contrail-vrouter-nodes-7
vRouter:--- apiVersion: dataplane.juniper.net/v1alpha1 kind: Vrouter metadata: name: contrail-vrouter-nodes-7 namespace: contrail spec: clusterName: distributed-cluster common: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: chassis operator: In values: - "5d10s3-node3" imagePullSecrets: - name: registrypullsecret containers: - image: hub.juniper.net/cn2/contrail-vrouter-agent:22.1.0.93 name: contrail-vrouter-agent - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-watcher - image: hub.juniper.net/cn2/contrail-telemetry-exporter:22.1.0.93 name: contrail-vrouter-telemetry-exporter initContainers: - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-init - image: hub.juniper.net/cn2/contrail-cni-init:22.1.0.93 name: contrail-cni-init maxUnavailablePercentage: 100%
- Del mismo modo, elimine la
contrail-vrouter-nodes-8
sección por completo - Del mismo modo, elimine la
contrail-vrouter-nodes-14
sección por completo - Agregue la siguiente
contrail-vrouter-nodes
sección al final:--- apiVersion: dataplane.juniper.net/v1alpha1 kind: Vrouter metadata: name: contrail-vrouter-nodes namespace: contrail spec: clusterName: distributed-cluster common: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/master operator: NotIn values: - "" imagePullSecrets: - name: registrypullsecret containers: - image: hub.juniper.net/cn2/contrail-vrouter-agent:22.1.0.93 name: contrail-vrouter-agent - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-watcher - image: hub.juniper.net/cn2/contrail-telemetry-exporter:22.1.0.93 name: contrail-vrouter-telemetry-exporter initContainers: - image: hub.juniper.net/cn2/contrail-init:22.1.0.93 name: contrail-init - image: hub.juniper.net/cn2/contrail-cni-init:22.1.0.93 name: contrail-cni-init maxUnavailablePercentage: 100%
- Elimine las redes adicionales.
- Por último, en el clúster de carga de trabajo, instale el vRouter.
user@workload:~/contrail$ kubectl apply -f manifests/deployer_ha_kernel.yaml
Después de unos minutos, verifique que todos los grupos estén en marcha:
user@workload:~# kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS contrail-deploy contrail-k8s-deployer-6c88f6798f-jjx96 1/1 Running 3 contrail contrail-vrouter-masters-phttx 3/3 Running 0 contrail contrail-vrouter-nodes-xkkk8 3/3 Running 0 kube-system coredns-657959df74-26jrk 1/1 Running 0 kube-system dns-autoscaler-b5c786945-m4vtz 1/1 Running 0 kube-system kube-apiserver-k8s-cp0 1/1 Running 0 kube-system kube-controller-manager-k8s-cp0 1/1 Running 0 kube-system kube-proxy-5rbp4 1/1 Running 0 kube-system kube-proxy-kr95n 1/1 Running 0 kube-system kube-scheduler-k8s-cp0 1/1 Running 0 kube-system nginx-proxy-k8s-worker0 1/1 Running 0
Desvincular un clúster de carga de trabajo
- En el clúster central, elimine el kubemanager asociado.
user@central:~/contrail$ kubectl delete kubemanager -n contrail <kubemanager-name>
- En el clúster de carga de trabajo distribuido que va a eliminar, elimine los vRouters.
user@workload:~/contrail$kubectl delete vrouter -n contrail contrail-vrouter-masters
user@workload:~/contrail$ kubectl delete vrouter -n contrail contrail-vrouter-nodes
- En el clúster central, elimine los espacios de nombres del clúster de carga de trabajo distribuido.
Enumera los espacios de nombres y elimine todos los espacios de nombres asociados con el clúster de carga de trabajo distribuida.
user@central:~/contrail$ kubectl get ns
user@central:~/contrail$ kubectl delete ns <kubemanager-name>-<workload-cluster-name>-<namespace>
- En el clúster central, elimine el secreto asociado con el clúster de carga de trabajo que va a separar.
kubectl delete secret <secret-name> -n contrail
Desinstalar Contrail
- Siga los pasos de Separar un clúster de carga de trabajo para desvincular el clúster de carga de trabajo que desea eliminar.
- Desinstale Contrail en el clúster de cargas de trabajo.
- Siga los pasos de Desinstalar Contrail para desinstalar Contrail en el clúster de carga de trabajo.
Ignore cualquier error de NotFound porque esos recursos ya se eliminaron.
- En el clúster de carga de trabajo, verifique que todos los recursos relacionados con el espacio de nombres de red pod predeterminado del clúster de carga de trabajo distribuido hayan desaparecido y verifique que todos los recursos relacionados con el espacio de nombres de Contrail hayan desaparecido.
user@workload:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <default pod network namespace>
user@workload:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail
Si todo lo que desea hacer es desinstalar Contrail del clúster de carga de trabajo, entonces listo. Si también desea desinstalar Contrail del clúster central, continúe con el paso siguiente.
- Siga los pasos de Desinstalar Contrail para desinstalar Contrail en el clúster de carga de trabajo.
- Desinstale Contrail en el clúster central.
- Siga los pasos de Desinstalar Contrail para desinstalar Contrail en el clúster central.
Ignore cualquier error de NotFound porque esos recursos ya se eliminaron.
- En el clúster central, compruebe que se eliminan todos los recursos relacionados con los espacios de nombres contrail, contrail-system y contrail-deploy.
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail-system
user@central:~/contrail$ kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n contrail-deploy
- Siga los pasos de Desinstalar Contrail para desinstalar Contrail en el clúster central.