Kubernetes fĂŒr ĂŒber 30-JĂ€hrige. Nikolay Sivko (2018)



Irgendwann haben wir bei okmeter.io festgestellt, dass wir auch k8s in der Produktion benötigen, obwohl wir nicht einmal eine CI / CD haben, aber es gibt eine Aufgabe, einen gemeinsamen Serverpool zwischen Anwendungen zu teilen, und es ist ziemlich einfach, dem Cluster KapazitĂ€ten hinzuzufĂŒgen. Gleichzeitig gab es eine Reihe von UmstĂ€nden, die die Implementierung von k8s erschwerten:



  • Wir legen großen Wert auf Fehlertoleranz (wir bringen neue Technologien erst dann in die Produktion, wenn wir sie auf einem ausreichenden Niveau verstehen).
  • Wir haben Dienste mit Antwortzeiten von weniger als 10 ms.
  • Wir haben nur sehr wenige Mitarbeiter fĂŒr diese Aufgabe (lernen Sie 10 neue OK-Begriffe, 50 - nicht mehr).




: 2018 , issue .





. Okmeter.io. . , . , . .





?



, , , , – .



Kubernetes.





.



Okmeter.io. :



  • , , , auto discovery.
  • , .


:



  • , , . . , . Python Go.
  • - , . Kafka, Cassandra, Elasticsearch, PostgreSQL.
  • . , , latency. .
  • DevOps , CI/CD, pipeline. , .
  • . , ( ), . , . read , . . , , .
  • , , , , – , 2 , , , .
  • .




, .



Google App Engine. . , . .



, , . , latency . .



, - . . Cassandra, Elasticsearch, Go Python.





, Elasticsearch.



, Elasticsearch , , CPU. Python.





. , Go stateless, , -, , , CPU - .



, . , , .





?



  • Ansible , , , , server -> roles . .
  • , . Ansible , , . , , , .
  • , Ansible, , , . – playbooks . , , playbooks production. , , . , .




, , instance, ?



  • inventory. , - - .
  • . , , . , . .




, , , .



  • , Kubernetes , . , .
  • , , . . , , , , , , .
  • , . . Request + Limit – , .




Kubernetes. . . . , , . , , , instances. , OOM killer, , . , , .



, , , . .



, health checks , . , , .





Ansible . Ansible? , , . , . Ansible, , .



Kubernetes, , . - . , , over kill.





, ? :



  • — , , .
  • – Ansible , , Kubernetes .




Kubernetes , Ansible? Kubernetes apply, , , . . -, , . , – , .



, ? - ? , . , pod. , , Ansible. , , .





? service discovery. , . nginx, upstream’. . . . . , , service discovery. . Kubernetes.



, . , , . - , . DNS, ETCD. , , . .





, , , , . , readiness/ liveness-. , , curl, , Kubernetes .



? , pull . , , . pod, IP, . pull . , . , , .



, , pod . , , . graceful shutdown . . , .



. , RequestID, tracing, , , . , pod – , .





– . Kubernetes, , , L2 , , .





, , ? , 20 , . ? . bgp. , bgp. bgp 10 ?



Kubernetes , service discovery iptables , . . daemon, iptables. , . , , , , .





. 20 , . iptables , .



, , . IP pod’ IP . , . SR-IOV. , 128 . switch . . , , .



, . . , -, , , . - . flannel host-gw. 24- . , , -. , .





iptables kube-proxy, , iptables Kubernetes. Google , . . headless services .





?



  • , K8s .
  • , , CI/CD.
  • . . . , ? , .
  • production .




, :



  • , K8s. docker , , Python. Go – . , docker . .
  • docker . Ansible docker: « , , ».
  • , . .




. , - etcd, ConfigMap, . , . , reconfig. , .



Helm . , .





, Helm. update/ rollback pod’, immutable ConfigMap, . , , , , , rolling update, , . , . . , production , . ConfigMap, ConfigMag.





, , – .



– , . - . pod, , immutable. , . , Helm.





. Go- , YAML . , - , -. YAML, . – .





Python Django . Settings.py – . settings . .





, , , K8s stateful . , : Cassandra, Kafka. -, , .



, , Ansible. Ansible , - K8s . ?





Kubernetes – Ansible playbook. . . playbook, , , K8s.





production - - .



. request/ limit.



, , . CPU . . , pod’ . , - , CPU.





, . , , - , OOM Killer . , 100 , .





– deployments - . , , selector , pod deployments. OOM Killer , . . deployment , . , .





- - . , – . K8s back-off. . .





, , , 
, back-off .



, rollout, . . , . , , . . . . , .





, , , iptables headless. ? selector, pod’, . pod’ readiness probe, . endpoint, , . . endpoint – pod’.



IP . IP, pod.



IP. , . , iptables , upstream, .



DNS-.





? , pod. readiness probe kubelet . . , kubelet’ apiserver.



kube-proxy . kube-proxy . , .





?



  • Probes . , , .
  • . 10 000 rps, , .
  • . Kubelet -> apiserver -> kube-proxy-> iptables. , .
  • , kubelet apiserver? kube-proxy iptables? , .
  • , iptables pod, . , , . retries.




, headless service – , .



. etcd, apiserver, DNS.





envoy, L7, retry. http, retry , . , , application level . , ? Envoy.





. envoy. DNS. K8s DNS, endpoints. , . , .



envoy DeamonSet, , sidecar container. ? - .



envoy, -, , , pod’ . . . rolling-update. - , , pod .





. . . envoy nginx -t. . , : «, ». . , pod’ .



, sidecar . envoy , .





. envoy. , resolve , , 3 DNS. , envoy resolve. . . . , health check, retry.





, service mesh . service mesh, . . , .



- , GitHub , . envoy. , istio , . .





ingress-. IP, K8s-. K8s, , .



DaemonSet envoy, . DaemonSet – . IP , DaemonSet, IP - . . 3 - 4, 5, 10 upstream .



DaemonSet rolling .





ingress controller, , nginx - ingress K8s. , . . , , envoy, DaemonSet, ingress controller. . DaemonSet, . ingress.





, . .



Kubespray – , , 20 K8s-.



, , , , . , , .



playbook .





?



etcd c apiserver’. . full mesh.





, Kubelet 
, . , , . . pod , . , .





CoreDNS. deployment. deployment, iptables, .



iptables, DNS deployment DaemonSet. , , . DNS , -, .





3 + N . , , . , Ansible. , .



Stateful- , , . .



, Kafka 4 10 . Kubelet , . , overbooked .





, , flannel . pod’. . 1/0. pod’ . . . . . , .





, , . , , , egress, , . flannel NAT. pod’ .



, . NAT.





  • . .
  • , . , .
  • - . . , , . , - , . 3 , , , , .
  • , Kubernetes, , . , , .




Kubernetes .





Kubernetes .



, . !



:



, ! follower, , , , Kubernetes, - ? Kubernetes ?



, , Kubernetes . , . , . . , .



, , , , , , , , . , service discovery . , , , , .



! Stateful- , . HA ? HAProxy K8s?



Cassandra . , , . . endpoints IP , .



Postgres?



Postgres . Postgres’ , . . , . , , . Postgres - . , , -, . Postgres , .



, ! ! latency. , , latency . , ?



. . . iptables , . iptables, . , , .



20 . - ?



flannel .



, , Open vSwitch ?



Ich habe nur Angst vor diesen Worten. Wir haben die Überwachung von K8s durchgefĂŒhrt und mussten einen PrĂŒfstand fĂŒr virtuelle Maschinen erstellen, um eine Demo der Überwachung zu erstellen. Dort setzte Kubespray standardmĂ€ĂŸig Calico ein. Es funktioniert, aber ich verstehe nicht, wie es funktioniert. Wir haben dort keine Benchmarks durchgefĂŒhrt, ich weiß nicht, wie es funktioniert. Und wie es brechen wird, weiß ich nicht. Ich weiß, wie Flanell brechen wird, ich bin bereit dafĂŒr. Und wie all die anderen 19 Plugins kaputt gehen, weiß ich nicht.



Diese Frage ist im Hinblick auf den Datenschutz interessant, um ein sicheres, ungesichertes Netzwerk zu trennen.



Wir sind in dieser Hinsicht gesegnet, wir haben nichts dergleichen.



Du bist sehr glĂŒcklich.



Also danke!




All Articles