Em algum ponto, nós da okmeter.io percebemos que também precisamos de k8s em produção, embora não tenhamos nem mesmo um CI / CD, mas há uma tarefa de compartilhar um pool de servidores comum entre aplicativos e é muito fácil adicionar capacidades ao cluster. Ao mesmo tempo, houve uma série de circunstâncias que complicaram a implementação do k8s:
- nos preocupamos muito com a tolerância a falhas (não arrastamos novas tecnologias para a produção até que as entendamos em um nível suficiente);
- temos serviços com tempos de resposta inferiores a 10ms;
- temos muito poucos recursos humanos para esta tarefa (aprenda 10 novos termos OK, 50 - não mais).
: 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 ?
Estou apenas com medo dessas palavras. Fizemos monitoramento de K8s, e tivemos que fazer uma bancada de teste em máquinas virtuais para fazer uma demonstração de monitoramento. Lá, por padrão, Kubespray implantou Calico. Funciona, mas não entendo como funciona. Não rodamos nenhum benchmark lá, não sei como funciona. E como vai quebrar, não sei. Eu sei como a flanela vai quebrar, estou pronto para isso. E como todos os outros 19 plug-ins irão quebrar, eu não sei.
Esta questão é interessante em termos de proteção de dados para separar uma rede segura e não segura.
Somos abençoados nesse aspecto, não temos nada parecido.
Você tem muita sorte.
Então, tnank você!