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