Home » 2021
Archiv für das Jahr: 2021
Kubernetes auf Azure Cloud (AWS)
Begriff | Erklärung |
---|---|
Kubernetes | Docker-Kontainer-Orchestration-Tool |
Kubernates Aufbau 1: Kubernates Cluster Kubernates Master Kubernates Nodes Kubernates Pods | Cluster: A group of nodes. Master: Controls the Cluster. API for management. Nodes: (Virtual) machines in a cluster. Node can host multiple pods. Pods: Logically related containers. Has one IP Address. Brought up and down by Master during scaling. Pods are replicated to multiple nodes for scaling reasons. |
Kubernetes Service | The interface to reach a Pod (an application). Pods are ephemeral. That is one reason why addressing Pods is not the right way. Instead: Services. |
Volumes | Disk systems that are external from the nodes. |
Kubernates Aubau 2: A) Control Plane (Master System) A1: kube-apiserver A2: etcd A3: kube-controller-manager A4: kube-scheduler A5: cloud-controller-manager B) Nodes B1: kubelet B2: k-proxy B3: pod | –> Udacity: 4. Kubernetes Components Kubernetes Components Kubernetes API |
AWS Auflaugfende Kosten | AWS Billing Dashboard https://aws.amazon.com/pricing/ |
AWS IAM Services IAM Group IAM Role IAM Policy IAM Dashboard | Identity & Access Services 12. Exercise – IAM 13. AWS – Create a custom IAM Role |
IAM policy simulator | |
Interfaces to AWS: – Web Interface – Command Line Tool (CLI) | 8. AWS CLI 9. AWS – Install and Configure CLI v2 10. AWS – Create S3 Bucket – Web con 11. AWS – Create S3 Bucket – CLI Benutze Git Bash für das CLI! AWS instructions to install/update AWS CLI Configuration basics Configuration and credential file settings Environment variables to configure the AWS CLI |
S3: Amazons Storage Cloud Service. S3 dashboard | 10. AWS – Create S3 Bucket – Web co 11. AWS – Create S3 Bucket – CLI |
EKS – Elastic Kubernetes Service | 14. EKS: Kubernetes on AWS 15. Exercise – Creating an EKS Cluster – W 16. Installing eksctl 17. Installing kubectl 18. Creating an EKS Cluster – CLI 19. EKS Cluster authentication 20. Exercise – Deploy a Flask Applica |
AWS – Amazon Cloud
Netzwerk Kommandos (Network Commands)
Referenzen:
https://kompendium.infotip.de/netzwerkbefehle-der-windows-kommandozeile.html
Bemerkung:
Ich habe für’s Ausprobieren Git Bash benutzt. (Allenfalls funktionieren nicht alle Kommandos auf DOS)
ipconfig (ifconfig) – Netz-Config des Local Hosts anzeigen
netstat – Anzeigen der aktiven Verbindungen
nslookup – Name Server lookup – DomainName zu IP-Addresse auflösen
$ nslookup a95-100-54-129.deploy.static.akamaitechnologies.com
Nicht autorisierende Antwort:
Server: fritz.box
Address: fd00::cece:1eff:fe34:979b
Name: a95-100-54-129.deploy.static.akamaitechnologies.com
Address: 95.100.54.129
Lenovo W540@ThinkPad-HPS MINGW64 ~
$ nslookup 95.100.54.129
Server: fritz.box
Address: fd00::cece:1eff:fe34:979b
Name: a95-100-54-129.deploy.static.akamaitechnologies.com
Address: 95.100.54.129
Lenovo W540@ThinkPad-HPS MINGW64 ~
In diesem Beispiel funktioniert der reverse lookup. Jedoch: Scheint so, dass reverse lookup oft blockiert wird. Z.B.:
$ nslookup netzone.ch
Nicht autorisierende Antwort:
Server: fritz.box
Address: fd00::cece:1eff:fe34:979b
Name: netzone.ch
Address: 212.243.197.27
Lenovo W540@ThinkPad-HPS MINGW64 ~
$ nslookup 212.243.197.27
*** 212.243.197.27 wurde von fritz.box nicht gefunden: Non-existent domain.
Server: fritz.box
Address: fd00::cece:1eff:fe34:979b
Lenovo W540@ThinkPad-HPS MINGW64 ~
tracert – Verbindungspfad auflisten (linux: traceroute)
curl – ‚Seiten‘ aus dem Internet laden
Mit Curl können z.B. Files von Web-Sites geladen werden. Curl beschränkt sich aber eigentlich nicht nur auf HTTP.
–> https://www.geeksforgeeks.org/curl-command-in-linux-with-examples/
wget – File download tool (nur Linux)
Docker Containers
References:
Dockerfile reference
docker build: command options and examples
docker run: command options and examples
Ablauf (Schnellversion)
docker pull postgres:latest | Docker image ‚postgres:latest‘ aus dem DockerHub holen |
oder: Selbst erstellen: | |
docker build -t test . | Docker image erstellen gemäss dem File Dockerfile, welches sich im current Directory befindet |
docker image ls | Docker Images auflisten (die Docker kennt) |
docker run — name myContainer7 – p 80:8080 test | Docker Image (als Container instantieren) laufen lassen |
docker ps | Laufende Container abfragen (–> ID auslesen) |
docker ps -a | Instantierte Container abfragen (–> ID auslesen) |
docker stop <containerId> | Container stoppen (bleibt instantiert) |
docker container rm <containerId> | Container löschen |
docker image rm <imageId> | Image löschen (aus Docker löschen) |
docker image help | Hilfefunktion für Docker Images aufrufen. |
Begriffe
Docker File: –> Ein File (Name wahrscheinlich immer ‚Dockerfile‚) welches innerhalb des SW Roots liegt und die die Erstellung des Docker Images definiert.
Docker Image –> Code, der falls instanziert, zu einem Docker Container wird.
DockerHub –> Repository für Docker Images.
Docker Registry
Einen Container beziehen und laufen lassen
Ein Docker Image aus dem DockerHub holen. (Im Beispiel ist es eine PostgresSQL DB als Docker image.)
docker pull postgres:latest
Kontrolle ob das Image nun lokal verfügbar ist:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres latest 317a302c7480 9 days ago 374MB
Das Image laufen lassen:
docker run --name psql -e POSTGRES_PASSWORD=password! -p 5433:5432 -d postgres:latest
Parameter:
-name : Sollte eigentlich der Name des Containers sein
-e : Environment. Hier werden dem Containers Environment-Parameter mitgegeben.
-p : <outerPort>:<InnerPort> bezeichnet die den Port, der von aussen angesprochen werden kann und den Port der damit innerhalb des Containers angesprochen wird.
-d : Das Docker-Image, das gestartet wird.
Die DB benutzen:
$ psql -U postgres -p 5433
Passwort für Benutzer postgres:
psql (13.3, Server 14.0 (Debian 14.0-1.pgdg110+1))
postgres=# \l
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
postgres=#
Ein Docker Image erstellen und ausführen
Unser Beispiel stellt einen Simplen Python/Flask Webserver als Docker-Image zur Verfügung.
1. Der Simple Python/Flask Webserver:
from flask import Flask
APP = Flask(__name__)
@APP.route('/')
def hello_world():
return 'Hello, World from Flask!\n'
if __name__ == '__main__':
APP.run(host='0.0.0.0', port=8080, debug=True)
Das Dockerfile darf keine File-Extension haben und liegt typischerweise im Root-Directory des SW-Projekts. (Hier im selben directory wie das Python file.)
FROM python:3.7.2-slim
COPY . /app
WORKDIR /app
RUN pip install --upgrade pip
RUN pip install flask
ENTRYPOINT ["python", "app.py"]
Die einzelnen Zeilen bedeuten:
FROM python:3.7.2-slim | Dieses Dockerfile erbt Eigenschaften vom python:3.7.2-slim image. |
COPY . /app | Kopier content des current directory ins app directory |
WORKDIR /app | Definiere ‚/app‘ als das work directory |
RUN pip install –upgrade pip | Führe ‚pip install –upgrade pip‘ aus (ich nehme mal an, dass dies auf dem Build-Server läuft und nicht auf dem Runtime server.) |
ENTRYPOINT [„python“, „app.py“] | Wird das Docker-Image (der Docker-Container) gestartet soll ‚python‘ mit parameter ‚app.py‘ aufgerufen werden. |
Kompilieren des Dockerfiles zum Dockerimage
docker build -t test .
-t test : Das Image soll den Titel ‚test‘ erhalten
‚.‘ : Sucht nach ‚Dockerfile‘ im current directory.
Kontrolle ob das Image erstellt wurde
docker image ls
Das Image laufen lassen
docker run --name myContainer -p 80:8080 test
Der Container wird den namen ‚myContainer‘ tragen und unter dem Port 80 in der Aussenwelt ansprechbar sein.
docker ps | Laufende Docker Images abfragen |
Kontrolle ob das Flask Webserver Image läuft:
curl http://127.0.0.1:80/
Oder im Browser: http://127.0.0.1:80/
Docker-Container/Image aufräumen
docker ps | Laufende Containers auflisten (z.B. Id) |
docker ps -a | In Docker existierende Container auflisten. |
docker stop <containerId> | |
docker container rm <containerId> | Einen Container von Docker entfernen. |
docker image ls | Images listen (die Docker kennt) |
docker image rm <imageId> | Image entfernen (aus der Liste der Images, die Docker kennt) |
Flask Application Programming Setup (mit PostgresSQL)
Was muss gemacht werden, um eine Flask Beispiel-Applikation im eingenen Workspace zum Laufen zu kriegen?
PostgesSQL DB: Sind die Entitäten vorhanden
Starten der DB: pg_ctl -D „C:\Program Files\PostgreSQL\13\data“ start
In die DB einloggen: psql <db_namen> <user_namen>, z.B. psql todoDB postgres
Dann innerhalb PSQL Shell:
\l : Um DBs zu listen
\dt: Um Tabellen zu listen
\? : Um andere Kommanos kennen zu lernen
Die Flask App zum Laufen kriegen
Im Windows Dos Prompt:
set FLASK_APP=<relativer_pfad_zum_app.py_file>
set FLASK_DEBUG=true damit der server dann automatisch die Codeänderungen rein lädt (life Editing)
flask run
Libraries würde man mit dem PIP (Package Manager laden).
PL/SQL Problem ‚PLS-00103: Encountered the symbol‘ bei DDL statements
Problem:
DDL-Statements können ’nackt‘ nicht im PL/SQL ausgeführt werden.
Lösung:
DDL-Statements in execute immediate ‚….‘ einpacken.
–> http://www.dba-oracle.com/t_using_ddl_create_index_table_plsql.htm
WordPress: Inhaltsverzeichnis in Beiträgen einfügen
Table of Contents Plus von Michael Tran
WordPress: Link-Ziel innerhalb Seite / Anchor Link erstellen (manuell)
Ein Anchor link kann erstellt werden, indem auf den Code Editor (oder HTML Editor) umgestellt wird und dort im HTML Tag (typischweise das H1, H2, … Tag) ein attribute id mit dem Namen des Ziellinks eingetragen wird:
<h1 id="meinLinkZiel" .../>
Wie man den HTML/Code Editor öffnet ist pro WordPress-Version unterschiedlich. Oft reicht ein (Rechts-)Klick aus um ein Kontextmenu hervorzurufen, indemman dann auf HTML-Editor umstellen kann. In einer älteren Version von WP musste ich ganz oben rechts auf das „Dreipunkt“-Menu gehen um diese Option präsentiert zu bekommen.
Der normale Editor wird „Visueller Editor“ genannt
Die so erstellten Link-Ziele werden relativ refernziert mit vorangestelltem #.
Z.B.:
<a href="#meinLinkZiel">Jump!</a>
WordPress – Erste Einsichten
Backup – Umzug von WordPress
Backup Entsprechende Funktion im „SW Installer“ von netzone.ch/config/ benutzen.
Print PDF Plugin: https://de.wordpress.org/plugins/print-my-blog/
Umzug (inklusive Backup): https://www.ionos.de/digitalguide/hosting/blogs/wordpress-migration-tipps-fuer-den-serverumzug/
Oracle SQL Explain – Query Performace
Links:
- Interpreting Explain Plan – Grundbegriffe
- How to Read an Execution Plan
- Explaining and Displaying Execution Plans
- Einführung in Materialized Views
- Refreshing Materialized Views
- Advanced Materialized Views
- CREATE MATERIALIZED VIEW LOG <– Braucht es anscheinend um eine Mat View per Partition up-zu-daten
Jasmine – JavaScript testing
Jasmine ist ein sehr einfaches JUnit-Test-Werkzeug für JavaScript.
–> Extrahiert von: Udacity > Frontend Developer Nano Degree > 6. JavaScript Tools & Testing > Lesson 9: Writing Test Suites
–> Code
Alles was benötigt wird um ein JavaScript-Projekt zu testen:
Das SpecRunner.html:
Dieses wird einfach so im Browser geöffnet/refreshed und zeigt die Testergebnisse an.
Das SpecRunner.html enthält die ’script‘-Links zu …
a) … den benötigten Jasmine-Libraries
<script src=“lib/jasmine-2.2.0/jasmine.js“></script>
<script src=“lib/jasmine-2.2.0/jasmine-html.js“></script>
<script src=“lib/jasmine-2.2.0/boot.js“></script>
b) … den getesteten JavaScript-Files
<script src=“src/Player.js“></script>
c) … den tests:
<script src=“spec/Player.js“></script>
Die Tests
describe("AddressBook", function(){
it("silly test", function() {
let c = new Contact();
let ab = new AddressBook();
ab.addContact(c);
expect(ab.getContact()).toEqual(c);
});
});
Über die Funktion it(..) teilen wir Jasmine mit, dass wir einen Test mit einem gegebenen Namen und unter ausführung einer mitgegebenen Funktion ausführen wollen.
Über die Funktion expect(..) übergeben wir den Outcome und chainen den Reply auf eine Matcher-Funktion (toEqual(..) in unserem Beispiel.
Über die Funktion describe(..) teilen wir Jasmine die Testsuite mit und die Funktion, die es für diese ausführen soll.