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.