Skip to content
New issue

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

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

Already on GitHub? Sign in 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 [email protected]
# продеплоить при помощи 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants