Table of Contents

PHPipam deploy nfs

Backup da base de dados

# mysqldump -u root -p phpipam > phpipam_migration_backup.db

Deploy

$ kubectl create ns phpipam-system
namespace/phpipam-system created
pvc-ipam.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-db-phpipam
  namespace: phpipam-system
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client
  resources:
    requests:
      storage: 4Gi
$ kubectl apply -f pvc-ipam.yaml
persistentvolumeclaim/nfs-db-phpipam created
$ kubectl get pv,pvc -n phpipam-system
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS    REASON   AGE
persistentvolume/pvc-4c595d92-b4c5-40b6-b00f-a8c60e89b568   4Gi        RWX            Delete           Bound    phpipam-system/nfs-db-phpipam   nfs-client               25s
 
NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/nfs-db-phpipam   Bound    pvc-4c595d92-b4c5-40b6-b00f-a8c60e89b568   4Gi        RWX            nfs-client     25s
$ echo -n "@btjt(())22" | base64
QGJ0anQoKCkpMjI=
$ echo -n "QGJ0anQoKCkpMjI=" | base64 --decode
@btjt(())22
mysql-deployment.yaml
---
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
  namespace: phpipam-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  strategy: {}
  template:
    metadata:
      labels:
        app: mysql
    spec:
      securityContext:
        fsGroup: 1001
        runAsUser: 1001
      containers:
        - env:
            - name: MYSQL_ROOT_PASSWORD
              value: QGJ0anQoKCkpMjI=
          image: mysql:5.6
          imagePullPolicy: IfNotPresent
          name: mysql
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: db-phpipam
      volumes:
        - name: db-phpipam
          persistentVolumeClaim:
            claimName: nfs-db-phpipam
$ kubectl apply -f mysql-deployment.yaml
deployment.apps/mysql created
$ kubectl expose deploy mysql --cluster-ip='fd00:0:0:100::4' --type="ClusterIP" --port=3306 --target-port=3306 -n phpipam-system --dry-run=client -o yaml > mysql-service.yaml
$ cat mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: mysql
  name: mysql
  namespace: phpipam-system
spec:
  clusterIP: fd00:0:0:100::4
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP
status:
  loadBalancer: {}
$ kubectl apply -f mysql-service.yaml
service/mysql created
$ kubectl get service -n phpipam-system
NAME    TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)    AGE
mysql   ClusterIP   fd00:0:0:100::4   <none>        3306/TCP   29s
ipam-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: ipam
  name: ipam
  namespace: phpipam-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ipam
  strategy: {}
  template:
    metadata:
      labels:
        app: ipam
    spec:
      containers:
        - env:
            - name: MYSQL_ENV_MYSQL_HOST
              value: mysql
            - name: MYSQL_ENV_MYSQL_ROOT_PASSWORD
              value: QGJ0anQoKCkpMjI=
            - name: MYSQL_ENV_MYSQL_USER
              value: root
          image: pierrecdn/phpipam
          name: ipam
          ports:
            - containerPort: 80
$ kubectl apply -f ipam-deployment.yaml
deployment.apps/ipam created
$ kubectl get pods -n phpipam-system -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP               NODE                                 NOMINATED NODE   READINESS GATES
ipam-5c747776ff-8d6xn   1/1     Running   0          33m   10.244.213.134   kube-worker-02.juntotelecom.com.br   <none>           <none>
mysql-99bfd57bc-kd25k   1/1     Running   0          42s   10.244.101.71    kube-worker-01.juntotelecom.com.br   <none>           <none>
kubectl expose deploy ipam --port=80 --target-port=80 --cluster-ip='fd00:0:0:100::5' --type="NodePort" -n phpipam-system --dry-run=client -o yaml > ipam-service.yaml
ipam-service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: ipam
  name: ipam
  namespace: phpipam-system
spec:
  clusterIP: fd00:0:0:100::5
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: ipam
  type: NodePort
status:
  loadBalancer: {}
$ kubectl apply -f ipam-service.yaml
service/ipam created
$ kubectl get service -n phpipam-system
NAME    TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)        AGE
ipam    NodePort    fd00:0:0:100::5   <none>        80:31396/TCP   36s
mysql   ClusterIP   fd00:0:0:100::4   <none>        3306/TCP       40m

Migrando a database

$ mv phpipam_migration_backup.db MIGRATE.sql
$ kubectl get pods -n phpipam-system
NAME                    READY   STATUS    RESTARTS   AGE
ipam-5c747776ff-8d6xn   1/1     Running   0          42m
mysql-99bfd57bc-kd25k   1/1     Running   0          10m
$ kubectl cp MIGRATE.sql -n phpipam-system ipam-5c747776ff-8d6xn:/tmp
$ kubectl exec -it -n phpipam-system ipam-5c747776ff-8d6xn -- bash
# ls db/
SCHEMA.sql  UPDATE.sql  bkp  legacy
# mv /tmp/MIGRATE.sql db/
# ls db/
MIGRATE.sql  SCHEMA.sql  UPDATE.sql  bkp  legacy

URL: http://[2804:694:4c00:4007::98]:31396

Clique a 2ª opção

Clique na 1ª opção

Informe as informações que foram inseridas no YAML de criação do deploy, clique para migrar e depois continue para a tela de login.

Ingress

$ kubectl create ingress ipam --class=nginx --rule=ipam.juntotelecom.com.br/*=ipam:80 -n phpipam-system --dry-run=client -o yaml > ingress-ipam.yaml
ingress-ipam.yaml
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: ipam
  namespace: phpipam-system
spec:
  ingressClassName: nginx
  rules:
  - host: ipam.juntotelecom.com.br
    http:
      paths:
      - backend:
          service:
            name: ipam
            port:
              number: 80
        path: /
        pathType: Prefix
status:
  loadBalancer: {}
$ kubectl apply -f ingress-ipam.yaml
ingress.networking.k8s.io/ipam created
$ kubectl get ingress -n phpipam-system
NAME   CLASS   HOSTS                      ADDRESS          PORTS   AGE
ipam   nginx   ipam.juntotelecom.com.br   172.28.128.100   80      22s
$ kubectl describe ingress ipam -n phpipam-system
Name:             ipam
Labels:           <none>
Namespace:        phpipam-system
Address:          172.28.128.100
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                      Path  Backends
  ----                      ----  --------
  ipam.juntotelecom.com.br
                            /   ipam:80 ([fd00::e:1334:c75d:e2cb:7ec6]:80)
Annotations:                <none>
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  Sync    22s (x2 over 39s)  nginx-ingress-controller  Scheduled for sync