Adding a Service to My Cluster
To deploy a new service to my k8s cluster, create the following files in cluster-config/apps/<service-name>/:
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: <service-name>
namespace: <service-name>
spec:
replicas: 1
selector:
matchLabels:
app: <service-name>
template:
metadata:
labels:
app: <service-name>
spec:
containers:
- name: <service-name>
image: ghcr.io/andresfelipemendez/<service-name>:latest
ports:
- containerPort: 80
resources:
limits:
memory: "64Mi"
cpu: "50m"
service.yaml
apiVersion: v1
kind: Service
metadata:
name: <service-name>
namespace: <service-name>
spec:
selector:
app: <service-name>
ports:
- port: 80
targetPort: 80
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: <service-name>-ingress
namespace: <service-name>
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- <service-name>.andresfelipemendez.com
secretName: <service-name>-tls
rules:
- host: <service-name>.andresfelipemendez.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: <service-name>
port:
number: 80
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: <service-name>
resources:
- deployment.yaml
- service.yaml
- ingress.yaml
ArgoCD App
Create cluster-config/apps/argocd/<service-name>-app.yaml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: <service-name>
namespace: argocd
annotations:
argocd-image-updater.argoproj.io/image-list: app=ghcr.io/andresfelipemendez/<service-name>:latest
argocd-image-updater.argoproj.io/app.update-strategy: digest
argocd-image-updater.argoproj.io/write-back-method: argocd
spec:
project: default
source:
repoURL: https://github.com/andresfelipemendez/cluster-config.git
targetRevision: HEAD
path: apps/<service-name>
destination:
server: https://kubernetes.default.svc
namespace: <service-name>
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
Then add the app to cluster-config/apps/argocd/kustomization.yaml:
resources:
- <service-name>-app.yaml
Push the changes and ArgoCD will automatically deploy the service.