Table of Contents

TeamPass

$ kubectl create ns teampass-system
namespace/teampass-system created

Database

teampass-db-claim.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  nfs-db-teampass
  namespace: teampass-system
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs-client
  resources:
    requests:
      storage: 4Gi
$ kubectl apply -f teampass-db-claim.yaml
persistentvolumeclaim/teampass-db created
$ echo -n "@btjt(())22" | base64
QGJ0anQoKCkpMjI=
db-secrets.yaml
---
apiVersion: v1
kind: Secret
metadata:
  name: db-secrets
  namespace: teampass-system
data:
  MYSQL_PASSWORD: QGJ0anQoKCkpMjI=
  MYSQL_ROOT_PASSWORD: QGJ0anQoKCkpMjI=
$ kubectl apply -f db-secrets.yaml
secret/db-secrets created
db-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: db-teampass
  name: db-teampass
  namespace: teampass-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db-teampass
  strategy: {}
  template:
    metadata:
      labels:
        app: db-teampass
    spec:
      securityContext:
        fsGroup: 1001
        runAsUser: 1001
      containers:
        - env:
            - name: MYSQL_DATABASE
              value: teampass
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-secrets
                  key: MYSQL_PASSWORD
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: db-secrets
                  key: MYSQL_ROOT_PASSWORD
            - name: MYSQL_USER
              value: teampass
          image: mariadb:latest
          imagePullPolicy: IfNotPresent
          name: db-teampass
          resources: {}
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: db-teampass
      volumes:
        - name: db-teampass
          persistentVolumeClaim:
            claimName: nfs-db-teampass
$ kubectl apply -f db-deployment.yaml
deployment.apps/db-teampass created
db-service.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: db-teampass
  name: db-teampass
  namespace: teampass-system
spec:
  ports:
    - name: "3306"
      port: 3306
      targetPort: 3306
  selector:
    app: db-teampass
status:
  loadBalancer: {}
$ kubectl apply -f db-service.yaml
service/db-teampass created

App

teampass-html-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-teampass-html
  namespace: teampass-system
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs-client
  resources:
    requests:
      storage: 1Gi
$ kubectl apply -f teampass-html-claim.yaml
persistentvolumeclaim/nfs-teampass-html created
teampass-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: teampass
  name: teampass
  namespace: teampass-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: teampass
  strategy: {}
  template:
    metadata:
      labels:
        app: teampass
    spec:
      containers:
        - image: teampass/teampass
          name: teampass
          ports:
            - containerPort: 80
          volumeMounts:
            - mountPath: /var/www/html
              name: teampass-html
      volumes:
        - name: teampass-html
          persistentVolumeClaim:
            claimName: nfs-teampass-html
$ kubectl apply -f teampass-deployment.yaml
deployment.apps/teampass created
$ kubectl expose deploy teampass --port=80 --target-port=80 --type="NodePort" -n teampass-system
service/teampass exposed
$ kubectl get all -n teampass-system -o wide
NAME                              READY   STATUS    RESTARTS   AGE     IP               NODE                                 NOMINATED NODE   READINESS GATES
pod/db-teampass-6bf4596bc-tc6cs   1/1     Running   0          26m     10.244.213.140   kube-worker-02.juntotelecom.com.br   <none>           <none>
pod/teampass-78d4fcd499-rd2qt     1/1     Running   0          6m40s   10.244.213.141   kube-worker-02.juntotelecom.com.br   <none>           <none>
 
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/db-teampass   ClusterIP   10.96.140.199   <none>        3306/TCP       21m   app=db-teampass
service/teampass      NodePort    10.96.77.101    <none>        80:31932/TCP   4s    app=teampass
 
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS    IMAGES              SELECTOR
deployment.apps/db-teampass   1/1     1            1           26m     db-teampass   mariadb:latest      app=db-teampass
deployment.apps/teampass      1/1     1            1           6m40s   teampass      teampass/teampass   app=teampass
 
NAME                                    DESIRED   CURRENT   READY   AGE     CONTAINERS    IMAGES              SELECTOR
replicaset.apps/db-teampass-6bf4596bc   1         1         1       26m     db-teampass   mariadb:latest      app=db-teampass,pod-template-hash=6bf4596bc
replicaset.apps/teampass-78d4fcd499     1         1         1       6m40s   teampass      teampass/teampass   app=teampass,pod-template-hash=78d4fcd499