En mi caso de uso, necesito ampliar un puesto de estado en la lógica específica y reducirla. No estoy seguro de que HPA lo ayude, ya que necesito crear exactamente una réplica cada vez, y luego levantar una notificación para escalarla, lo que significa: la aplicación se escalará, y luego, durante un tiempo específico, no habrá escala. Abajo (HPA continuará girando las vainas hasta que se cumplan sus condiciones, si se cumplen, reducirá la POD que es un problema).

Estoy desplegando usando el timón.

Debería:

  • ¿Haz que la API de K8S acceda a POD y cambie el recuento de réplicas?
  • Use el controlador de HELM para tal vez crear / actualizar un CRD que contenga el recuento de réplicas?
  • Ejecutar kubectl escala dentro de la vaina cuando se cumplen las condiciones?

¿Cuáles son las mejores prácticas aquí?

0
ArielB 13 jul. 2019 a las 12:38

1 respuesta

La mejor respuesta

Puede configurar una cronjob que desove a un POD cada (x minutos) y verifique, por ejemplo, usando CONFIGMAP Si necesita escalar hacia arriba / abajo del estadofulset .

Este Job usará el reposar API , con él puedes usar Docs de referencia de API a < un href = "https://kubernetes.io/docs/reference/geneated/kubernetes-api/v1.15/#replace-scale-replicationcontroller-v1-core" rel = "nofollow noreferrer"> Replace o { {X2}} su estado de estado.

Puedes hacerlo de la siguiente manera:

Usando el proxy kubectl

$ kubectl proxy --port=8080 & Consulte kubectl proxy para más detalles.

Luego puede explorar la API con curl, wget o un navegador, así:

$ curl http://localhost:8080/api/ La salida es similar a esta:

{
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "10.0.1.149:443"
    }
  ]
}

Sin proxy kubectl

Es posible evitar el uso del proxy kubectl pasando un token de autenticación directamente al servidor API, de esta manera:

Usando el enfoque grep/cut:

# Check all possible clusters, as you .KUBECONFIG may have multiple contexts:
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# Select name of cluster you want to interact with from above output:
export CLUSTER_NAME="some_server_name"

# Point to the API server refering the cluster name
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")

# Gets the token value
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 -d)

# Explore the API with TOKEN
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

El resultado es similar a esto:

{
  "kind": "APIVersions",
  "versions": [
    "v1"
  ],
  "serverAddressByClientCIDRs": [
    {
      "clientCIDR": "0.0.0.0/0",
      "serverAddress": "10.0.1.149:443"
    }
  ]
}

O con acceso programático a la API, Kubernetes es compatible oficialmente Ir y Python Bibliotecas de clientes.

Espero que esto le ayude un poco, si tiene más preguntas, por favor pregunte.

1
Crou 18 jul. 2019 a las 11:35