Clusternet: ¡una herramienta de control nativo de nube multiclúster entre nubes de código abierto!

autor

Xu Di, el iniciador del proyecto Clusternet y experto en tecnología de contenedores Tencent Cloud.

Resumen

Clusternet (Cluster Internet) es una plataforma de control y gestión nativa de la nube de código abierto que combina la gestión de múltiples clústeres y la orquestación de aplicaciones entre clústeres. Resuelve el problema de la gestión de clústeres en nubes, regiones y zonas de disponibilidad. En la etapa de planificación del proyecto, está diseñado para escenarios futuros como la nube híbrida, la nube distribuida y la computación perimetral, y admite el acceso y la gestión de clústeres masivos, la distribución de aplicaciones y la gobernanza del tráfico (en desarrollo).

Cómo registrar un clúster

Cuando se diseñó Clusternet, adopta por completo la arquitectura complementaria , que admite la implementación y la instalación con un solo clic. Para conocer más métodos de instalación de cada módulo, consulte la documentación oficial .

A la hora de registrar un clúster también es muy sencillo, al instalar el Helm Chart de clusternet-agent se puede completar el registro de un clúster, ver el siguiente comando.

helm repo add clusternet https://clusternet.github.io/charts
helm install clusternet-agent -n clusternet-system --create-namespace \
  --set parentURL=PLEASE-CHANGE-ME \
  --set registrationToken=PLEASE-CHANGE-ME \
  clusternet/clusternet-agent

Aquí, debe reemplazar PLEASE-CHANGE-ME con una configuración razonable para el clúster correspondiente.

  • parentURL es la dirección del servidor ap del clúster de control
  • registrationToken es un token que puede acceder al clúster de administración, que puede ser un token de arranque o un token de ServiceAccount .

La función principal de estos tokens es solo registrar el clúster, por lo que los permisos se pueden configurar en un nivel muy bajo. A continuación se muestra la configuración de permisos predeterminada.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: clusternet:system:bootstrapping
rules:
  - apiGroups:
      - "clusters.clusternet.io"
    resources:
      - clusterregistrationrequests
    verbs:
      - get
      - create

Todos los tokens de arranque cuyo grupo es system:bootstrappers:clusternet:register-cluster-token automáticamente tienen permiso para registrar el clúster. Para ver un ejemplo de cómo crear el token de arranque, puede consultar el siguiente ejemplo,

$ # 如下命令会创建一个 bootstrap token "07401b.f395accd246ae52d"
$ # 这里你可以更改 yaml 文件,创建出你设定的值
$ kubectl apply -f manifests/samples/cluster_bootstrap_token.yaml

Si usa el token de ServiceAccount para el registro, como k3s no admite el uso del token de arranque, puede consultar el siguiente ejemplo para crear el token de ServiceAccount para el registro del clúster.

$ # 你可以更改如下的 yaml 文件,再进行 apply 操作
$ # 如下命令可以创建一个 ServiceAccount token
$ kubectl apply -f manifests/samples/cluster_serviceaccount_token.yaml
$ # 通过如下的命令,即可拿到对应的 ServiceAccount token
$ kubectl get secret -n clusternet-system -o=jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name=="cluster-bootstrap-use")].data.token}' | base64 --decode; echo

Después de instalar el agente de clusternet , registrará automáticamente el clúster en el clúster de control especificado por parentURL y utilizará el objeto ClusterRegistrationRequest para identificarlo. Cada clúster tiene un ID de clúster único que identifica el clúster. Reiniciar o reconstruir el clusternet-agent no cambia la ID del clúster actualmente registrado.

Luego puede ejecutar el siguiente comando para ver el clúster registrado actualmente,

$ # clsrr is an alias for ClusterRegistrationRequest 
$ kubectl get clsrr
NAME                                              CLUSTER ID                             STATUS     AGE
clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118   dc91021d-2361-4f6d-a404-7c33b9e01118   Approved   3d6h 
$ kubectl get clsrr clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118 -o yaml 
apiVersion: clusters.clusternet.io/v1beta1 
kind: ClusterRegistrationRequest 
metadata: 
  labels: 
    clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118 
    clusters.clusternet.io/cluster-name: clusternet-cluster-dzqkw
    clusters.clusternet.io/registered-by: clusternet-agent
    name: clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118 
spec: 
  clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  clusterName: clusternet-cluster-dzqkw
  clusterType: EdgeCluster
status:
  caCertificate: REDACTED
  dedicatedNamespace: clusternet-dhxfs
  managedClusterName: clusternet-cluster-dzqkw
  result: Approved
  token: REDACTED

Una vez que status.result pasa a ser Aprobado, significa que el clúster se ha registrado correctamente. En este momento, clusternet-hub creará un espacio de nombres dedicado para el clúster. Por ejemplo, en el ejemplo anterior, se asigna un espacio de nombres denominado clusternet-dhxfs y un objeto denominado clusternet-cluster-dzqkw ManagedCluster está asociado con el clúster. todo el estado del clúster se informará a este objeto.

apiVersion: clusters.clusternet.io/v1beta1
kind: ManagedCluster
metadata:
  creationTimestamp: "2022-01-20T09:20:30Z"
  generation: 1
  labels:
    clusternet.io/created-by: clusternet-agent
    clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
    clusters.clusternet.io/cluster-name: cls-bx2ro4ak
  name: clusternet-cluster-dzqkw
  namespace: clusternet-dhxfs
  resourceVersion: "545410287"
  selfLink: /apis/clusters.clusternet.io/v1beta1/namespaces/clusternet-dhxfs/managedclusters/clusternet-cluster-dzqkw
  uid: 1e6a1003-8309-40c5-8969-c15cdf274a5a
spec:
  clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  clusterType: EdgeCluster
  syncMode: Dual
status:
  allocatable:
    cpu: 2820m
    memory: 8657308Ki
  apiserverURL: https://10.8.0.1:443
  appPusher: true
  capacity:
    cpu: "6"
    memory: 12094876Ki
  conditions:
  - lastTransitionTime: "2022-01-21T03:33:59Z"
    message: managed cluster is ready.
    reason: ManagedClusterReady
    status: "True"
    type: Ready
  healthz: true
  heartbeatFrequencySeconds: 180
  k8sVersion: v1.21.5
  lastObservedTime: "2022-01-21T03:33:59Z"
  livez: true
  nodeStatistics:
    readyNodes: 3
  platform: linux/amd64
  readyz: true
  serviceCIDR: 10.4.0.0/14
  useSocket: true

Una vez registrado el clúster, se puede administrar y distribuir. Presentaremos cómo hacer la distribución de aplicaciones en el próximo artículo.

Cómo acceder a los subclústeres

A través de Clusternet, puede administrar y controlar aún más el clúster registrado con éxito. En algunos escenarios de operación y mantenimiento, puede ser necesario realizar operaciones separadas adicionales en un subclúster, como ver registros, eventos, estado de nodos, etc.

El subclúster de destino que debe gestionarse puede:

  • Ejecutándose en nodos de borde o clústeres de borde, las condiciones de la red son deficientes y la dirección de la red externa no está expuesta
  • En una VPC que se ejecuta en la nube, para garantizar la seguridad, no hay conexión de red ni mapeo de puertos.
  • Ejecución en una sala de máquinas de construcción propia
  • otras situaciones

Para brindar una experiencia de administración consistente, Clusternet proporciona una solución general para acceder a los subclústeres, es decir, el clúster principal se puede usar como un proxy de acceso para reenviar solicitudes al subclúster, pero aún se puede usar RBAC dinámico. El RBAC utilizado por Clusternet aquí es el propio RBAC del subclúster, por lo que la información confidencial utilizada en estos RBAC no necesita conservarse en el clúster principal, de modo que se pueda lograr un acceso dinámico real. El enlace de acceso detallado se muestra en la siguiente figura.

Para mayor comodidad, Clusternet también proporciona soporte de línea de comandos, que se puede experimentar a través del complemento kubectl-clusternet.

$ # 安装 kubectl-clusternet 插件
$ kubectl krew install clusternet
$ kubectl get mcls -A 
NAMESPACE          NAME       CLUSTER ID                             SYNC MODE   KUBERNETES                   READYZ   AGE 
clusternet-ml6wg   aws-cd     6c085c18-3baf-443c-abff-459751f5e3d3   Dual        v1.18.4                      true     4d6h 
clusternet-z5vqv   azure-cd   7dc5966e-6736-48dd-9a82-2e4d74d30443   Dual        v1.20.4                      true     43h 
$ # 通过指定 Cluster ID,以及对应 Cluster 的 kubeconfig 文件 (这里的 apiserver 地址可以是内网地址)
$ kubectl clusternet --cluster-id=7dc5966e-6736-48dd-9a82-2e4d74d30443 --child-kubeconfig=./azure-cd-kubeconfig get ns 
NAME                STATUS   AGE
clusternet-system   Active   4d20h 
default             Active   24d 
kube-node-lease     Active   24d 
kube-public         Active   24d 
kube-system         Active   24d 
test-nginx          Active   11d 
test-systemd        Active   11d

Para obtener más detalles de uso, escanee el código QR a continuación para obtener más información.

Únete a nosotros

Preste atención al proyecto Clusternet https://github.com/clusternet/clusternet, dé me gusta y soporte, y dé la bienvenida a varias formas de discusión y cooperación.

sobre nosotros

Para más casos y conocimientos sobre la nube nativa, puede prestar atención a la cuenta pública del mismo nombre [Tencent Cloud Native]~

Bienestar:

① Responda al [Manual] en el fondo de la cuenta oficial, puede obtener el "Manual de hoja de ruta nativa de Tencent Cloud" y las "Prácticas recomendadas nativas de Tencent Cloud" ~

②La cuenta oficial responderá a [series] en segundo plano, y puede obtener "15 series de más de 100 colecciones de productos secos originales nativas en la nube súper prácticas", incluida la reducción de costos y la mejora de la eficiencia de Kubernetes, las prácticas de optimización del rendimiento de K8, las mejores prácticas y otros serie.

③Si responde al [Informe técnico] en el fondo de la cuenta oficial, puede obtener el "Informe técnico de Tencent Cloud Container Security" y "La fuente de la reducción de costos: Informe técnico de gestión de costos nativos en la nube v1.0"

③ Responda a [Introducción a la velocidad de la luz] en el fondo de la cuenta oficial, puede obtener un tutorial de esencia de 50,000 palabras de los expertos de Tencent Cloud, Prometheus y Grafana de la velocidad de la luz.

[Tencent Cloud Native] Nuevos productos de Yunshuo, nuevas técnicas de Yunyan, nuevas actividades de Yunyou e información sobre la apreciación de la nube, escanee el código para seguir la cuenta pública del mismo nombre y obtenga más productos secos a tiempo. !

{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4534936/blog/5407629
Recomendado
Clasificación