avinetworks.avicontroller_gke
avinetworks.avicontroller_gke
Ansible-Rolle, die einen Avi Controller auf Google GKE bereitstellt. Wir werden nur einen Controller-Cluster mit entweder 1 oder 3 Controllern pro Namespace bereitstellen.
Warnung:
- Die Rolle überschreibt jede vorhandene Konfiguration (wenn ein Wert hier anders ist als in der k8s-Konfiguration, wird er überschrieben)
Anforderungen
- GKE-Cluster
- GKE-Knotenpool mit Labels, wenn Affinität oder nodeSelector verwendet wird
Benötigte OS-Pakete
- python >= 2.7
Benötigte Python-Bibliotheken
- openshift >= 0.6
- PyYAML >= 3.11
- requests >= 2.18.4
- google-auth >= 1.3.0
Benötigte Umgebungsvariablen
Beim Einsatz von GKE und K8s haben wir festgestellt, dass einige Variablen auf der Umgebungsstufe definiert werden müssen, um die richtige Authentifizierung für GKE zu gewährleisten.
K8S_AUTH_KUBECONFIG=/standort/von/.kubeconfig
# GOOGLE_APPLICATION_CREDENTIALS wird verwendet, wenn versucht wird, sich bei K8s zu authentifizieren. Ich konnte keinen alternativen Weg finden, dies bereitzustellen und es funktioniert.
GOOGLE_APPLICATION_CREDENTIALS=/standort/von/service_account_file.json
Erforderliche Schritte
Sie müssen Ihren aktuellen Cluster über
gcloud
einstellen, um die richtigen .kube/config-Daten zu konfigurieren. Führen Sie dazu den folgenden Befehl ausgcloud container clusters get-credentials <cluster-name> --region=<region> --zone=<zone>
Überprüfen Sie, ob Sie sich im richtigen Kontext befinden, indem Sie eingeben:
kubectl config current-context
Es sollte etwas in diesem Format zurückgeben:
gke_{{ gke_project }}_{{ region }}_{{ cluster_name }}
Rollenvariablen
Eine Beschreibung der einstellbaren Variablen für diese Rolle sollte hier stehen, einschließlich aller Variablen, die in defaults/main.yml, vars/main.yml enthalten sind und alle Variablen, die über Parameter an die Rolle gesetzt werden können/sollen. Alle Variablen, die aus anderen Rollen oder dem globalen Bereich (z. B. hostvars, group vars usw.) gelesen werden, sollten hier ebenfalls erwähnt werden.
Variablen
Variable | Erforderlich | Standardwert | Kommentare |
---|---|---|---|
avi_namespace |
Ja | Namespace, in dem der Controller erstellt werden soll | |
avi_controller_state |
Nein | present |
Legt den Zustand der Bereitstellung fest. z. B. present , absent , suspended , resume |
avi_force_state |
Nein | false |
Ermöglicht das Erzwingen des Zustands der Bereitstellung. Überprüfungen werden übersprungen. true , false |
avi_controller_count |
Nein | 1 |
Anzahl der zu erstellenden Controller. z. B. 1 oder 3 |
avi_controller_prefix |
Nein | avi-controller |
Präfix, das der Name des Controllers und der Assets haben soll |
avi_controller_username |
Ja (abwesend) | admin |
Nur erforderlich, wenn der Zustand abwesend ist, zur Überprüfung auf keine SE oder Virtuellen Dienste |
avi_controller_password |
Ja (abwesend) | None |
Nur erforderlich, wenn der Zustand abwesend ist, zur Überprüfung auf keine SE oder Virtuellen Dienste |
avi_gcp_region |
Nein | GCP-Region, in der wir den Controller bereitstellen möchten | |
avi_gcp_project |
Nein | GCP-Projekt, in dem der Controller bereitgestellt werden soll | |
avi_gcp_auth_kind |
Nein | Art der Authentifizierung für GCP, die verwendet werden soll | |
avi_gcp_service_account_file |
Nein | Speicherort der service_account_file, wenn ein Dienstkonto verwendet wird | |
avi_k8s_auth_kubeconfig |
Nein | {{ ansible_env.HOME }}/.kube/config |
Speicherort der kubeconfig, die wir verwenden werden |
avi_controller_storage_class_name |
Nein | {{ avi_controller_prefix }}-regionalpd-storageclass-ssd |
Name der Storage-Class, die von der Controller-Disk verwendet werden soll |
avi_controller_req_cpu |
Nein | {{ avi_controller_cpu_count // 2 }} |
Die anfänglich angeforderte CPU von K8s, um den Controller auszuführen. |
avi_controller_req_mem |
Nein | {{ avi_controller_memory_size // 2 }} |
Der anfänglich angeforderte Speicher von K8s, um den Controller auszuführen. |
avi_controller_cpu_count |
Ja | 8 |
Anzahl der CPU für den Controller |
avi_controller_memory_size |
Ja | 27 |
Größe des Speichers für den Controller in GB |
avi_controller_disk_size |
Nein | 64 |
Größe der SSD-Disk für den Controller in GB |
avi_controller_version |
Nein | 18.2.3-9063-20190501.224326 |
Version von Avi, die im Pod verwendet werden soll |
avi_controller_container_image |
Nein | avinetworks/controller:{{ avi_controller_version }} |
Das Bild, das verwendet wird, um den Controller-Pod zu erstellen |
avi_controller_namespace_labels |
Nein | None |
K8s-Labels, die Sie dem Namespace anhängen möchten |
avi_gcp_compute_addresses |
Nein | Auto-generiert |
Array von Compute-Adressen, die von der Rolle für Controller erstellt wurden |
avi_controller_affinity |
Nein | None |
Legt die K8s-Affinität des Controller-Pods fest |
avi_controller_nodeselector |
Nein | None |
Legt den nodeSelector für den Controller-Pod fest |
avi_setup_yaml |
Nein | None |
Wird als setup.json an den Controller über K8s ConfigMap bereitgestellt |
Fortgeschrittene Variablen
Diese Werte sind nicht erforderlich und sind fortgeschritten. Sie sind nicht dafür gedacht, aktualisiert zu werden, es sei denn, sie sind für spezifische Überschreibungen erforderlich.
Standardvariablen
Variable | Kommentare |
---|---|
avi_controller_k8s_namespace |
Namespace-Definition |
avi_controller_k8s_external_service |
Stellt sicher, dass der externe Dienst existiert |
avi_controller_k8s_service |
Stellt sicher, dass der Dienst existiert |
avi_controller_k8s_statefulset |
Stellt sicher, dass der StatefulSet existiert |
avi_controller_k8s_storage_class |
Stellt sicher, dass die StorageClass existiert |
Abhängigkeiten
Eine Liste anderer Rollen, die auf Galaxy gehostet werden, sollte hier stehen, sowie Details bezüglich Parameter, die für andere Rollen gesetzt werden müssen, oder Variablen, die aus anderen Rollen verwendet werden.
Nutzung
Bitte beachten Sie, dass beim Fortsetzen einer Bereitstellung kein Unterschied zu "present" besteht, wenn Sie fortfahren. Bitte verwenden Sie deployment_state: present
, wenn Sie eine angehaltene Bereitstellung fortsetzen.
Beispiel-Playbook
Erstellen eines Controller-Clusters
Es ist immer hilfreich, ein Beispiel dafür einzuschließen, wie man Ihre Rolle nutzt (zum Beispiel mit Variablen, die als Parameter übergeben werden):
- hosts: servers
roles:
- role: avinetworks.avicontroller_gke
avi_controller_count: 3
avi_controller_version: 18.2.3-9063-20190501.224326
avi_controller_prefix: deployment-address
avi_gcp_project: my-project
avi_gcp_region: us-west1
avi_gcp_auth_kind: serviceaccount
avi_gcp_service_account_file: ~/service_account_file.json
avi_namespace: 26abc3b9d1fc4cfc8f42ad86d9606fb9
avi_controller_disk_size: 64
avi_controller_container_image: "gcr.io/{{ avi_gcp_project }}/controller:{{ avi_controller_version }}"
avi_controller_storage_class_name: regionalpd-storageclass-ssd
avi_controller_affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node_label
operator: In
values:
- label_value
- hosts: servers
roles:
- role: avinetworks.avicontroller_gke
avi_controller_count: 3
avi_controller_version: 18.2.3-9063-20190501.224326
avi_controller_prefix: deployment-address
avi_gcp_project: my-project
avi_gcp_region: us-west1
avi_gcp_auth_kind: serviceaccount
avi_gcp_service_account_file: ~/service_account_file.json
avi_namespace: 26abc3b9d1fc4cfc8f42ad86d9606fb9
avi_controller_disk_size: 64
avi_controller_container_image: "gcr.io/{{ avi_gcp_project }}/controller:{{ avi_controller_version }}"
avi_controller_storage_class_name: regionalpd-storageclass-ssd
avi_controller_nodeselector:
node_label: label_value
Löschen eines Controller-Clusters
Wenn Sie einen Controller-Cluster löschen, überprüfen wir, ob Sie keine aktuellen VS oder Service Engines haben, damit Sie keine verwaisten Service Engines erhalten.
- hosts: servers
roles:
- role: avinetworks.avicontroller_gke
avi_controller_state: absent
avi_controller_count: 3
avi_controller_version: 18.2.3-9063-20190501.224326
avi_controller_prefix: deployment-address
avi_gcp_project: my-project
avi_gcp_region: us-west1
avi_gcp_auth_kind: serviceaccount
avi_gcp_service_account_file: ~/service_account_file.json
avi_namespace: 26abc3b9d1fc4cfc8f42ad86d9606fb9
avi_controller_disk_size: 64
avi_controller_container_image: "gcr.io/{{ avi_gcp_project }}/controller:{{ avi_controller_version }}"
avi_controller_storage_class_name: regionalpd-storageclass-ssd
avi_controller_nodeselector:
node_label: label_value
Lizenz
Apache 2.0
Autorinformation
Eric Anderson
Ansible role to deploy the Avi Controller on GKE
ansible-galaxy install avinetworks.avicontroller_gke