Quanti pensieri potevano passarmi chiuso in quella stanza con te. Senza cellulare, nel silenzio ovattato di una notte in ospedale, con la preoccupazione che solo un genitore può capire. E’ andata bene ma sicuramente la vita può cambiare in un momento ed è solo allora che capisci cosa davvero conta, quanto ti crucci per un rumore che non porta mai alla felicità.
La felicità è vederti crescere ed affrontare le sfide delle vita con tanto coraggio. E tu caro Simone, sei molto più coraggioso di me, io mi sono ritrovato a fare quello che spero e mi permetterai di fare per tanto tempo.
Semplicemente tenerti la mano se vorrai e se mi sceglierai. Quanti errori faccio ma non quello peggiore, vedi ? Ci sono e ci sarò.
Mi torna in mente un verso meraviglioso di Father forgets, perchè in quel rimorso mi sono riconosciuto e mi ci riconosco.
Ascolta, figlio: ti dico questo mentre stai dormendo con la manina sotto la guancia e i capelli biondi appiccicati alla fronte. Mi sono introdotto nella tua camera da solo: pochi minuti fa, quando mi sono seduto a leggere in biblioteca, un’ondata di rimorso mi si è abbattuta addosso, e pieno di senso di colpa mi avvicino al tuo letto. E stavo pensando a queste cose: ti ho messo in croce, ti ho rimproverato mentre ti vestivi per andare a scuola perché invece di lavarti ti eri solo passato un asciugamani sulla faccia, perché non ti sei pulito le scarpe. Ti ho rimproverato aspramente quando hai buttato la roba sul pavimento. A colazione, anche li ti ho trovato in difetto: hai fatto cadere cose sulla tovaglia, hai ingurgitato cibo come un affamato, hai messo i gomiti sul tavolo. Hai spalmato troppo burro sul pane e, quando hai cominciato a giocare e io sono uscito per andare a prendere il treno, ti sei girato, hai fatto ciao ciao con la manina e hai gridato: “Ciao, papino !” e io ho aggrottato le sopracciglia e ho risposto: “Su diritto con la schiena!” E tutto e ricominciato da capo nel tardo pomeriggio, perché quando sono arrivato eri in ginocchio sul pavimento a giocare alle biglie e si vedevano le calze bucate. Ti ho umiliato davanti agli amici, spedendoti a casa davanti a me. Le calze costano, e se le dovessi comperare tu, le tratteresti con più cura. Ti ricordi più tardi come sei entrato timidamente nel salotto dove leggevo, con uno sguardo che parlava dell’offesa subita? Quando ho alzato gli occhi dal giornale, impaziente per l’interruzione, sei rimasto esitante sulla porta. “Che vuoi?” ti ho aggredito brusco. Tu non hai detto niente, sei corso verso di me e mi hai buttato le braccia al collo e mi hai baciato e le tue braccine mi hanno stretto con l’affetto che Dio ti ha messo nel cuore e che, anche se non raccolto, non appassisce mai. Poi te ne sei andato sgambettando giù dalle scale. Be’, figlio, e stato subito dopo che mi e scivolato di mano il giornale e mi ha preso un’angoscia terribile. Cosa mi sta succedendo? Mi sto abituando a trovare colpe, a sgridare; e questa la ricompensa per il fatto che sei un bambino, non un adulto? Non che non ti volessi bene, beninteso: solo che mi aspettavo troppo dai tuoi pochi anni e insistevo stupidamente a misurarti col metro della mia età. E c’era tanto di buono, di nobile, di vero, nel tuo carattere! Il tuo piccolo cuore cosi grande come l’alba sulle colline. Lo dimostrava il generoso impulso di correre a darmi il bacio della buonanotte. Nient’altro per stanotte, figliolo. Solo che sono venuto qui vicino al tuo letto e mi sono inginocchiato, pieno di vergogna. E una misera riparazione, lo so che non capiresti queste cose se te le dicessi quando sei sveglio. Ma domani sarò per te un vero papa. Ti sarò compagno, starò male quando tu starai male e riderò quando tu riderai, mi morderò la lingua quando mi saliranno alle labbra parole impazienti. Continuerò a ripetermi, come una formula di rito: “‘E ancora un bambino, un ragazzino!” Ho proprio paura di averti sempre trattato come un uomo. E invece come ti vedo adesso, figlio, tutto appallottolato nel tuo lettino, mi fa capire che sei ancora un bambino. Ieri eri dalla tua mamma, con la testa sulla sua spalla. Ti ho sempre chiesto troppo, troppo.
“ Forse l’amore é un artefatto di un’altra dimensione che non possiamo percepire consciamente… è l’unica cosa che possiamo percepire che trascende le dimensioni di tempo e spazio. Forse di questo dovremmo fidarci anche se non riusciamo a capirlo ancora. “
Prendi tua figlia, portala a Siracusa, siediti sui gradoni del teatro greco e insegnale lo splendore della disubbidienza. E’ rischioso ma è più rischioso non farlo mai.
Grabriele Romagnoli, dall’articolo “Cercasi Antigone per la Rivoluzione”, Vanity Fair del 5-06-2013, pag. 74
“Antigone”, disse sua sorella”Ti uccideranno”. “In qualche modo dovrò pur morire”, disse Antigone sempre rivolgendole le spalle. “Dovrò passare molto più tempo da morta che da viva”. “Sei pazza”, le disse la sorella.” E mi fai paura. Ma giuro. Non racconterò a nessuno quello che stai per fare”. L’affermazione fece girare la sorella minore per guardare di nuovo la maggiore negli occhi. ” URLALO PURE CON TUTTA LA VOCE CHE HAI!”, strillò.” NON MI IMPORTA CIO’ CHE DICI. NON MI IMPORTA CIO’ CHE CREONTE DICE. NON MI IMPORTA CIO’ CHE DICE LA GENTE, NON MI IMPORTA DI NESSUNO.”
Da “La storia di Antigone raccontata da Ali Smith” , 2011, Gruppo editoriale L’Espresso. Illustrazioni di Laura Paoletti.
Quando mi chiedono perché ho chiamato mia figlia primogenita Antea non dico mai la verità perché temo di apparire troppo intellettuale radical chic, di fare la figura della snob (che non sono) e quindi rispondo delle ragioni che sono più o meno vere , ma che non sono LA ragione principale. Dico che l’ho scelto perché è un nome raro e originale ma al tempo stesso semplice e dolce, perché l’etimologia richiama la parola greca che significa “fiore” (anthos), perché il nonno paterno si chiama Antonio e i due nomi hanno la stessa radice, perché all’Università avevo una compagna di studi che ho poi perso di vista che si chiamava così ed era bellissima e intelligentissima. Ma la verità è che mia figlia si chiama così perché circa 2500 anni fa un tragediografo, Sofocle, ha reso immortale uno dei personaggi della mitologia greca più affascinanti: Antigone. Dicevano i latini che nel nome c’è il nostro destino (“nomen est omen”) ma non auguro di certo il destino di Antigone ad Antea: figlia di Edipo, che si cava gli occhi quando scopre di aver amato la madre, Antigone si oppone al divieto imposto dallo zio Creonte di seppellire il corpo del fratello Polinice che doveva giacere, privo di dignità e pietà umana, in pasto alle carogne e agli uccelli rapaci, perché si era opposto al fratello Eteocle, usurpatore del trono tebano. La ribellione di Antigone ad una legge iniqua, che va contro la legge di natura di dare degna sepoltura ai morti, le costerà la vita. Nel nome di mia figlia, così come in quello di Antigone, c’è questa parola: “anti”, questo seme di ribellione e di anticonformismo che spero germogli perché, come scrive Romagnoli nel suo articolo:
Tutte le istituzioni, per prima la famiglia, insegnano ai bambini il valore dell’obbedienza. Antigone insegna quello della disobbedienza. L’obbedienza porta un premio, la disobbedienza un castigo. Richiede coraggio, spirito di sacrificio, idealismo. Ma è la disobbedienza lo strappo che consente alla storia di avanzare sul solco della giustizia e non in quello della volontà di un qualunque governante.
Ecco perché mia figlia l’ho chiamata Antea: perché volevo che il nome le trasmettesse, per “osmosi”, proprio queste virtù che elenca Romagnoli: il coraggio, lo spirito di sacrificio, l’idealismo. Perché Antigone è Ipazia, che nel IV sec d. c. viene uccisa per difendere il suo amore per la scienza, è Malala Yousafzi, che ha quasi perso la vita per affermare il diritto allo studio delle bambine pakistane, è Eleonora Pimental de Fonseca, è Rosa Parks, è Dolores Ibàrruri, e tante altre ancora e, in questi giorni, è la ragazza vestita di rosso che al Gezi Park di Istanbul resta immobile di fronte al getto dell’idrante della polizia, simbolo dell’ accecante splendore della disobbedienza.
We have a PHP application running with Kubernetes in pods with two dedicated containers — NGINX и PHP-FPM.
The problem is that during downscaling clients get 502 errors. E.g. when a pod is stopping, its containers can not correctly close existing connections.
So, in this post, we will take a closer look at the pods’ termination process in general, and NGINX and PHP-FPM containers in particular.
Testing will be performed on the AWS Elastic Kubernetes Service by the Yandex.Tank utility.
Для управления контейнерами на Kubernetes WorkerNodes испольузется Docker.
Pod Lifecycle — Termination of Pods
So, let’s take an overview of the pods’ stopping and termination process.
Basically, a pod is a set of processes running on a Kubernetes WorkerNode, which are stopped by standard IPC (Inter-Process Communication) signals.
To give the pod the ability to finish all its operations, a container runtime at first ties softly stop it (graceful shutdown) by sending a SIGTERM signal to a PID 1 in each container of this pod (see docker stop). Also, a cluster starts counting a grace period before force kill this pod by sending a SIGKILL signal.
The SIGTERM can be overridden by using the STOPSIGNAL in an image used to spin up a container.
Thus, the whole flow of the pod’s deleting is (actually, the part below is a kinda copy of the official documentation):
a user issues a kubectl delete pod or kubectl scale deployment command which triggers the flow and the cluster start countdown of the grace period with the default value set to the 30 second
the API server of the cluster updates the pod’s status — from the Running state, it becomes the Terminating (see Container states). A kubelet on the WorkerNode where this pod is running, receives this status update and start the pod’s termination process:
if a container(s) in the pod have a preStop hook – kubelet will run it. If the hook is still running the default 30 seconds on the grace period – another 2 seconds will be added. The grace period can be set with the terminationGracePeriodSeconds
when a preStop hook is finished, a kubelet will send a notification to the Docker runtime to stop containers related to the pod. The Docker daemon will send the SIGTERM signal to a process with the PID 1 in each container. Containers will get the signal in random order.
simultaneously with the beginning of the graceful shutdown — Kubernetes Control Plane (its kube-controller-manager) will remove the pod from the endpoints (see Kubernetes – Endpoints) and a corresponding Service will stop sending traffic to this pod
after the grace period countdown is finished, a kubelet will start force shutdown – Docker will send the SIGKILL signal to all remaining processes in all containers of the pod which can not be ignored and those process will be immediately terminated without change to correctly finish their operations
kubelet triggers deletion of the pod from the API server
API server deletes a record about this pod from the etcd
Actually, there are two issues:
the NGINX and PHP-FPM perceives the SIGTERM signal as a force как “brutal murder” and will finish their processes immediately , и завершают работу немедленно, without concern about existing connections (see Controlling nginx and php-fpm(8) – Linux man page)
the 2 and 3 steps — sending the SIGTERM and an endpoint deletion – are performed at the same time. Still, an Ingress Service will update its data about endpoints not momentarily and a pod can be killed before then an Ingress will stop sending traffic to it causing 502 error for clients as the pod can not accept new connections
$ kubectl apply -f test-deployment.yaml namespace/test-namespace created deployment.apps/test-deployment created service/test-svc created ingress.extensions/test-ingress created
Check the Ingress:
$ curl -I aadca942-testnamespace-tes-5874–698012771.us-east-2.elb.amazonaws.com HTTP/1.1 200 OK
But still, if repeat tests few times we still can get some 502 errors:
This time most likely we are facing the second issue — endpoints update is performed at the same time when the SIGTERM Is sent.
Let’s add a preStop hook with the sleep to give some time to update endpoints and our Ingress, so after the cluster will receive a request to stop a pod, a kubelet on a WorkerNode will wait for 5 seconds before sending the SIGTERM:
But it didn’t help. Not sure why as the idea seems to be correct — instead of waiting for the TERM from Kubernetes/Docker – we gracefully stopping the NGINX master process by sending QUIT.
You can also run the strace utility check which signal is really received by the NGINX.
NGINX + PHP-FPM, supervisord, and stopsignal
Our application is running in two containers in one pod, but during the debugging, I’ve also tried to use a single container with both NGINX and PHP-FPM, for example, trafex/alpine-nginx-php7.
There I’ve tried to add to stopsignal to the supervisor.conf for both NGINX and PHP-FPM with the QUIT value, but this also didn’t help although the idea also seems to be correct.
Also, it can be a good idea to use the [Connection: close] header – then the client will close its connection right after a request is finished and this can decrease 502 errors count.
But anyway they will persist if NGINX will get the SIGTERM during processing a request.
Install a custom Kubernetes cluster with Rancher. Use the ‘Custom’ cluster.
Add Kubernetes nodes and join the Kubernetes cluster
Run the following commands on all the VMs that your Kubernetes cluster will run on. The final docker command will have the VM join the new Kubernetes cluster.
Replace the –server and –token with your Rancher server and cluster token.
kubectl patch storageclass fast -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’
Using the default Nginx Igress
Rancher automatically installs the nginx ingress controller on all the nodes in the cluster. If you are able to expose one of the VMs in the cluster to the outside world with a public IP then you can connect to the ingress based services on ports 80 and 443.
Any app you want to be accessible through the default nginx ingress must be added to the ‘default’ project in Rancher.