Skip to content

Instantly share code, notes, and snippets.

@joaovictorino
Created October 6, 2023 04:27
Show Gist options
  • Save joaovictorino/47c3775911a1d83dcf1b6360701e6c05 to your computer and use it in GitHub Desktop.
Save joaovictorino/47c3775911a1d83dcf1b6360701e6c05 to your computer and use it in GitHub Desktop.
Subindo a aplicação

Subindo a aplicação

Agora que temos o Kubernetes funcionando, vamos subir a aplicação nele.
Crie uma pasta na raiz do projeto chamada "k8s", e crie o arquivo "01-db.yaml" com o conteúdo abaixo

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: mysqldb-stfs
  name: mysqldb-stfs
spec:
  selector:
    matchLabels:
      app: mysqldb-stfs
  serviceName: "mysqldb-stfs"
  replicas: 1
  template:
    metadata:
      labels:
        app: mysqldb-stfs
    spec:
      terminationGracePeriodSeconds: 20
      containers:
        - image: mysql:8.0
          imagePullPolicy: Always
          name: mysqldb-stfs
          env:
            - name: MYSQL_DATABASE
              value: "bank"
            - name: MYSQL_ROOT_PASSWORD
              value: "root"
            - name: MYSQL_TCP_PORT
              value: "3306"
          ports:
            - containerPort: 3306
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: db-claim
  volumeClaimTemplates:
  - metadata:
      name: db-claim
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "standard"
      resources:
        requests:
          storage: 2Gi

Na mesma pasta crie o arquivo "02-svc-db.yaml" com o conteúdo abaixo

apiVersion: v1
kind: Service
metadata:
  name: mysqldb
spec:
  type: ClusterIP
  ports:
    - name: "3306"
      port: 3306
      protocol: TCP
      targetPort: 3306
  selector:
    app: mysqldb-stfs

Abra o terminal, navegue até a pasta k8s e execute os comandos abaixo

kubectl apply -f 01-db.yaml
kubectl apply -f 02-svc-db.yaml

Agora na mesma pasta crie o arquivo "03-migrate.yaml" com o conteúdo abaixo

apiVersion: batch/v1
kind: Job
metadata:
  name: migrate
spec:
  template:
    spec:
      containers:
      - image: jhvs1984/migrate
        imagePullPolicy: Always
        name: migrate
        env:
          - name: DATABASE_URL
            value: "mysql://root:root@mysqldb:3306/bank"
        resources: {}
      restartPolicy: OnFailure
      serviceAccountName: ""
status: {}

E crie o arquivo "04-app.yaml"

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: app
  name: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - image: jhvs1984/web
        imagePullPolicy: Always
        name: web
        env:
          - name: DATABASE_URL
            value: "mysql://root:root@mysqldb:3306/bank"
        resources: {}
        ports:
          - containerPort: 3000
        resources: {}
      restartPolicy: Always
      serviceAccountName: ""
status: {}

E por último o arquivo "05-svc-app.yaml"

apiVersion: v1
kind: Service
metadata:
  name: app-svc
spec:
  type: NodePort
  ports:
    - name: "80"
      port: 80
      targetPort: 3000
  selector:
    app: app

Agora execute os comandos abaixo

kubectl apply -f 03-migrate.yaml
kubectl apply -f 04-app.yaml
kubectl apply -f 05-svc-app.yaml

Agora execute o comando abaixo e aguarde até que os contêineres app e mysqldb estejam em estado "Running" e o migration como "Completed".
Então execute o comando abaixo e guarde a porta do serviço, deve começar com 3

kubectl get svc/app-svc

Então execute o comando abaixo

kubectl get nodes -o wide

Pegue o campo "INTERNAL-IP" do segundo comando e a porta do primeiro comando, montando um endereço assim http://[INTERNAL-IP]:[PORTA]
Abra o navegador da sua máquina e coloque este endereço, você deve ser capaz de navegar pela aplicação.
Pronto! A aplicação está publicada no Kubernetes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment