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. !