====== 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
---
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
---
---
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 3306/TCP 29s
---
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
mysql-99bfd57bc-kd25k 1/1 Running 0 42s 10.244.101.71 kube-worker-01.juntotelecom.com.br
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
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 80:31396/TCP 36s
mysql ClusterIP fd00:0:0:100::4 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
{{::ipam01.png|}}
Clique a 2ª opção
{{:ipam02.png|}}
Clique na 1ª opção
{{:ipam03.png|}}
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
---
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:
Namespace: phpipam-system
Address: 172.28.128.100
Default backend: default-http-backend:80 ()
Rules:
Host Path Backends
---- ---- --------
ipam.juntotelecom.com.br
/ ipam:80 ([fd00::e:1334:c75d:e2cb:7ec6]:80)
Annotations:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 22s (x2 over 39s) nginx-ingress-controller Scheduled for sync