====== Lab - Implemantar um aplicação PHP ====== $ ls lab01/ dep-app.yaml dep-mysql.yaml svc-app.yaml svc-mysql.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: app name: app namespace: 4labs spec: replicas: 1 selector: matchLabels: app: app strategy: {} template: metadata: labels: app: app spec: containers: - image: instrutordocker/4linux-app:latest name: app env: - name: DB_HOST value: mysql - name: DB_PORT value: "3306" - name: DB_USER value: php - name: DB_PASS value: 4linux - name: DB_NAME value: php apiVersion: apps/v1 kind: Deployment metadata: labels: app: mysql name: mysql namespace: 4labs spec: replicas: 1 selector: matchLabels: app: mysql strategy: {} template: metadata: labels: app: mysql spec: containers: - image: mysql:5.7 imagePullPolicy: IfNotPresent name: mysql env: - name: MYSQL_ROOT_PASSWORD value: Abc123! - name: MYSQL_DATABASE value: php - name: MYSQL_USER value: php - name: MYSQL_PASSWORD value: 4linux apiVersion: v1 kind: Service metadata: labels: app: app name: app namespace: 4labs spec: ports: - nodePort: 31541 port: 8080 protocol: TCP targetPort: 8080 selector: app: app type: NodePort apiVersion: v1 kind: Service metadata: labels: app: mysql name: mysql namespace: 4labs spec: ports: - port: 3306 protocol: TCP targetPort: 3306 selector: app: mysql $ kubectl create namespace 4labs namespace/4labs created $ kubectl apply -f lab01 deployment.apps/app created deployment.apps/mysql created service/app created service/mysql created $ kubectl get all -n 4labs NAME READY STATUS RESTARTS AGE pod/app-78dfcc664c-75k9r 0/1 Running 0 84s pod/mysql-cc8b4bdf7-q8blt 1/1 Running 0 84s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/app NodePort 10.99.3.104 8080:31541/TCP 84s service/mysql ClusterIP 10.99.0.222 3306/TCP 84s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/app 0/1 1 0 84s deployment.apps/mysql 1/1 1 1 84s NAME DESIRED CURRENT READY AGE replicaset.apps/app-78dfcc664c 1 1 0 84s replicaset.apps/mysql-cc8b4bdf7 1 1 1 84s URL: http://177.75.176.40:31541 $ kubectl delete -f lab01 deployment.apps "app" deleted deployment.apps "mysql" deleted service "app" deleted service "mysql" deleted ===== Utilizar Configmaps e Secrets ===== $ cat lab02/configmaps.yaml --- apiVersion: v1 kind: ConfigMap metadata: name: app-configmaps namespace: 4labs data: DB_HOST: mysql DB_NAME: php DB_PORT: "3306" DB_USER: php --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-configmaps namespace: 4labs data: MYSQL_DATABASE: php MYSQL_USER: php $ kubectl apply -f lab02/configmaps.yaml configmap/app-configmaps created configmap/mysql-configmaps created $ kubectl get cm -n 4labs NAME DATA AGE app-configmaps 4 31s kube-root-ca.crt 1 28h mysql-configmaps 2 31s $ cat lab02/secrets.yaml --- apiVersion: v1 kind: Secret metadata: name: app-secrets namespace: 4labs data: DB_PASS: NGxpbnV4 --- apiVersion: v1 kind: Secret metadata: name: mysql-secrets namespace: 4labs data: MYSQL_PASSWORD: NGxpbnV4 MYSQL_ROOT_PASSWORD: QWJjMTIzIQ== $ echo -n "4linux" | openssl enc -base64 NGxpbnV4 $ kubectl apply -f lab02/secrets.yaml secret/app-secrets created secret/mysql-secrets created $ kubectl get secrets -n 4labs NAME TYPE DATA AGE app-secrets Opaque 1 28s default-token-7g2cc kubernetes.io/service-account-token 3 28h mysql-secrets Opaque apiVersion: apps/v1 kind: Deployment metadata: labels: app: app name: app namespace: 4labs spec: replicas: 1 selector: matchLabels: app: app strategy: {} template: metadata: labels: app: app spec: containers: - image: instrutordocker/4linux-app:latest name: app env: - name: DB_HOST valueFrom: configMapKeyRef: name: app-configmaps key: DB_HOST - name: DB_PORT valueFrom: configMapKeyRef: name: app-configmaps key: DB_PORT - name: DB_USER valueFrom: configMapKeyRef: name: app-configmaps key: DB_USER - name: DB_NAME valueFrom: configMapKeyRef: name: app-configmaps key: DB_NAME - name: DB_PASS valueFrom: secretKeyRef: name: app-secrets key: DB_PASS * **configMapKeyRef**: Define que valores de variáveis de ambiente, serão alimentadas por chaves de ConfigMap. No exemplo apresentado a variável de ambiente **DB_HOST** será alimentada pelo valor da chave **DB_HOST** no ConfigMap **app-configmaps**. $ kubectl apply -f lab02/dep-app.yaml deployment.apps/app configured apiVersion: apps/v1 kind: Deployment metadata: labels: app: mysql name: mysql namespace: 4labs spec: replicas: 1 selector: matchLabels: app: mysql strategy: {} template: metadata: labels: app: mysql spec: containers: - image: mysql:5.7 imagePullPolicy: IfNotPresent name: mysql env: - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: mysql-configmaps key: MYSQL_DATABASE - name: MYSQL_USER valueFrom: configMapKeyRef: name: mysql-configmaps key: MYSQL_USER - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secrets key: MYSQL_ROOT_PASSWORD - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql-secrets key: MYSQL_PASSWORD $ kubectl apply -f lab02/dep-mysql.yaml deployment.apps/mysql configured $ kubectl get svc -n 4labs NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE app NodePort 10.102.86.152 8080:31541/TCP 28h mysql ClusterIP 10.101.224.168 3306/TCP 28h $ kubectl -n 4labs get svc mysql -o wide | awk -F" " '{print $3}' | tail -1 10.101.224.168 $ export BANCO=$(kubectl -n 4labs get svc mysql -o wide | awk -F" " '{print $3}' | tail -1) $ sudo apt install mariadb-client $ mysql -h $BANCO -u php -p4linux -D php Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.37 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [php]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | php | +--------------------+ 2 rows in set (0.001 sec) MySQL [php]> EXIT Bye