Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Add full app deployment in the Kubernetes cluster #16

Merged
merged 12 commits into from
Dec 7, 2017
Merged

Conversation

jugatsu
Copy link
Owner

@jugatsu jugatsu commented Dec 3, 2017

PR к ДЗ №29

  1. Добавил манифест-файлы для полного конфигурирования reddit-app в Kubernetes кластере.
    Создал для этого отдельную директорию app/.
    Для каждого микросервиса отдельный файл (расширение yaml, подготовка к Helm :) ), в котором описание Deployment и Service. Так, на мой взгляд, проще поддерживать, нежели разбивка по разным файлам.
app
├── comment.yaml
├── mongodb.yaml
├── post.yaml
└── ui.yaml
  1. Добавил конфигурирования GKE кластера при помощи terraform.
    Вся конфигурация в директории infra/gke.
    2017-12-02 11 46 08

  2. Добавил развёртывания Kubernetes dashboard в отдельном файле dashboard.yaml.
    По сути подправил немножко апстримовый файл https://github.com/kubernetes/dashboard/blob/master/src/deploy/recommended/kubernetes-dashboard.yaml на предмет cluster admin (https://github.com/kubernetes/dashboard/wiki/Access-control#admin-privileges)
    Кстати версия дэшборда 1.8. Я также не использую аддон дэшборда в GKE

addons_config {
    kubernetes_dashboard {
      disabled = "${var.gke_dashboard_disabled}"
    }
  }

В 1.8 версии для доступа используется ссылка http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ вместо localhost:8001/ui

Если использовать Аддон Дэшборда в GKE, то для корректной работы необходимо kubectl apply -f следующий файл:

---
# ------------------- Dashboard Service Account ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system

---
# ------------------- Dashboard Role & Role Binding ------------------- #
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard
  namespace: kube-system

Затем скорректировать запуск из под service account kubernetes-dashboard:

kubectl set sa deployment kubernetes-dashboard kubernetes-dashboard -n kube-system

UPDATED: Коллеги, предлагаю в качестве альтернативы Kubernetes Dashboard рассмотреть scope от weaveworks https://github.com/weaveworks/scope.

Очень симпатичный UI, а также возможности прямо в браузере работать с подами: cli и т.д.
Деплоится следующим образом:

# дать своей гугловской учётке права cluster-admin в кластере GKE
kubectl create clusterrolebinding ak-cluster-admin-binding --clusterrole=cluster-admin --user=ak.devops85@gmail.com
# продеплоить при помощи kubectl
kubectl apply --namespace kube-system -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"

UI доступен посредством kubectl proxy на localhost:4040:

kubectl port-forward -n kube-system "$(kubectl get -n kube-system pod --selector=weave-scope-component=app -o jsonpath='{.items..metadata.name}')" 4040

Closes #14

@jugatsu jugatsu self-assigned this Dec 3, 2017
@jugatsu jugatsu changed the title WIP: Add full app deployment in the Kubernetes cluster Add full app deployment in the Kubernetes cluster Dec 3, 2017
@jugatsu
Copy link
Owner Author

jugatsu commented Dec 3, 2017

/cc @Nklya @vitkhab @chromko

@jugatsu
Copy link
Owner Author

jugatsu commented Dec 5, 2017

Кстати, я отбросил мысль попробовать описать terraform-ом и конфигурацию подов, сервисов и т.д. Поскольку terraform поддерживает только stable API и соответственно не поддерживает deployment hashicorp/terraform-provider-kubernetes#3 (comment). А без него я считаю на данный момент и нет смысла)

Copy link
Collaborator

@chromko chromko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Работа выполнена отлично.
Насчет ведения манифестов в одном файле на сервис или в группе файлов на сервис: лучше все-таки иметь раздельные файлы, если манифесты длинные. Естественно, группировать по папкам эти файлы.
Тут работает то же правило, что и для Ansible playbook'ов - по-хорошему он должен быть не длиннее 2-х страниц. Ну и отслеживать изменения поудобнее)
По поводу weave scope - да крутая штука.
Какие аддоны подключать - уже дело вкуса)
Еще можно попробовать Rancher завести для интереса.

@jugatsu jugatsu merged commit 9cbb248 into master Dec 7, 2017
@jugatsu jugatsu deleted the kubernetes-2 branch December 7, 2017 12:39
# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants