Ă un moment donnĂ©, chez okmeter.io, nous avons rĂ©alisĂ© que nous avions Ă©galement besoin de k8 en production, bien que nous n'ayons mĂȘme pas de CI / CD, mais il y a une tĂąche pour partager un pool de serveurs commun entre les applications et il est assez facile d'ajouter des capacitĂ©s au cluster. Dans le mĂȘme temps, un certain nombre de circonstances ont compliquĂ© la mise en Ćuvre de k8:
- nous nous soucions beaucoup de la tolérance aux pannes (nous n'introduisons pas de nouvelles technologies tant que nous ne les comprenons pas à un niveau suffisant);
- nous avons des services avec des temps de réponse inférieurs à 10 ms;
- nous avons trĂšs peu de ressources humaines pour cette tĂąche (apprenez 10 nouveaux termes OK, 50 - plus).
: 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 ?
J'ai juste peur de ces mots. Nous avons fait du monitoring des K8, et nous avons dĂ» faire un banc de test sur des machines virtuelles afin de faire une dĂ©mo de monitoring. LĂ , par dĂ©faut, Kubespray a dĂ©ployĂ© Calico. Cela fonctionne, mais je ne comprends pas comment cela fonctionne. Nous nâavons effectuĂ© aucun benchmark lĂ -bas, je ne sais pas comment cela fonctionne. Et comment ça va casser, je ne sais pas. Je sais comment la flanelle va se casser, je suis prĂȘt pour ça. Et comment tous les 19 autres plugins vont casser, je ne sais pas.
Cette question est intéressante en termes de protection des données afin de séparer un réseau sécurisé, non sécurisé.
Nous sommes bénis à cet égard, nous n'avons rien de tel.
Tu es trĂšs chanceux.
Alors merci!