Docker - Kubernetes


Глоссарий

  • Node - физическая или виртуальная машина
  • Pod - базовая еденица для упр. и запуска приложения, один (или несколько) контейнеров. Запускается с единым IP адресом. Можно запускать несколько контейнорв (frontend, backend например) в одном поде
  • Service - Набор подов
    • ClusterIP - сервис, который доступен только внутри кластера
    • NodePort - проброс порта из кластера во вне
    • LoadBalancer - трафик из внешних балансировщиков ?
    • ExternalName - единая точка на запросы ?
  • Ingress - точка входа в кластер (nginx-ingress controller)
  • Label

Устанока/Запуск

установка kubectl


curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client

установка minikube


curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

автокомплит в .bashrc


echo "source <(kubectl completion bash)" >> ~/.bashrc

echo "source <(minikube completion bash)" >> ~/.bashrc

Предварительная настройка


$ minikube start
😄  minikube v1.7.3 on Ubuntu 16.04
✨  Automatically selected the virtualbox driver. Other choices: none, docker (experimental)
💿  Downloading VM boot image ...
    > minikube-v1.7.3.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.7.3.iso: 167.39 MiB / 167.39 MiB [] 100.00% 15.99 MiB p/s 11s
🔥  Creating virtualbox VM (CPUs=2, Memory=2000MB, Disk=20000MB) ...

локальный дашбоард


$ minikube dashboard
🔌  Enabling dashboard ...
🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...
🎉  Opening http://127.0.0.1:45827/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
Окно или вкладка откроются в текущем сеансе браузера.

запуск тестового пода


$ kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

инфо по деплое


$ kubectl get deployments
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
hello-node   1/1     1            1           36s

инфо о подах


$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
hello-node-7676b5fb8d-k4rv5   1/1     Running   0          92s

инфо о сервисах


$ kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    none          443/TCP   35m

сделать под публичным


$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080
service/hello-node exposed
$ kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.110.30.32   pending       8080:32471/TCP   3s
kubernetes   ClusterIP      10.96.0.1      none          443/TCP          37m
  • Флаг –type=LoadBalancer показывает, что сервис должен быть виден вне кластера.

$ minikube service hello-node
|-----------|------------|-------------|-----------------------------|
| NAMESPACE |    NAME    | TARGET PORT |             URL             |
|-----------|------------|-------------|-----------------------------|
| default   | hello-node |             | http://192.168.99.103:32471 |
|-----------|------------|-------------|-----------------------------|
🎉  Opening service default/hello-node in default browser...

Освобождение ресурсов


$ kubectl delete service hello-node
service "hello-node" deleted

$ kubectl delete deployment hello-node
deployment.apps "hello-node" deleted

$ minikube stop
✋  Stopping "minikube" in virtualbox ...
🛑  "minikube" stopped.

$ minikube delete
🔥  Deleting "minikube" in virtualbox ...
💀  Removed all traces of the "minikube" cluster.

kubectl create deployment kubernetes-bootcamp –image=gcr.io/google-samples/kubernetes-bootcamp:v1

Great! You just deployed your first application by creating a