Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.86 KB | None | 0 0
  1. Kubernetes - cluster orchiestration system
  2. Katacoda - jakiś remote terminal
  3. Minikube - jakiś mały predefiniowany kluster
  4.  
  5. Kubernetes coordinates a highly available cluster of computers that are connected to work as a single unit.
  6.  
  7. Trzeba najpierw tworzyć aplikacje tak by były niezależne od konkretnego hosta - konteneryzacja
  8. - zmienne środowiskowe
  9. - sieć lokalna
  10. - adres bazy danych
  11. - jndi
  12.  
  13. Klaster kubernetesowy definiuje 2 typy zasobów:
  14. - master - coordinates the cluster
  15. - node - is the worker
  16.  
  17. Odpowiedzialności mastera
  18. - schedulling applications
  19.  
  20. Node
  21. - maszyna wirtualna albo fizyczny komputer
  22. - każdy Node posiada agenta - o nazwie Kubelet - jego zadaniem jest komunikacja z masterem.
  23.  
  24. Master wystawia restowe api, Kubelety gadają z nim po httpie. Możliwe jest też gadanie z masterem bezpośrednio - curlem, albo jakimś klientem httpa
  25.  
  26. Produkcyjny klaster powinien mieć najmniej 3 node'y - nie wiem czemu, tak napisane na stronce
  27.  
  28. kubectl
  29. - command line interface do mastera kubernetesa
  30. - stuka po httpie do kubernetes mastera
  31. - najczęsciej polecenie wygląda: $kubectl <action> <resource>
  32.  
  33. $ minikube start # odpala kuburnetes master'a
  34.  
  35. $ kubectl cluster-info
  36. Kubernetes master is running at https://172.17.0.25:8443
  37.  
  38. $ kubectl get nodes
  39. NAME STATUS ROLES AGE VERSION
  40. minikube Ready <none> 6m v1.10.0
  41.  
  42. Status = ready - it is ready to accept applications for deployment
  43.  
  44. Kubernetes Deployment Controller
  45. - monitoruje Node'y
  46. - jeśli któryś Node się wywalił(np błąd sprzętowy) wymienia go (co to znaczy wymienia?)
  47.  
  48. Kubernetes Deployment
  49. - obiekt, który się tworzy
  50. - według niego tworzony jest klaster
  51.  
  52. Przed orchiestracją skrypty deployujące nie pozwalały na monitorowanie i reagowanie na błędy sprzętowe. Troche to ściema, ale tak jest w tutorialu napisane
  53.  
  54. kubectl run - tworzy nowy deployment
  55. - trzeba podać nazwę deploymentu oraz lokalizację obrazu
  56. - odpalenie komendy:
  57. - tworzy obiekt Deployment
  58. - wyszukuje Node'a 'odpowiedniego' do uruchomienia obrazu(co to znaczy odpowiedniego)
  59. - odpala obraz na danym Node'ie - tak naprawdę odpala Pod'a a w nim obraz(y)
  60. - zapamiętuje obraz i Node żeby wiedzieć gdzie go odpalić jak się wywali
  61.  
  62. $ kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
  63. deployment.apps "kubernetes-bootcamp" created
  64.  
  65. $ kubectl get deployments
  66. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  67. kubernetes-bootcamp 1 1 1 1 1m
  68.  
  69. Pody działają w prywatnej, odizolowanej sieci. Domyślnie są widoczne dla innych pod'ów i service'ów w danym klastrze.
  70.  
  71. $ kubectl proxy
  72. Starting to serve on 127.0.0.1:8001
  73. - połączenie ssh do kubernetes master'a
  74. - dzięki temu możemy wejść w przeglądarce na localhost:8001
  75. - np: curl localhost:8001/version zwraca json'a
  76.  
  77. Kubernetes nadaje sam nazwy pod'om
  78.  
  79. Pod := zdefiniowana przez kubernetesa abstrakcja oznaczająca 1 lub więcej kontenerów oraz zbiór zasobów, które współdzielą
  80. te zasoby to przykładowo:
  81. - https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/
  82.  
  83. Pod = adres IP + zbiór Volume's + zbiór kontenerów
  84.  
  85. Volume := A directory containing data, accessible to the containers in a pod.
  86. A Kubernetes volume lives as long as the pod that encloses it. Consequently, a volume outlives any containers that run within the pod , and data is preserved across container restarts.
  87.  
  88. The containers in a Pod share an IP Address and port space, are always co-located and co-scheduled, and run in a shared context on the same Node.
  89.  
  90. Each Pod is tied to the Node where it is scheduled, and remains there until termination (according to restart policy) or deletion. In case of a Node failure, identical Pods are scheduled on other available Nodes in the cluster.
  91.  
  92. Node(w znaczeniu workera) działa na VM albo na fizycznym komputerze.
  93. Pod działa na jednym Node'ie. Pod zawiera n kontenerów.
  94.  
  95. Kontener
  96. - należy do konkretnego Pod'a(z którego ciągnie IP i współdzieli zasoby)
  97. - ma swoje id
  98. - ma ścieżke na obraz
  99. - ma identyfikator obrazu
  100. - port
  101. - status
  102.  
  103. $ kubectl get - list resources
  104. $ kubectl describe - show detailed information about a resource
  105. $ kubectl logs - print the logs from a container in a pod
  106. $ kubectl exec - execute a command on a container in a pod
  107.  
  108. Pod ma coś co się nazywa Event.
  109. Event
  110. - type: warning, error
  111. - reason, age, from, message
  112.  
  113. Pod'y (jak to było napisane wcześniej) działają w prywatnej, odizolowanej siecie - stądteż, aby się z nimi połączyć potrzebne jest proxy.
  114.  
  115. Sztuczka na poranie nazwy pod'a: (wykonać po zestawieniu proxy)
  116. $ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
  117. $ echo Name of the Pod: $POD_NAME
  118. Name of the Pod: kubernetes-bootcamp-5c69669756-7ljbx
  119.  
  120. Wszystko co aplikacja wypluje na stdout staje się logiem pod'a
  121.  
  122. $ kubectl logs $POD_NAME
  123. - pokazuje logi, należy także podać nazwę kontenera, ale jak jest jeden kontener to nie trzeba
  124.  
  125. $ kubectl exec -ti $POD_NAME bash
  126. - otwarcie bash'a(konsoli) dla danego pod'a(trzeba podać także nazwę kontenera, ale był jeden)
  127.  
  128. Pod'y kubernetesowe umierają. Pod'y mają zdefiniowany cykl życia. Kiedy zdechnie Node -> zdychają z nim wszystkie pod'y w nim zawarte.
  129. ReplicationController może reagować na to zdechnięcie.
  130.  
  131. Aplikacja frontendowa nie wie nic o pod'ach, ani w który kontener stuknie itp.
  132. Pojawia się więc pytanie:
  133. - skoro każdy pod ma inny adres IP, pod'y umierają i są wskrzeszane - jak zachować połączenie aplikacji frontendowej do backu(wraz z zachowaniem sesji),
  134. , tak aby nie obciążać dodatkowo aplikacji frontendowej
  135. Odpowiedź:
  136. -
  137.  
  138. A Service in Kubernetes is an abstraction which defines a logical set of Pods and a policy by which to access them.
  139.  
  140. Service
  141. - zdefiniowany przy użyciu yaml'a(preferowane), albo json'a. (na stronce też napisane: tak jak każdy obiekt kubernetesowy)
  142. - Services enable a loose coupling between dependent Pods.
  143. - The set of Pods targeted by a Service is usually determined by a LabelSelector
  144.  
  145. Tylko(chyba 'tylko') Service jest w stanie wystawić IP danego pod'a poza klaster.
  146.  
  147. Label
  148. - jest to para klucz-wartość przypisana do obiektów
  149. - za pomocą selektorów, można wyjąć obiekty z danymi labelami
  150. - np: odróżnienie - produkcja/test, wersja aplikacji,
  151.  
  152. $ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
  153. service "kubernetes-bootcamp" exposed
  154. - argument type:
  155. - NodePort, ClusterIp(domyślny), LoadBalancer, ExternalName
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163. 9:30 - Wejście w chmurę — perspektywa programisty Michał Kosmulski
  164. 10:35 - Micro-monolith anti-pattern Tomasz Fijałkowski - albo - Odzyskaj kontrolę nad aplikacją Bartek Zdanowski
  165. 11:40 - Jak być zarąbistym developerem w oczach szefa i ... klienta Wojciech Seliga - albo - Async, wszędzie async Arkadiusz Migała
  166. 12:45 - (Too) Smart UI? Jak projektować API REST-owe Szymon Janikowski
  167. 14:30 - Requirements & BDD: The lost art of analysis and acceptance scenarios Jakub Nabrdalik - albo - Zero-Downtime deployments of Java applications with Kubernetes Mateusz Dymiński
  168. 15:35 - Reactive programming with Flux in Java Łukasz Rekucki (lqc)(trochę lipa bo mało o tym wiem i mogę wiele nie wynieść) - albo - Jak rozwalić zespół w od 3 do 12 sprintów – 7 praktycznych porad Jakub Marchwicki Anna Wiosna Rogowska
  169. 16:40 - REST - know the rules Dominik Przybysz - albo - Data Lake w świecie Big Data - case study z wdrożenia Dawid Detko
  170.  
  171.  
  172. TODO - programowanie reaktywne vs zdarzeniowe(event-driven)
  173. - zdarzeniowe operuje na atomowych zdarzeniach
  174. - reaktywne na bardziej generycznych danych
  175. - dla programowania reaktywnego może istnieć pojęcie mapowania strumienia, agregowania strumienia, łączenie
  176. - dla programowania zdarzeniowego pojęcie mapowania strumienia eventów nie ma sensu
  177.  
  178. Reactive programming is programming with asynchronous data streams.
  179. - tymi asynchronicznymi strumianiami danych może być cokolwiek(nie tylko kliknięcia użytkownika jak w zdarzeniowym(chyba to jest prawda)) - ale cokolwiek.
  180.  
  181. Do tego dochodzą mechanizmy tworzenia, filtrowania, grupowania, mapowania itp tych strumieni - te dodatkowe mechanizmy to serce programowania reaktywnego.
  182.  
  183. Te strumienie można nasłuchiwać jedynie asynchronicznie.
  184. Słuchanie na stream określa się jako subscribing.
  185.  
  186. W skład streama może wchodzić
  187. - wartość
  188. - błąd
  189. - sygnał końca
  190.  
  191. The idea of event-driven programming is orthogonal to the idea of imperative vs. OO vs. functional.
  192.  
  193. Functional programming is the process of building software by composing pure functions, avoiding shared state, mutable data, and side-effects.
  194. Reactive programming is an asynchronous programming paradigm concerned with data streams and the propagation of change.
  195.  
  196. https://www.reactivemanifesto.org/
  197. Reactive systems are:
  198. Responsive – systems should respond in a timely manner
  199. Message Driven – systems should use async message-passing between components to ensure loose coupling
  200. Elastic – systems should stay responsive under high load
  201. Resilient – systems should stay responsive when some components fail
  202.  
  203. filter, map, reduce(kolekcja na jedną wartość, myArray.reduce(accumulator, (el) => el.someField, 0 /*start value of accumulator*/)
  204.  
  205.  
  206. Tutorial programowania funkcyjnego by fun fun function
  207. 1) High Order functions:
  208. - functions are value:
  209. - możne je przypisać do zmiennej, można je podać jako argument, funkcja może je zwrócić
  210. - funckje które podaje się jako argument funkcji określa się jako 'callback function', ponieważ ta funkcja will callback to them
  211. - funkcje, które jako argument przyjmują(albo zwracają) inne funkcje określa się jako 'High-order function'.
  212. 2) Map - bez komentarza
  213. 3&4) reduce
  214. 5) closures - funkcja wraz z kontekstem zdefiniowanie tejże
  215. 6) currying - funkcja, której stopniowo nadajemy kontekst:
  216. var dragon =>
  217. name =>
  218. size =>
  219. element =>
  220. return name + 'is a ' + size + ' dragon that breathes ' + element;
  221. - sporo bibliotek oferuje możliwość przemienienia dowolną funkcję na funkcję curryingowalną
  222. 7) rekurencja
  223. 8) promises
  224. promise is not a value, it is a promise of a value
  225. EcmaScript wspiera tworzenie promise'ów - nie wiem czy to zdanie nie jest jakiś krzywe
  226. var loadSomething = new Promise((resolve, reject) => { // both resolve and reject are functions
  227.  
  228. });
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243. https://www.reactivemanifesto.org/
  244.  
  245. https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
  246.  
  247.  
  248. Istnieje coś takiego jak Web Worker - jest to taki mechanizm, który pozwala pisać aplikacje wielowątkowe w JavaScriptcie. Główny wątek z workerem
  249. porozumiewają się poprzez message, wiadomością są kopiowane i przesyłanie(nie - współdzielone).
  250.  
  251.  
  252.  
  253.  
  254.  
  255. Istotny koncept programowania reaktywnego: immutability
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement