Stellen Sie GitOps mit Argo CD und OCI Kubernetes Engine bereit
GitOps ist eine Variante von CI/CD, die Git-Repositorys als Single Source of Truth verwendet, um Infrastruktur als Code bereitzustellen. Es empfiehlt, die gesamte Anwendung, aus dem Quellcode und der Konfiguration der Anwendung, deklarativ in Git-Repositorys zu platzieren. Dies bietet eine konsistente Möglichkeit, Änderungen an der Konfiguration einer Anwendung bereitzustellen, und bietet Versionskontrolle, indem bekannte Git-Workflows wie Pull-Anforderungen und Zusammenführungsanforderungen verwendet werden.
- Ein Standardworkflow für die Anwendungsentwicklung.
- Erhöhte Sicherheit bei der Festlegung von Anwendungsanforderungen im Voraus.
- Verbesserte Zuverlässigkeit durch Sichtbarkeit und Versionskontrolle über Git.
- Konsistenz in jedem Cluster, jeder Cloud und jeder On-Premise-Umgebung.
Es empfiehlt sich, separate Git-Repositorys für Anwendungsquellcode und -konfiguration zu verwenden, da Konfigurationsänderungen normalerweise keine Änderungen am Anwendungsquellcode erfordern. Mit verschiedenen Repositorys können Sie die Anwendungskonfiguration ändern, ohne einen CI-Build auszulösen.
- Kubernetes-Manifeste
- Helm-Charts
- Manifeste anpassen.
Architektur
Sie können auf die Argo CD-Anwendung über die Web-UI oder die Argo CD-Befehlszeilenschnittstelle zugreifen. Die Konnektivität zum Argo-CD-Tool wird von einem Load-Balancer-Service bereitgestellt, der im OCI Kubernetes Engine-Cluster bereitgestellt wird. Nachdem die Argo-CD bereitgestellt wurde, konfigurieren Sie sie für die Synchronisierung mit Git-Repositorys, die intern oder extern mit Oracle Cloud Infrastructure gehostet werden, sofern das OCI Kubernetes Engine-Cluster über IP-Konnektivität zu den erforderlichen Ports und den Zugangsdaten für die Git-Repositorys verfügt. Nachdem Argo CD mit den Repositorys synchronisiert wurde, werden alle Aktualisierungen der im Repository vorgenommenen Anwendungskonfiguration auf das OCI Kubernetes Engine-Cluster angewendet. Wenn Änderungen an der Anwendung außerhalb des Git-Repositorys vorgenommen werden, betrachtet Argo CD die Anwendung als nicht synchron und setzt die Änderungen zurück, sodass sie dem gewünschten Status des Git-Repositorys entspricht.
Das folgende Diagramm veranschaulicht diese Referenzarchitektur.
Beschreibung der Abbildung argocd.png
- Tenancy
Oracle Autonomous Transaction Processing ist ein selbststeuernder, selbstsichernder und selbstreparierender Datenbankservice, der für Transaktionsverarbeitungs-Workloads optimiert ist. Sie müssen keine Hardware konfigurieren oder verwalten oder Software installieren. Oracle Cloud Infrastructure übernimmt das Erstellen der Datenbank sowie Backup, Patching, Upgrade und Optimierung der Datenbank.
- Region
Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der mindestens ein Data Center enthält, das als Availability-Domain bezeichnet wird. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).
- Compartment
Compartments sind regionsübergreifende logische Partitionen innerhalb eines Oracle Cloud Infrastructure-Mandanten. Mit Compartments können Sie Ihre Ressourcen in Oracle Cloud organisieren, den Zugriff auf die Ressourcen kontrollieren und Nutzungs-Quotas festlegen. Um den Zugriff auf die Ressourcen in einem bestimmten Compartment zu kontrollieren, definieren Sie Policys, mit denen angegeben wird, wer auf die Ressourcen zugreifen kann und welche Aktionen sie ausführen können.
- Availability-Domains
Availability-Domains sind eigenständige, unabhängige Data Center innerhalb einer Region. Die physischen Ressourcen in jeder Availability-Domain sind von den Ressourcen in den anderen Availability-Domains isoliert, was eine Fehlertoleranz sicherstellt. Availability-Domains haben keine gemeinsame Infrastruktur wie Stromversorgung oder Kühlung oder das interne Availability-Domainnetzwerk. Daher ist es unwahrscheinlich, dass ein Fehler in einer Availability-Domain Auswirkungen auf die anderen Availability-Domains in der Region hat.
- Faultdomains
Eine Faultdomain ist eine Gruppierung aus Hardware und Infrastruktur innerhalb einer Availability-Domain. Jede Availability-Domain umfasst drei Faultdomains mit unabhängiger Stromversorgung und Hardware. Wenn Sie Ressourcen auf mehrere Faultdomains verteilen, können Ihre Anwendungen physische Serverausfälle, Systemwartungen und Stromausfälle innerhalb einer Faultdomain tolerieren.
- Virtuelles Cloud-Netzwerk (VCN) und Subnetze
Ein VCN ist ein anpassbares, softwaredefiniertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten können. Wie herkömmliche Data Center-Netzwerke erhalten Sie mit VCNs vollständige Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke aufweisen, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain beschränken. Jedes Subnetz besteht aus einem Bereich zusammenhängender Adressen, die sich nicht mit anderen Subnetzen im VCN überschneiden. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.
- Load Balancer
Der Oracle Cloud Infrastructure Load Balancing-Service ermöglicht automatisierte Trafficverteilung von einem einzelnen Einstiegspunkt auf mehrere Server im Backend. Der Load Balancer bietet Zugriff auf verschiedene Anwendungen.
- Code-Repository
Im DevOps-Service können Sie Ihre eigenen privaten Code-Repositorys erstellen oder eine Verbindung zu externen Code-Repositorys wie GitHub, GitLab und Bitbucket Cloud herstellen.
- Sicherheitsliste
Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, der im Subnetz und aus dem Subnetz zugelassen werden muss.
- NAT-Gateway
Mit dem NAT-Gateway können private Ressourcen in einem VCN auf Hosts im Internet zugreifen, ohne diese Ressourcen für eingehende Internetverbindungen verfügbar zu machen.
- Servicegateway
Das Servicegateway ermöglicht den Zugriff von einem VCN auf andere Services, wie Oracle Cloud Infrastructure Object Storage. Der Traffic vom VCN zu dem Oracle-Service durchläuft das Oracle-Fabric, ohne jemals über das Internet geleitet zu werden.
- Cloud Guard
Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in Oracle Cloud Infrastructure überwachen und verwalten. Cloud Guard verwendet Detektorrezepte, die Sie definieren können, um Ihre Ressourcen auf Sicherheitsschwächen zu untersuchen und Operatoren und Benutzer auf riskante Aktivitäten zu überwachen. Wenn eine falsche Konfiguration oder unsichere Aktivität erkannt wird, empfiehlt Cloud Guard Korrekturmaßnahmen und unterstützt Sie bei der Ausführung dieser Aktionen basierend auf Responder-Rezepten, die Sie definieren können.
- Sicherheitszone
Sicherheitszonen stellen die Best Practices für die Sicherheit von Oracle von Anfang an sicher, indem sie Policys wie die Verschlüsselung von Daten durchsetzen und den öffentlichen Zugriff auf Netzwerke für ein gesamtes Compartment verhindern. Eine Sicherheitszone ist mit einem Compartment mit demselben Namen verknüpft und umfasst Sicherheitszonen-Policys oder ein "Rezept", das für das Compartment und die zugehörigen Sub-Compartments gilt. Sie können kein Standard Compartment in ein Sicherheitszonen-Compartment hinzufügen oder verschieben.
- Object Storage
Mit Object Storage können Sie schnell auf große Mengen an strukturierten und unstrukturierten Daten eines beliebigen Inhaltstyps zugreifen, einschließlich Datenbankbackups, analytischen Daten und umfangreichen Inhalten wie Bildern und Videos. Sie können Daten sicher und geschützt speichern und dann direkt aus dem Internet oder aus der Cloud-Plattform abrufen. Sie können den Speicher nahtlos skalieren, ohne dass die Performance oder Servicezuverlässigkeit beeinträchtigt wird. Verwenden Sie Standardspeicher für "guten" Speicher, auf den Sie schnell, sofort und häufig zugreifen müssen. Verwenden Sie Archivspeicher für "Cold Storage", den Sie über lange Zeiträume beibehalten und auf den Sie nur selten zugreifen.
- FastConnect
Mit Oracle Cloud Infrastructure FastConnect können Sie ganz einfach eine dedizierte, private Verbindung zwischen Ihrem Data Center und Oracle Cloud Infrastructure erstellen. FastConnect bietet Optionen mit höherer Bandbreite und ein zuverlässigeres Netzwerk als bei internetbasierten Verbindungen.
- Lokales Peering-Gateway (LPG)
Mit einem LPG können Sie ein VCN mit einem anderen VCN in derselben Region verknüpfen. Peering bedeutet, dass die VCNs über private IP-Adressen kommunizieren, ohne dass der Traffic über das Internet oder das On-Premise-Netzwerk geleitet wird.
- Autonome Datenbank
Autonome Oracle Cloud Infrastructure-Datenbanken sind vollständig verwaltete, vorkonfigurierte Datenbankumgebungen, die Sie für Transaktionsverarbeitungs- und Data Warehousing-Workloads verwenden können. Sie müssen keine Hardware konfigurieren oder verwalten oder Software installieren. Oracle Cloud Infrastructure übernimmt das Erstellen der Datenbank sowie Backup, Patching, Upgrade und Optimierung der Datenbank.
- Autonomous Data Warehouse
Oracle Autonomous Data Warehouse ist ein selbststeuernder, selbstsichernder und selbstreparierender Datenbankservice, der für Data Warehousing-Workloads optimiert ist. Sie müssen keine Hardware konfigurieren oder verwalten oder Software installieren. Oracle Cloud Infrastructure übernimmt das Erstellen der Datenbank sowie Backup, Patching, Upgrade und Optimierung der Datenbank.
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processing ist ein selbststeuernder, selbstsichernder und selbstreparierender Datenbankservice, der für Transaktionsverarbeitungs-Workloads optimiert ist. Sie müssen keine Hardware konfigurieren oder verwalten oder Software installieren. Oracle Cloud Infrastructure übernimmt das Erstellen der Datenbank sowie Backup, Patching, Upgrade und Optimierung der Datenbank.
- Exadata-DB-System
Mit Exadata Cloud Service können Sie die Leistungsfähigkeit von Exadata in der Cloud nutzen. Sie können flexible X8M-Systeme bereitstellen, mit denen Sie dem System Datenbank-Compute-Server und Speicherserver je nach Bedarf hinzufügen können. X8M-Systeme bieten RoCE-(RDMA over Converged Ethernet-)Networking für Module mit hoher Bandbreite und geringer Latenz, persistente Speichermodule (PMEM) und intelligente Exadata-Software. Sie können X8M-Systeme mit einer Ausprägung bereitstellen, die einem Quarter-Rack-System X8 entspricht. Anschließend können Sie Datenbank- und Speicherserver nach dem Provisioning jederzeit hinzufügen.
Empfehlungen
- VCN
Wenn Sie ein VCN erstellen, bestimmen Sie die Anzahl der erforderlichen CIDR-Blöcke und die Größe jedes Blocks basierend auf der Anzahl der Ressourcen, die Sie an Subnetze im VCN anhängen möchten. Verwenden Sie CIDR-Blöcke, die sich innerhalb des privaten IP-Standardadressraums befinden.
Wählen Sie CIDR-Blöcke aus, die sich nicht mit einem anderen Netzwerk (in Oracle Cloud Infrastructure, Ihrem On-Premise-Data Center oder einem anderen Cloud-Provider) überschneiden, für das Sie private Verbindungen einrichten möchten.
Nachdem Sie ein VCN erstellt haben, können Sie die CIDR-Blöcke ändern, hinzufügen und entfernen.
Berücksichtigen Sie beim Entwerfen der Subnetze Ihren Trafficfluss und Ihre Sicherheitsanforderungen. Hängen Sie alle Ressourcen innerhalb einer bestimmten Ebene oder Rolle an dasselbe Subnetz an, das als Sicherheitsgrenze dienen kann.
Verwenden Sie regionale Subnetze.
- Sicherheit
Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in Oracle Cloud Infrastructure proaktiv überwachen und verwalten. Cloud Guard verwendet Detektorrezepte, die Sie definieren können, um Ihre Ressourcen auf Sicherheitsschwächen zu untersuchen und Operatoren und Benutzer auf riskante Aktivitäten zu überwachen. Wenn eine falsche Konfiguration oder unsichere Aktivität erkannt wird, empfiehlt Cloud Guard Korrekturmaßnahmen und unterstützt Sie bei der Ausführung dieser Aktionen basierend auf Responder-Rezepten, die Sie definieren können.
Für Ressourcen, die maximale Sicherheit erfordern, empfiehlt Oracle die Verwendung von Sicherheitszonen. Eine Sicherheitszone ist ein Compartment, das mit einem von Oracle definierten Rezept von Sicherheits-Policys verknüpft ist, die auf Best Practices basieren. Beispiel: Die Ressourcen in einer Sicherheitszone dürfen nicht über das öffentliche Internet zugänglich sein und müssen mit vom Kunden verwalteten Schlüsseln verschlüsselt werden. Wenn Sie Ressourcen in einer Sicherheitszone erstellen und aktualisieren, validiert Oracle Cloud Infrastructure die Vorgänge anhand der Policys im Rezept der Sicherheitszone und lehnt Vorgänge ab, die gegen eine der Policys verstoßen.
- Cloud Guard
Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektorrezepte und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generieren und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Objektspeicher-Buckets ermitteln, deren Sichtbarkeit auf "Öffentlich" gesetzt ist.
Wenden Sie Cloud Guard auf Mandantenebene an, um den breitesten Geltungsbereich abzudecken und den Verwaltungsaufwand für die Verwaltung mehrerer Konfigurationen zu reduzieren.
Sie können auch das Feature "Verwaltete Liste" verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.
- Sicherheitszonen
Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektorrezepte und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generieren und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Objektspeicher-Buckets ermitteln, deren Sichtbarkeit auf "Öffentlich" gesetzt ist.
Wenden Sie Cloud Guard auf Mandantenebene an, um den breitesten Geltungsbereich abzudecken und den Verwaltungsaufwand für die Verwaltung mehrerer Konfigurationen zu reduzieren. Sie können auch das Feature "Verwaltete Liste" verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.
- Netzwerksicherheitsgruppen (NSGs)
Mit NSGs können Sie eine Gruppe von Ingress- und Egress-Regeln definieren, die für bestimmte VNICs gelten. Wir empfehlen die Verwendung von NSGs und nicht von Sicherheitslisten, da NSGs es Ihnen ermöglichen, die Subnetzarchitektur des VCN von den Sicherheitsanforderungen Ihrer Anwendung zu trennen.
Mit NSGs können Sie eine Gruppe von Ingress- und Egress-Regeln definieren, die für bestimmte VNICs gelten. Wir empfehlen die Verwendung von NSGs und nicht von Sicherheitslisten, da NSGs es Ihnen ermöglichen, die Subnetzarchitektur des VCN von den Sicherheitsanforderungen Ihrer Anwendung zu trennen.
- Load-Balancer-Bandbreite
Beim Erstellen des Load Balancers können Sie entweder eine vordefinierte Ausprägung auswählen, die eine feste Bandbreite bereitstellt, oder eine benutzerdefinierte (flexible) Ausprägung angeben, in der Sie einen Bandbreitenbereich festlegen und den Service die Bandbreite automatisch basierend auf Trafficmustern skalieren lassen. Bei beiden Verfahren können Sie die Ausprägung nach dem Erstellen des Load Balancers jederzeit ändern.
Stellen Sie
Der Terraform-Code für diese Referenzarchitektur ist als Beispielstack in Oracle Cloud Infrastructure Resource Manager verfügbar. Dieser Terraform-Beispielstack stellt eine OCI Data Flow-Anwendungsumgebung zusammen mit IAM-Policys und OCI Object Storage-Buckets bereit (nicht Speicher von Drittanbietern). Standardmäßig wird auch eine Python-Spark-Demoanwendung bereitgestellt. Sie können den Code auch von GitHub herunterladen und an Ihre spezifischen Anforderungen anpassen.
- Mit dem Beispielstack in Oracle Cloud Infrastructure Resource Manager bereitstellen:
- Klicken Sie auf
.
Wenn Sie noch nicht angemeldet sind, geben Sie den Mandanten und die Benutzerzugangsdaten ein.
- Wählen Sie die Region aus, in der der Stack bereitgestellt werden soll.
- Befolgen Sie die Anweisungen und Anweisungen zum Erstellen des Stacks auf dem Bildschirm.
- Nachdem Sie den Stack erstellt haben, klicken Sie auf Terraform-Aktionen, und wählen Sie Planen aus.
- Warten Sie, bis der Job abgeschlossen ist, und prüfen Sie den Plan.
Um Änderungen vorzunehmen, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Stack bearbeiten, und nehmen Sie die erforderlichen Änderungen vor. Führen Sie dann die Aktion Planen erneut aus.
- Wenn keine weiteren Änderungen erforderlich sind, kehren Sie zur Seite "Stackdetails" zurück, klicken Sie auf Terraform-Aktionen, und wählen Sie Anwenden aus.
- Klicken Sie auf
- Mit dem Terraform-Code in GitHub bereitstellen:
- Gehen Sie zu GitHub.
- Klonen Sie das Repository, oder laden Sie es auf Ihren lokalen Rechner herunter.
- Befolgen Sie die Anweisungen im Dokument
README
.
Neben dem auf GitHub bereitgestellten Terraform-Code zeigen die folgenden Code-Snippets, wie Sie eine Verbindung zu Amazon Web Services S3 herstellen und wie Sie die Daten abfragen.
- Um eine Verbindung zu S3 herzustellen und Daten abzufragen, müssen Sie die Packages
hadoop-aws.jar
undaws-java-sdk.jar
einschließen. Sie können diese Packages in der Dateipom.xml
wie folgt referenzieren:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency>
- Verwenden Sie Code wie den folgenden, um eine Verbindung zu Amazon Web Services S3 herzustellen. Sie müssen Ihren Zugriffsschlüssel und Ihren Secret Key angeben. Im folgenden Snippet werden diese Werte durch die Variablen
ACCESS
bzw.SECRET
dargestellt:SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate();
- Verwenden Sie Code wie den folgenden, um die Daten mit dem Speicherort S3 und dem angegebenen Tabellennamen abzufragen.
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");