How to deploy a bunch of yaml files?

4/15/2020

I would like to deploy a bunch of yaml files https://github.com/quay/quay/tree/master/deploy/k8s on my kubernetes cluster and would like to know, what is the best approach to deploy these at once.

-- zero_coding
kubernetes
kubernetes-helm

4 Answers

4/15/2020

You may consider using Helm (The package manager for Kubernetes). Just like we use yum or apt-get for Linux, we use helm for k8s.

Using Helm, you can deploy multiple resources (bunch of YAMLs) in one go. Helm Charts help you define, install, and upgrade even the most complex Kubernetes application. Helm uses a packaging format called charts. A chart is a collection of files that describe a related set of Kubernetes resources. A single chart might be used to deploy something simple, like a memcached pod, or something complex, like a full web app stack with HTTP servers, databases, caches, and so on. Also, you don't need to combine all your YAMLs; they can remain separate as part of a given chart. Besides, if one chart depends on another, you can use the helm dependency feature.

The reason why i use Helm is because whenever i deploy a chart, helm tracks it as a release. Any change to a chart get a new release version. This way, upgrade (or rollback) becomes very easy and you can confidently say what went as part of a given release.

Also, if you have different microservices that have stuff in common, then helm provides a feature called Library Chart using which you can create definitions that can be re-used across charts, thus keeping your charts DRY.

Have a look at this introductory video: https://www.youtube.com/watch?v=Zzwq9FmZdsU&t=2s

-- Technext
Source: StackOverflow

4/15/2020

I would advise linking the yaml's into one. The purpose of a deployment and service yaml is to deploy your application onto the cluster in one fell swoop. You can define many deployments and services within the one file. In your case, a tool such as Kustomize will help you combine them. Kustomize comes preinstalled with kubectl.

You can combine your yamls called a Multi-Resource yaml into one file using the --- operator. i.e.

apiVersion: v1
kind: Service
metadata:
  name: foo
spec:
...
---
apiVersion: v1
kind: Service
metadata:
  name: bar
spec:
...

Then make a kustomization.yaml which combines all your multi-resource yamls. There is a good guide on this here: https://levelup.gitconnected.com/kubernetes-merge-multiple-yaml-into-one-e8844479a73a

The documentation from k8 is here: https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/

-- cwelsh4
Source: StackOverflow

4/15/2020

kubectl apply -f <folder-name>

A simple way to deploy all files in a given folder.

-- Guido
Source: StackOverflow

4/15/2020

You can directly apply folder

kubectl create -f ./<foldername>

kubectl apply -f ./<foldername>

You can also add mutiliple files in one command

kubectl apply -f test.yaml,test-1.yaml

You can also merge all YAML files into a single file and manage it further.

Marge YAML file using ---

For example :

apiVersion: v1
kind: Service
metadata:
  name: test-data
  labels:
    app: test-data
spec:
  ports:
  - name: http
    port: 80
    targetPort: 9595
  - name: https
    port: 9595
    targetPort: 9595
  selector:
    app: test-data
    tier: frontend
---
apiVersion: v1
kind: Service
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  ports:
  - name: http
    port: 80
    targetPort: 9595
  - name: https
    port: 9595
    targetPort: 9595
  selector:
    app: test-app
    tier: frontend
-- Harsh Manvar
Source: StackOverflow