PRO ИНВЕСТИЦИИ
قناة بسيطة
7 584
المشتركون
لا توجد بيانات24 ساعات
-7307 أيام
-4 03830 أيام
أرشيف المشاركات
7 584
Студенты заставили своего угарного препода по программированию создать телеграм-канал.
Его обожают за умение просто и остроумно рассказывать про код, рекурсию и объяснять сложные алгоритмы так, что любой школьник сможет повторить.
В свободное время он выводит онлайн-курсы на чистую воду и рассказывает как запросто прокачаться до сениора за полгода.
Если ты работаешь или учишься в IT, подписка обязательна — https://t.me/+YdR2V4UDUJU3OWUy
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 7)
Если все установилось и активировалось, мы увидим соответствующее сообщение:
The 'ingress' addon is enabled
Подождем, пока он запустится, и проверим состояние кластера:
kubectl -n ingress-nginx get pod
Если статус Pod’а, в нижней строке должен быть Running.
Правим /etc/hosts
Чтобы к приложению можно было обращаться по доменному имени, нужно добавить соответствующую запись в /etc/hosts.
Добавим в файл адрес werf-first-app.test. Посмотрим IP-адрес кластера, выполнив команду minikube ip. Она должна отобразить правильный IP-адрес (например, 192.168.49.2). Если вы видите что-то другое, нужно пройти предыдущие шаги заново.
Для добавления строки в hosts запустим команду:
echo "$(minikube ip) werf-first-app.test" | sudo tee -a /etc/hosts
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 6)
Нужно обратить внимание на содержание столбцов READY и STATUS: все Pod’ы должны находиться в статусе Running, а их количество быть равным 1/1 (важно, чтобы левое число соответствовало правому). Если видите что-то другое, то нужно немного подождать — Pod’ы запускаются не мгновенно, поэтому до изменения их статуса на активный может пройти некоторое время.
Установка NGINX Ingress Controller
Далее установим Ingress-контроллер. Он нужен для того, чтобы запросы извне кластера пробрасывались внутрь на наше приложение.
Сделать это можно следующей командой:
minikube addons enable ingress
Иногда установка занимает довольно много времени. В нашем случае процесс занял чуть больше четырех минут.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 5)
Если у вас нет kubectl, поставить ее можно одним из этих двух способов:
1. По инструкции из официальной документации.
2. Воспользоваться входящей в состав minikube версией утилиты, для чего выполните две команды:
alias kubectl="minikube kubectl --"
echo 'alias kubectl="minikube kubectl --"' >> ~/.bash_aliases
Во втором случае при первом запуске kubectl нужная версия утилиты загрузится из репозиториев minikube и станет доступна для использования.
Проверим состояние кластера, взглянув на запущенные в нем Pod’ы:
kubectl get --all-namespaces pod
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
4PDA теперь в Telegram!
4PDA – крупнейший в рунете тематический ресурс, посвященный технологиям, приложениям и кодингу. Специально для программистов у них появился официальный канал в телеграм, где вы увидите сливы платных курсов, интересные статьи и много другого!
Подписывайтесь: @4pda_forum
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 4)
Установка и настройка minikube
Поставьте minikube по инструкции из официальной документации. В случае, если вы его уже когда-то устанавливали, проверьте, что стоит актуальная версия.
Создайте K8s-кластер:
# Удаляем существующий minikube-кластер, если он существует
minikube delete
# Запускаем новый minikube-кластер
minikube start --driver=docker
При каждом запуске kubectl придется явно указывать пространство имен. Это неудобно, поэтому настроим его по умолчанию (обратите внимание, что сейчас мы только настроим имя, а само пространство имен не создается, это мы сделаем далее по тексту):
kubectl config set-context minikube --namespace=werf-first-app
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 3)
Установка зависимостей
Необходимо настроить работоспособный Kubernetes-кластер. Выполним следующие шаги:
1. Настроим minikube — небольшой дистрибутив K8s, предназначенный для локальной установки.
2. Установим в него NGINX Ingress Controller — специальный компонент, отвечающий за проброс запросов извне внутрь.
3. Внесем изменения в /etc/hosts, чтобы обращаться к приложению в кластер по понятному имени, а не просто IP-адресу.
4. Войдем под своей учетной записью на Docker Hub.
5. Подготовим Secret с данными для входа в учетную запись Docker Hub.
6. Развернем приложение в настроенном K8s-кластере.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 2)
Основная фишка werf — объединение различных инструментов, используемых DevOps-/SRE-инженерами и разработчиками в свой работе, в рамках одной утилиты. Это Git, Docker, container registry, CI-система, Helm и Kubernetes. Компоненты тесно интегрированы между собой и опираются на большой опыт разработчиков утилиты в «кубернетизации» приложений.
Предварительная настройка окружения
Для начала необходимо поставить актуальную версию werf из стабильной ветки. Инструкция по установке доступна в официальной документации.
Описанные далее действия тестировались на ОС Linux (Ubuntu 20.04.03). Утилита доступна и для других ОС (Windows или macOS), ее команды идентичны, но в случае других операционных систем могут быть небольшие особенности.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 Собираем и деплоим приложение в Kubernetes (часть 1)
В этой серии постов мы рассмотрим, как собрать Docker-контейнер Node.js-приложения и затем как развернуть его в Kubernetes-кластере. Также рассмотрим, как можно легко накатывать изменения в коде и инфраструктуре, а также правильную организацию раздачи asset’ов, подняв для этого перед приложением reverse proxy-сервер.
В качестве замены K8s-кластеру воспользуемся minikube, это позволит малыми затратами подготовить локальное окружение для работы с werf.
О werf
werf — утилита командной строки, помогающая в организации всего цикла доставки ваших приложений в Kubernetes. В основе ее работы лежит единый источник истины — Git-репозиторий, в котором хранится само приложение и его конфигурация.
Состояние приложения определяется коммитом, в котором оно зафиксировано. werf собирает его, заливает в container registry, при необходимости дособирая несуществующие слои конечных образов, после чего разворачивает приложение в кластере, обновляя его составные части, если они изменились.
Дополнительно werf умеет удалять из container registry устаревшие артефакты. Для этого применяется уникальный алгоритм, основанный на истории Git-репозитория и политиках, настроенных пользователем.
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
‼️ 3 канала, которые дадут ощутимый буст начинающим и опытным айтишникам
Телеграм — кладезь полезной инфы, и мы выделили самые важные источники. Подпишись, чтобы не потерять!
🖥 ПК_User — канал с фичами и хаками системы, которые прокачают твоё владение железом и помогут обойти многие ограничения.
🤝 JavaScript Teacher — серьёзный источник по JavaScript с тестами, гайдами и секретами (авторы канала — профессиональные разрабы и наставники).
🐍 Python Teacher — сообщество Senior-разработчиков, разжёвывающих темы и проводящих тестирования по самому известному языку программирования.
7 584
📖 5 полезных запросов для MS SQL (финал)
Для начала подготовим тестовые данные:
-- Создаем тестовую таблицу, заполненную случайными числами
CREATE TABLE tblGoods
ADD
CodeGoods VARCHAR(10),
Size1 INT DEFAULT(ABS(CHECKSUM(NEWID())) % 50),
Size2 INT DEFAULT(ABS(CHECKSUM(NEWID())) % 50),
Size3 INT DEFAULT(ABS(CHECKSUM(NEWID())) % 50);
-- Добавляем 100 строк товаров
INSERT INTO tblGoods(CodeGoods)
VALUES(LEFT(NEWID(), 10))
GO 100
Пример 1, с использованием оператора UNPIVOT:
-- Вариант с использованием оператора UNPIVOT
SELECT
CodeGoods,
Height = MAX(ValueSize)
FROM tblGoods AS g
UNPIVOT
(ValueSize FOR TypeSize IN(Size1, Size2, Size3)) AS unpvt
GROUP BY CodeGoods;
Пример 2, с подзапросом:
-- Вариант без UNPIVOT
SELECT
CodeGoods,
Height = ( SELECT MAX(Size)
FROM ( VALUES(g.Size1), (g.Size2), (g.Size3) ) AS Sizes(Size))
FROM tblGoods AS g
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 5 полезных запросов для MS SQL (часть 5)
Агрегация в разрезе строк
Допустим, у нас есть таблица tblGoods, хранящая информацию о размерах некоторой продукции Size1, Size2, Size3, и нам требуется для каждой строки определить, какое из значений является высотой, иначе говоря, найти наибольшее число среди Size1, Size2, Size3.
Один из вариантов — это использование оператора UNPIVOT, но есть и другой способ, более наглядный, и в некоторых случаях обладающий большей производительностью.
Этот способ заключается в использовании подзапроса и конструкции SELECT * FROM (VALUES…).
📋 #Совет
▬▬▬▬▬▬▬▬
// How To SQL
7 584
Уже открыт вход в канал по C# с эксклюзивными, авторскими уроками, полезными ресурсами и материалами!
Сохранить: https://t.me/+EebyVO5sTDU3ODE6
7 584
📖 5 полезных запросов для MS SQL (часть 4)
Передача табличных данных
Иногда перед нами может возникнуть задача, требующая передачи табличных данных из одной процедуры в другую. В случае, когда эти процедуры находятся внутри одной БД, данная задача решается довольно просто. Все, что для этого требуется, это завести новый параметр, возвращающий табличное значение: код.
Но бывают ситуации, в которых требуется передать табличные данные между серверами, и тогда придется придумывать какой-то другой способ. В случае, когда таковых данных не очень много, можно выполнять форматирование данных в виде строки, содержащей данные в формате XML (преобразование в строку нужно т.к. MS SQL не позволяет выполнять удаленный вызов процедур с XML-параметрами): код.
📋 #Совет #Код
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 5 полезных запросов для MS SQL (часть 3)
Числовые множества и случайные числа
Для генерации множества «на лету», без использования дополнительных таблиц можно использовать рекурсивные CTE: код.
А для генерации случайных чисел или сортировки строк в случайном порядке можно использовать стандартную функцию NEWID(): код.
📋 #Совет #Код
▬▬▬▬▬▬▬▬
// How To SQL
7 584
Комп для чайника - без лишних слов самый крупный канал по винде 🔥
Секретные настройки, полезный софт, хоткеи, онлайн-сервисы, гайды, обзоры железа, новости по ОС Windows и другое
Подписывайся - @windows
7 584
📖 5 полезных запросов для MS SQL (часть 2)
Отладка
Часто возникает ситуация, когда необходимо выполнить хранимую процедуру, чтобы проверить корректность ее работы, при этом необходимо, чтобы этот вызов не изменил никаких реальных данных.
В таких случаях можно обернуть вызов процедуры и запросы для проверки данных в одну транзакцию с отменой изменений в конце. Вполне очевидное решение, но не каждый начинающий программист об этом догадывается:
BEGIN TRAN
DECLARE @id INT = 10;
-- Вызов процедуры, которая изменяет реальные данные
EXEC dbo.spDoSomething @param1 = @id;
-- Проверяем, что реальные данные изменились так, как нам нужно
SELECT *
FROM dbo.tblData
WHERE IdData = @id;
-- Возврат состояния системы в исходное состояние
ROLLBACK
📋 #Совет #Код
▬▬▬▬▬▬▬▬
// How To SQL
7 584
📖 5 полезных запросов для MS SQL (часть 1)
Отобрали для вас некоторый перечень запросов для базы данных MS SQL, которые могут оказаться полезными в ежедневной работе.
Поиск
Приведенный ниже запрос используется для поиска упоминаний объектов среди кода хранимых процедур:
SELECT OBJECT_NAME(object_id)
FROM sys.sql_modules AS sm
WHERE sm.definition LIKE '%filter%'
Или, если нам нужно найти код, который находится внутри джоба:
SELECT j.name, step_name
FROM msdb..sysjobs AS j
JOIN msdb..sysjobsteps AS js
ON j.job_id = js.job_id
WHERE command LIKE '%filter%'
📋 #Совет #Код
▬▬▬▬▬▬▬▬
// How To SQL
7 584
Security Power News – уникальный канал по безопасности в сети и IT-технологиям.
⚡️Какие VPN сервисы мошенники используют для наблюдения за пользователями?
⚡️Сколько интернет проектов было скомпрометировано в сети за последние сутки?
⚡️Как обезопасить свои данные и не допустить утечки? Что делать, если это УЖЕ произошло?
Секретные статьи от сотрудников спецслужб, зарубежные авторские мнения, рекомендации по устранению уязвимостей… Они знают ВСЕ - и даже больше!
Подпишись, чтобы быть в курсе главных кибер событий и знать то, что другие точно пропустят!
