diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..e4f2b5f --- /dev/null +++ b/.env.example @@ -0,0 +1,15 @@ +ALGOLIA_APP_ID= +ALGOLIA_API_KEY= +ALGOLIA_INDEX_NAME= + +GISCUS_DISCUSSION_CATEGORY= +GISCUS_DISCUSSION_CATEGORY_ID= +GISCUS_PROJECT_ID= + +GOOGLE_ANALYTICS_TAG_ID= + +ORGANIZATION_NAME= +REPOSITORY_NAME= + +SITE_TITLE= +SITE_URL= \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2758716..d716a91 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,6 +11,8 @@ jobs: name: github-pages name: Deploy to GitHub Pages runs-on: ubuntu-latest + env: + GOOGLE_ANALYTICS_TAG_ID: ${{ secrets.GOOGLE_ANALYTICS_TAG_ID }} steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 @@ -29,6 +31,3 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./build - - # - name: GitHub Pages change URL - # run: bash github-page-url.sh diff --git a/.gitignore b/.gitignore index b2d6de3..51ffe42 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +.env \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..37beb47 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,5 @@ +1. You are free to use this code to build your own website +2. Do not copy the content in the following directories: blog, blog-work, static/img +3. Crediting the author is appreciated + +No confusing license. Be kind and help others learn. \ No newline at end of file diff --git a/blog/adguard-home/index.md b/blog/adguard-home/index.md index 73cf5e8..1fac5f1 100644 --- a/blog/adguard-home/index.md +++ b/blog/adguard-home/index.md @@ -2,7 +2,7 @@ slug: adguard-home title: Adguard Home description: Adguard Home DNS server guide -# image: +image: ./adguard_home_darkmode.svg tags: [docker, homelab, adguard, dns] date: 2021-10-13T10:00 --- diff --git a/blog/cache-server/index.md b/blog/cache-server/index.md index 681dcfb..ab02302 100644 --- a/blog/cache-server/index.md +++ b/blog/cache-server/index.md @@ -2,7 +2,7 @@ slug: cache-server title: Cache Server для компьютерного клуба description: Сервер для компьютерного клуба. Cache Server позволяет разгрузить интернет канал и скачивать обновления по локальной сети -# image: +image: ./logo-lan-cache-server.png tags: [docker, linux, server, cache, lan, networks] date: 2019-07-12 --- diff --git a/blog/image-generator/index.md b/blog/image-generator/index.md index 6d744c9..96dd72a 100644 --- a/blog/image-generator/index.md +++ b/blog/image-generator/index.md @@ -2,7 +2,7 @@ slug: image-generator-python-flask-docker title: Image generator description: Image generator Python - Создать изображение необходимого размера веса -# image: +image: ./image-generator.png tags: [docker, python, flask, image] date: 2022-01-23 --- diff --git a/blog/rdpwrap/index.md b/blog/rdpwrap/index.md index 7e9292f..0e9e087 100644 --- a/blog/rdpwrap/index.md +++ b/blog/rdpwrap/index.md @@ -2,7 +2,7 @@ slug: rdp-wrapper title: RDP wrapper description: Что такое RDP wrapper, как его устанавливать, краткая инструкция как создать пользователя для удаленного рабочего стола -# image: +image: ./logo-rdpwrap.png tags: [rdp, windows, server] date: 2019-06-21 --- diff --git a/blog/releases-info/index.md b/blog/releases-info/index.md index af90540..35fa976 100644 --- a/blog/releases-info/index.md +++ b/blog/releases-info/index.md @@ -2,7 +2,7 @@ slug: releases-info title: Releases info description: releases check latest version -# image: +image: ./update-releases.png tags: [docker, python, flask, releases] date: 2023-05-15 --- diff --git a/docs/helm/charts.md b/docs/helm/charts.md new file mode 100644 index 0000000..91281c9 --- /dev/null +++ b/docs/helm/charts.md @@ -0,0 +1,7 @@ +--- +sidebar_position: 3 +--- + +# helm charts + +Общее хранилище чартов - diff --git a/docs/helm/rollback.md b/docs/helm/commands.md similarity index 91% rename from docs/helm/rollback.md rename to docs/helm/commands.md index 2984310..66a5119 100644 --- a/docs/helm/rollback.md +++ b/docs/helm/commands.md @@ -2,7 +2,9 @@ sidebar_position: 2 --- -# Rollback +# commands + +## rollback История версий (список) ``` diff --git a/docs/kubernetes/Kubernetes-components.png b/docs/kubernetes/Kubernetes-components.png new file mode 100644 index 0000000..85b1864 Binary files /dev/null and b/docs/kubernetes/Kubernetes-components.png differ diff --git a/docs/k8s/_category_.json b/docs/kubernetes/_category_.json similarity index 100% rename from docs/k8s/_category_.json rename to docs/kubernetes/_category_.json diff --git a/docs/k8s/commands.md b/docs/kubernetes/commands.md similarity index 100% rename from docs/k8s/commands.md rename to docs/kubernetes/commands.md diff --git a/docs/kubernetes/components-of-kubernetes.png b/docs/kubernetes/components-of-kubernetes.png new file mode 100644 index 0000000..0fc30d9 Binary files /dev/null and b/docs/kubernetes/components-of-kubernetes.png differ diff --git a/docs/kubernetes/k8s-arch2.png b/docs/kubernetes/k8s-arch2.png new file mode 100644 index 0000000..ffd6b62 Binary files /dev/null and b/docs/kubernetes/k8s-arch2.png differ diff --git a/docs/kubernetes/k8s-arch3.png b/docs/kubernetes/k8s-arch3.png new file mode 100644 index 0000000..4dee557 Binary files /dev/null and b/docs/kubernetes/k8s-arch3.png differ diff --git a/docs/kubernetes/k8s-notes.md b/docs/kubernetes/k8s-notes.md new file mode 100644 index 0000000..a51da1e --- /dev/null +++ b/docs/kubernetes/k8s-notes.md @@ -0,0 +1,164 @@ +--- +sidebar_position: 3 +--- + +# k8s заметки + + +Мои конспекты по куберу. Описал своими словами, могут быть ошибки или неточности +Ссылка на официальную документацию [kubernetes.io](https://kubernetes.io/docs/home/) + +Ниже представлена галерея архитектуры с разных сайтов, суть одна визуализация разная +![Kubernetes Architecture](./components-of-kubernetes.png "Kubernetes Architecture") +![Kubernetes Architecture](./k8s-arch2.png "Kubernetes Architecture") +![Kubernetes Architecture](./k8s-arch3.png "Kubernetes Architecture") +![Kubernetes Architecture](./Kubernetes-components.png "Kubernetes Architecture") +![Kubernetes Architecture](./maxresdefault.jpg "Kubernetes Architecture") + + +## Компоненты мастера (master node) +### API Server (kube-scheduler) +Основная шина взаимодействия и точка входа для всех запросов. Аутентификация, валидация (линтер) + +### Scheduler (kube-scheduler) +Определяет на какой worker ноде создать новый под, в зависимости от требуемых ресурсов и занятости нод. Смотрит и проверяет нагрузку на ноды, по оределенной логике определяет куда назначить под + +### Controller (kube controller manager) +Проверяет состояние кластера по API (через kube-api) в etcd. Демон который включается в себя группы контроллеров. Занимается созданием и обслуживанием linux name-space. + +Контролируют разные ячейки типо deployment, replicaset, pod. Например если удалить под, а вышего него есть replicsate, deployment с желаемым состоянием под удалится, controller manager видит желаемое состояние ячеек и поднимет новый под. + +### Etcd +База данных (хранилище ключ-значение). Хранятся все манифесты, текущее состояние, желаемое состояние. Любая сущность описанная в yml. Для работы необходим кворум (нечетное количество). Один master — один etcd, поэтому для отказоустойчивости желательно иметь 3 мастер ноды. В некоторых случаях выносят за пределы мастера в отдельный кластер БД. + +## Компоненты ноды Node (worker node) +### Pod +Базовая сущность k8s, которая группирует контейнеры между собой. Внутри может содержать несколько контейнеров ( контейнеры находятся в одном namespace шарят между собой loopback интерфейс) + +### Kubelet +Бинарник, основной компонент k8s существует на каждой worker ноде кластера. Проверят API сервер на предмет описания новых подов, смотрим принес ли controller что нибудь новое, если есть изменения пытается применить их. Например смотрит на новые ноды которые должны быть развернуты на своей ноде. (который назначает scheduler (положил в etcd)) + +После того как привел к нужному состоянию передает информацию в API сервер. Также сообщает постоянно о состояних подов + +### Kube-proxy +Представляет собой контейнер, аналог ривер прокси, отвечает за пересылку и проксирование запросов к уже существующим сервисам или приложениям, в приватной сети самого кубера, по умолчанию использует ipvs (аналог iptables оптимизированный для k8s). + +### Optionals Addons +Дополнительные плагины такие как RBAC, kalico (CNI), + +## Сущности +### Deployment -> Replicaset -> Pod +Поле kind — сущности представлены и описаны в виде yaml файлов. Записываем то состояние к которму k8s должен привести. (Мы не описываем как наливать чай, а просто говорим какую кружку, какой чай, какого цвета, какой температуры и т.д. нужен как в ansible) + +В yaml файл записывают минимальный необходимый набор описаний, остальное докидывает controller + +Deployment — набор сценариев который порождает другую сущность replicaset ( а он своб очередь другую сущность pod) + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + namespace: name-space +spec: + selector: + matchLabels: + app: nginx + replicas: 5 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginxdemos/hello:0.2 + ports: + - containerPort: 80 + livenessProbe: + httpGet: + path: / + port: 80 + readinessProbe: + httpGet: + path: / + port: 80 + resources: + limits: + cpu: "0.5" + memory: 128Mi + requests: + cpu: "0.5" + memory: 128Mi +``` + +### Service +Используется для доступа к подам. + +В моем понимании ClusterIP сервис работает как виртуальный IP для доступа к подам и проброса портов внутри кластера, т.к. к IP адресам подов нет смысла подвязываться +А тут имеем статичный сервис который по лейблам сам направит на нужный под. +Так же там по умолчанию выполняется балансировка нагрузки по round-robin + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx-service-cluster-ip + namespace: name-space +spec: + selector: + app: nginx + ports: + +- port: 80 + targetPort: 80 + +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service-nodeport + namespace: name-space +spec: + type: NodePort + selector: + app: nginx + ports: + +- port: 80 + targetPort: 80 + nodePort: 30000 +``` + +## Пробы (Probes) +Нужны для проверки работоспособности контейнера. Проверкой проб занимается kubelet. Интересная статья про пробы хабр + +Их существует три вида: + +- Startup +- Liveness +- Readiness + +### Startup probe +Производит проверку при старте контейнера, если контейнер запустился без ошибок и его процесс по PID живой значит проверка прошла успешно + +### Liveness probe +Выполняется постоянно + +### Readiness probe +Производит проверку при старте контейнера, если контейнер запустился без ошибок и его процесс по PID живой значит проверка прошла успешно + +### Дополнительно про пробы +Производит проверку при старте контейнера, если контейнер запустился без ошибок и его процесс по PID живой значит проверка прошла успешно + +## Пример запроса в API сервер +kubectl если отправляем какой нибудь манифест на создание пода например: + +kubectl applay -f test.yml -n name-space +Запрос проходит аутентификацию, валидацию и передает информацию в etcd. + +Scheduler через API сервер смотрит изменения etcd, видит что пытаются создать новый под, определяет ноду куда можно его засунуть и отправляет эту информацию в API сервер, а API сервер записывает в etcd + +Controller manager в это время контролирует все это добро. Сморит тип kind создает ячейки внутри etcd + +Дальше kubelet на соответствующей ноде видит информацию в etcd, что на него хотят загрузить под и пытается это сделать через CRI и результаты и сам процесс через API сервер сообщает в etcd. diff --git a/docs/k8s/kubespray.md b/docs/kubernetes/kubespray.md similarity index 100% rename from docs/k8s/kubespray.md rename to docs/kubernetes/kubespray.md diff --git a/docs/kubernetes/maxresdefault.jpg b/docs/kubernetes/maxresdefault.jpg new file mode 100644 index 0000000..2f92608 Binary files /dev/null and b/docs/kubernetes/maxresdefault.jpg differ diff --git a/docusaurus.config.js b/docusaurus.config.js index 0d0c999..23495af 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,5 +1,6 @@ // @ts-check // Note: type annotations allow type checking and IDEs autocompletion +require("dotenv").config(); const lightCodeTheme = require('prism-react-renderer/themes/github'); const darkCodeTheme = require('prism-react-renderer/themes/dracula'); @@ -35,8 +36,23 @@ const config = { blog: { showReadingTime: true, blogSidebarCount: 0, - editUrl: - 'https://github.com/akmalovaa/akmalov.com/tree/main/', + editUrl: 'https://github.com/akmalovaa/akmalov.com/tree/main/', + feedOptions: { + type: 'all', + copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, + createFeedItems: async (params) => { + const { blogPosts, defaultCreateFeedItems, ...rest } = params; + return defaultCreateFeedItems({ + // keep only the 10 most recent blog posts in the feed + blogPosts: blogPosts.filter((item, index) => index < 10), + ...rest, + }); + }, + }, + }, + gtag: { + trackingID: process.env.GOOGLE_ANALYTICS_TAG_ID, + anonymizeIP: true, }, theme: { customCss: require.resolve('./src/css/custom.css'), diff --git a/static/robots.txt b/static/robots.txt new file mode 100644 index 0000000..6f27bb6 --- /dev/null +++ b/static/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file