kubernetes does:
graph LR api[API server] scheduler contrm[controller manager] etcd subgraph apigraph api --- apid[communicates with you and other control planes] end subgraph schedulergraph scheduler --- schedulerd[schedules your app] end subgraph controllergraph contrm --- contrmd[perform cluster-level functions /n e.g. keeping track of worker nodes] end subgraph etcdgraph etcd --- etcdd[data store - stores cluster config] end apigraph ~~~ schedulergraph ~~~ controllergraph ~~~ etcdgraph
graph LR info{push info} api[api server] controller scheduler kubelet contr[container runtime] kubep[kube proxy] info --> apigraph apigraph --> controllergraph controllergraph --> schedulergraph schedulergraph --> kubeletgraph kubeletgraph -- instructs --> contrgraph contrgraph ~~~ kubep subgraph master[master node] subgraph apigraph[ ] api --- apid[writes to etcd] end subgraph controllergraph[ ] controller --- controllerd[creates the object] end subgraph schedulergraph[ ] scheduler --- schedulerd[schedules work on the worker nodes] end end subgraph worker[worker node] subgraph kubeletgraph[ ] kubelet end subgraph contrgraph[ ] contr --- contrd[pulls required container] end subgraph kubepgraph[ ] kubep --- kubepd[readies load balancer] end end
graph LR subgraph wn1[worker node 1] subgraph pod1[pod 1 . IP A] ca[container A] end subgraph pod2[pod 2 . IP B] cb[container B] cd[container D] end subgraph pod3[pod 3 . IP C] cc[container C] end end
A method for exposing a network application that is running as one or more Pods in your cluster.
source: https://kubernetes.io/docs/concepts/services-networking/service/
graph LR deployment[deployment - manages replicas] --> pa[Pod A] deployment --> pb[Pod B] deployment --> pc[Pod C] pa[pods - number of instances of your application runs in] --> service pb --> service pc --> service service[service - exposes your application] --> ce[common entry]
graph TB con[controller] -- manages --> obj[object] con -- creates --> eo[event objects] eo -.-> con eo -.-> obj
= seperate computer
per restart takes longer because kube has exponential backoff.
kube manifests consists of following:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
k get pods <id> -owide (to get IP address)
minikube ssh (one off pod with curl command)
k port-forward <id> <port:port> (has a lot of layers between you and the pod)
init containers