Kubernetes para mayores de 30 años. Nikolay Sivko (2018)



En algún momento, en okmeter.io nos dimos cuenta de que también necesitamos k8 en producción, aunque ni siquiera tenemos un CI / CD, pero hay una tarea para compartir un grupo de servidores común entre aplicaciones y es bastante fácil agregar capacidades al clúster. Al mismo tiempo, hubo una serie de circunstancias que complicaron la implementación de k8s:



  • nos preocupamos mucho por la tolerancia a fallas (no arrastramos nuevas tecnologías a la producción hasta que las entendemos a un nivel suficiente);
  • contamos con servicios con tiempos de respuesta menores a 10ms;
  • ( 10 , 50 — ).




: 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 ?



Solo tengo miedo de estas palabras. Hicimos monitoreo de K8s, y tuvimos que hacer un banco de pruebas en máquinas virtuales para poder hacer una demostración de monitoreo. Allí, de forma predeterminada, Kubespray implementó Calico. Funciona, pero no entiendo cómo funciona. No ejecutamos ningún punto de referencia allí, no sé cómo funciona. Y cómo se romperá, no lo sé. Sé cómo se romperá la franela, estoy listo para ello. Y cómo se romperán los otros 19 complementos, no lo sé.



Esta pregunta es interesante en términos de protección de datos para separar una red segura, no segura.



Somos bendecidos en este sentido, no tenemos nada de eso.



Tienes mucha suerte.



¡Así que tnank!




All Articles