From 881b0f4390b6a5d39ec42893244a2ea8a87ee979 Mon Sep 17 00:00:00 2001 From: Celestino Rey Date: Fri, 26 Aug 2022 12:07:57 +0200 Subject: [PATCH] =?UTF-8?q?Creaci=C3=B3n=20de=20tikiwiki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .~lock.puertos.ods# | 1 + PHPDev/kustomization.yaml | 2 + PHPDev/nginxphp_service.yaml | 15 ++++ PHPDev/php_fpm_service.yaml | 14 ++++ PHPDev/phpweb-deployment.yaml | 60 +++++++++++++++ PHPDev/pv-local-nginxphp.yaml | 11 +++ PHPDev/pvc-nginxphp.yaml | 13 ++++ TikiWiki/creaTodo.sh | 4 + TikiWiki/kustomization.yaml | 12 +++ TikiWiki/mysql-deployment-tw.yaml | 68 +++++++++++++++++ TikiWiki/paraTodo.sh | 3 + TikiWiki/php-myadmin-tw-deployment.yaml | 54 ++++++++++++++ TikiWiki/pv-local-mysql-tw.yaml | 11 +++ TikiWiki/pv-local-tikiwiki.yaml | 12 +++ TikiWiki/tikiwiki-deployment.yaml | 78 ++++++++++++++++++++ TikiWiki/tw-namespace.yaml | 4 + Wordpress/{ => Papelera}/pvc-nginx.yaml | 0 Wordpress/{ => Papelera}/pvc-wordpress.yaml | 0 puertos | 19 +++++ puertos.ods | Bin 0 -> 15844 bytes 20 files changed, 381 insertions(+) create mode 100644 .~lock.puertos.ods# create mode 100644 PHPDev/kustomization.yaml create mode 100644 PHPDev/nginxphp_service.yaml create mode 100644 PHPDev/php_fpm_service.yaml create mode 100644 PHPDev/phpweb-deployment.yaml create mode 100644 PHPDev/pv-local-nginxphp.yaml create mode 100644 PHPDev/pvc-nginxphp.yaml create mode 100755 TikiWiki/creaTodo.sh create mode 100644 TikiWiki/kustomization.yaml create mode 100644 TikiWiki/mysql-deployment-tw.yaml create mode 100755 TikiWiki/paraTodo.sh create mode 100644 TikiWiki/php-myadmin-tw-deployment.yaml create mode 100644 TikiWiki/pv-local-mysql-tw.yaml create mode 100644 TikiWiki/pv-local-tikiwiki.yaml create mode 100644 TikiWiki/tikiwiki-deployment.yaml create mode 100644 TikiWiki/tw-namespace.yaml rename Wordpress/{ => Papelera}/pvc-nginx.yaml (100%) rename Wordpress/{ => Papelera}/pvc-wordpress.yaml (100%) create mode 100644 puertos create mode 100644 puertos.ods diff --git a/.~lock.puertos.ods# b/.~lock.puertos.ods# new file mode 100644 index 00000000..612bb1e2 --- /dev/null +++ b/.~lock.puertos.ods# @@ -0,0 +1 @@ +,creylopez,k8s-server,26.08.2022 11:53,file:///home/creylopez/.config/libreoffice/4; \ No newline at end of file diff --git a/PHPDev/kustomization.yaml b/PHPDev/kustomization.yaml new file mode 100644 index 00000000..92bfc1e1 --- /dev/null +++ b/PHPDev/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - phpweb-deployment.yaml diff --git a/PHPDev/nginxphp_service.yaml b/PHPDev/nginxphp_service.yaml new file mode 100644 index 00000000..9ff9cdcb --- /dev/null +++ b/PHPDev/nginxphp_service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginxphp + labels: + tier: backend +spec: + selector: + app: nginxphp + tier: backend + ports: + - protocol: TCP + port: 80 + externalIPs: + - 192.168.1.147 diff --git a/PHPDev/php_fpm_service.yaml b/PHPDev/php_fpm_service.yaml new file mode 100644 index 00000000..5e75d9c0 --- /dev/null +++ b/PHPDev/php_fpm_service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service + +metadata: + name: php + labels: + tier: backend +spec: + selector: + app: php + tier: backend + ports: + - protocol: TCP + port: 9000 diff --git a/PHPDev/phpweb-deployment.yaml b/PHPDev/phpweb-deployment.yaml new file mode 100644 index 00000000..50f88770 --- /dev/null +++ b/PHPDev/phpweb-deployment.yaml @@ -0,0 +1,60 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx-php-dev +spec: + type: NodePort + ports: + - name: http + port: 80 + nodePort: 30050 + targetPort: nginx-php-http + selector: + app: nginxphpdev +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: nginxphp-pv-claim + labels: + app: nginxphpdev +spec: + accessModes: + - ReadWriteMany + storageClassName: "" + resources: + requests: + storage: 1Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-php-dev + labels: + app: nginxphpdev +spec: + selector: + matchLabels: + app: nginxphpdev + tier: frontend + strategy: + type: Recreate + template: + metadata: + labels: + app: nginxphpdev + tier: frontend + spec: + containers: + - name: nginxphpdev + image: linuxserver/nginx + ports: + - containerPort: 80 + name: "nginx-php-http" + volumeMounts: + - name: nginxphp-www-folder + mountPath: /config/www + volumes: + - name: nginxphp-www-folder + persistentVolumeClaim: + claimName: nginxphp-pv-claim diff --git a/PHPDev/pv-local-nginxphp.yaml b/PHPDev/pv-local-nginxphp.yaml new file mode 100644 index 00000000..b76b8ee9 --- /dev/null +++ b/PHPDev/pv-local-nginxphp.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: nginxphp-www-folder +spec: + capacity: + storage: 1Gi + accessModes: + - ReadWriteMany + hostPath: + path: "/mnt/cluster/nginxphp" diff --git a/PHPDev/pvc-nginxphp.yaml b/PHPDev/pvc-nginxphp.yaml new file mode 100644 index 00000000..62b5d4b7 --- /dev/null +++ b/PHPDev/pvc-nginxphp.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: nginxphp-pv-claim + labels: + app: nginxphp +spec: + accessModes: + - ReadWriteMany + storageClassName: "" + resources: + requests: + storage: 1Gi diff --git a/TikiWiki/creaTodo.sh b/TikiWiki/creaTodo.sh new file mode 100755 index 00000000..10d141b6 --- /dev/null +++ b/TikiWiki/creaTodo.sh @@ -0,0 +1,4 @@ +kubectl create -f pv-local-mysql-tw.yaml +kubectl create -f pv-local-tikiwiki.yaml +kubectl create -k ./ +watch kubectl get all -n tikiwiki diff --git a/TikiWiki/kustomization.yaml b/TikiWiki/kustomization.yaml new file mode 100644 index 00000000..c7002b16 --- /dev/null +++ b/TikiWiki/kustomization.yaml @@ -0,0 +1,12 @@ +secretGenerator: +- name: mysqltw-pass + namespace: tikiwiki + literals: + - password=Dsa-0213 + - db_user=root + - db_passwd=Dsa-0213 +resources: + - tw-namespace.yaml + - mysql-deployment-tw.yaml + - tikiwiki-deployment.yaml + - php-myadmin-tw-deployment.yaml diff --git a/TikiWiki/mysql-deployment-tw.yaml b/TikiWiki/mysql-deployment-tw.yaml new file mode 100644 index 00000000..bd168973 --- /dev/null +++ b/TikiWiki/mysql-deployment-tw.yaml @@ -0,0 +1,68 @@ +apiVersion: v1 +kind: Service +metadata: + name: tikiwiki-mysql + namespace: tikiwiki + labels: + app: tikiwiki +spec: + ports: + - port: 3306 + selector: + app: tikiwiki + tier: mysql + clusterIP: None +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-tw-pv-claim + namespace: tikiwiki + labels: + app: tikiwiki +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tikiwiki-mysql + namespace: tikiwiki + labels: + app: tikiwiki +spec: + selector: + matchLabels: + app: tikiwiki + tier: mysql + strategy: + type: Recreate + template: + metadata: + labels: + app: tikiwiki + tier: mysql + spec: + containers: + - image: mariadb + name: mysql + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: mysqltw-pass + key: password + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - name: mysql-persistent-storage + mountPath: /var/lib/mysql + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-tw-pv-claim diff --git a/TikiWiki/paraTodo.sh b/TikiWiki/paraTodo.sh new file mode 100755 index 00000000..807d8541 --- /dev/null +++ b/TikiWiki/paraTodo.sh @@ -0,0 +1,3 @@ +kubectl delete -k ./ +kubectl delete -f pv-local-mysql-tw.yaml +kubectl delete -f pv-local-tikiwiki.yaml diff --git a/TikiWiki/php-myadmin-tw-deployment.yaml b/TikiWiki/php-myadmin-tw-deployment.yaml new file mode 100644 index 00000000..edacb85e --- /dev/null +++ b/TikiWiki/php-myadmin-tw-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: v1 +kind: Service +metadata: + name: phpmyadmin-tikiwiki + namespace: tikiwiki + labels: + app: tikiwiki +spec: + selector: + app: tikiwiki + tier: phpmyadmin + type: NodePort + ports: + - name: phpadmin + port: 80 + nodePort: 30380 + targetPort: phpmyadm +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: phpmyadmin-tikiwiki + namespace: tikiwiki + labels: + app: tikiwiki +spec: + selector: + matchLabels: + app: tikiwiki + tier: phpmyadmin + strategy: + type: Recreate + template: + metadata: + labels: + app: tikiwiki + tier: phpmyadmin + spec: + containers: + - name: phpmyadmin + image: phpmyadmin + ports: + - containerPort: 80 + name: phpmyadm + env: + - name: PMA_HOST + value: tikiwiki-mysql + - name: PMA_PORT + value: "3306" + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: mysqltw-pass + key: password diff --git a/TikiWiki/pv-local-mysql-tw.yaml b/TikiWiki/pv-local-mysql-tw.yaml new file mode 100644 index 00000000..c70af959 --- /dev/null +++ b/TikiWiki/pv-local-mysql-tw.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: tw-data +spec: + capacity: + storage: 20Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/cluster/tikiwiki/tikiwiki-db" diff --git a/TikiWiki/pv-local-tikiwiki.yaml b/TikiWiki/pv-local-tikiwiki.yaml new file mode 100644 index 00000000..8e21f699 --- /dev/null +++ b/TikiWiki/pv-local-tikiwiki.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: tw-folder +spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/cluster/tikiwiki/tikiwiki-tw" + diff --git a/TikiWiki/tikiwiki-deployment.yaml b/TikiWiki/tikiwiki-deployment.yaml new file mode 100644 index 00000000..90f6cbdb --- /dev/null +++ b/TikiWiki/tikiwiki-deployment.yaml @@ -0,0 +1,78 @@ +apiVersion: v1 +kind: Service +metadata: + name: tikiwiki + namespace: tikiwiki + labels: + app: tikiwiki +spec: + type: NodePort + ports: + - port: 80 + nodePort: 30098 + targetPort: tikiwiki + selector: + app: tikiwiki + tier: frontend +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: tw-pv-claim + namespace: tikiwiki + labels: + app: tikiwiki +spec: + accessModes: + - ReadWriteOnce + storageClassName: "" + resources: + requests: + storage: 10Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: tikiwiki + namespace: tikiwiki + labels: + app: tikiwiki +spec: + selector: + matchLabels: + app: tikiwiki + tier: frontend + strategy: + type: Recreate + template: + metadata: + labels: + app: tikiwiki + tier: frontend + spec: + containers: + - image: tikiwiki:19.x + name: tikiwiki + env: + - name: TIKI_DB_HOST + value: tikiwiki-mysql + - name: TIKI_DB_PASS + valueFrom: + secretKeyRef: + name: mysqltw-pass + key: password + - name: TIKI_DB_USER + valueFrom: + secretKeyRef: + name: mysqltw-pass + key: db_user + ports: + - containerPort: 80 + name: tikiwiki + volumeMounts: + - name: tikiwiki-persistent-storage + mountPath: /var/www/html + volumes: + - name: tikiwiki-persistent-storage + persistentVolumeClaim: + claimName: tw-pv-claim diff --git a/TikiWiki/tw-namespace.yaml b/TikiWiki/tw-namespace.yaml new file mode 100644 index 00000000..b3f63445 --- /dev/null +++ b/TikiWiki/tw-namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: tikiwiki diff --git a/Wordpress/pvc-nginx.yaml b/Wordpress/Papelera/pvc-nginx.yaml similarity index 100% rename from Wordpress/pvc-nginx.yaml rename to Wordpress/Papelera/pvc-nginx.yaml diff --git a/Wordpress/pvc-wordpress.yaml b/Wordpress/Papelera/pvc-wordpress.yaml similarity index 100% rename from Wordpress/pvc-wordpress.yaml rename to Wordpress/Papelera/pvc-wordpress.yaml diff --git a/puertos b/puertos new file mode 100644 index 00000000..f1fb2bda --- /dev/null +++ b/puertos @@ -0,0 +1,19 @@ +NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +collabora code-server NodePort 10.101.8.70 9980:30400/TCP 253d +collabora nextcloud-server NodePort 10.109.196.31 80:30410/TCP 253d +default kubernetes ClusterIP 10.96.0.1 443/TCP 322d +default nginx-example NodePort 10.99.186.18 80:30080/TCP 322d +default nginx-php-dev NodePort 10.97.208.224 80:30050/TCP 108d +firefly firefly-iii NodePort 10.96.219.148 8080:30880/TCP 197d +firefly firefly-iii-mysql ClusterIP None 3306/TCP 197d +firefly phpmyadmin-firefly NodePort 10.105.73.45 80:30180/TCP 197d +ingress-nginx ingress-nginx-controller NodePort 10.97.13.243 80:30424/TCP,443:31660/TCP 308d +ingress-nginx ingress-nginx-controller-admission ClusterIP 10.105.208.49 443/TCP 308d +kube-system kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 322d +nextcloud code-server NodePort 10.97.4.46 9980:30389/TCP 298d +nextcloud nextcloud-server NodePort 10.107.234.70 80:30289/TCP 146d +usablenc nextcloud-db ClusterIP 10.108.8.16 3306/TCP 287d +usablenc nextcloud-server ClusterIP 10.106.233.32 80/TCP 287d +wordpress phpmyadmin-wordpress NodePort 10.100.246.77 80:30280/TCP 86d +wordpress wordpress NodePort 10.109.83.48 80:30088/TCP 86d +wordpress wordpress-mysql ClusterIP None 3306/TCP 86d diff --git a/puertos.ods b/puertos.ods new file mode 100644 index 0000000000000000000000000000000000000000..fbdfa7208f5cd90315d1c1c1c8c10140138cc9a1 GIT binary patch literal 15844 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 F{tw%am-_$! literal 0 HcmV?d00001