- Credo: Static analysis tool https://github.com/rrrene/credo
- hackney: HTTP client https://github.com/benoitc/hackney
- asdf: Version manager (for elixir and others) https://github.com/asdf-vm/asdf-elixir
- Mix: Build tool for elixir https://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html
- Poison JSON encoder tool https://github.com/devinus/poison
- The order of the messages in the mailbox is always kept in the order they arrived. If you use the send/receive primitives of the language the receiving process can choose in which order (to some degree) to process the messages in the mail box.
- OS level containerization of applications
- Similar to virtualization of OS
- Without the additional overhead of virtualization
- Uses namespaces in Linux to isolate applications without overhead of virtual OSes
- Docker hub: Library of available docker images that can be used
- Dockerfile : Used to define a container
- .dockerignore : Used to define files that will be ignored by Docker – useful to do something like “COPY . .” which copies everything, but not the ones that are ignored
- Docker compose : Used to define multi-container Docker application
- This is different from Kubernetes in the assumption that this is used to deploy to a single node (usually for local development) and Kubernetes is used for cluster deployment, and because of that Kubernetes focuses more on the cluster aspect of it (load balancing, replication, availabilty, deployment etc)
- Node: Worker machine on which kubernetes runs
- Kubelet: An agent ensuring containers in pods are running
- Kube proxy: A set of network rules
- Pod: A set of running containers on a node
- Container: Executable image (like docker)
- Service: Exposes app requests (internal node-to-node) or from outside (load balanced)
- Deployment: What does the desired “state” of the service look like? Eg, how many instances? This is done by a file called “deployment file” (yaml or json).
- Master: A special nodes that maintains cluster state (number of replicas etc), other nodes are called worker nodes.
- Handles failures / auto rebooting on crash
- Rolling updates (with high availabilty even if the number of replicas is 1)
- Mini-kube points kubectl to local installation to play around with Kubernetes https://minikube.sigs.k8s.io/docs/start/
- Networking in deployment.yml (ports)
- Service ports
- port : The port for internal communication between pods (this is for something internal like RPC)
- targetPort : The internal port to which external traffic is routed (this is on the worker)
- nodePort : Port accessible from outside the cluster (this port is usually on the master), this is the port exposed to the client
- ContainerPort : This is the port that a container within a pod listens on for traffic, eg port 80 for a default web server, this is where the application will read reqests from. A service forwards traffic to this port for the container to get the request. The targetPort must match to this if this pod expects external traffic.
- Service ports