====== 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