User Tools

Site Tools


wikiv3:lab_app_php

Lab - Implemantar um aplicação PHP

$ ls lab01/
dep-app.yaml  dep-mysql.yaml  svc-app.yaml  svc-mysql.yaml
dep-app.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
dep-mysql.yaml
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
svc-app.yaml
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
svc-mysql.yaml
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   <none>        8080:31541/TCP   84s
service/mysql   ClusterIP   10.99.0.222   <none>        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
dep-app.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
          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
dep-mysql.yaml
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    <none>        8080:31541/TCP   28h
mysql   ClusterIP   10.101.224.168   <none>        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
wikiv3/lab_app_php.txt · Last modified: by 127.0.0.1