Если вы хотите очистить пустые каталоги, команда find может упростить эту работу:
$ find . -type d -empty -exec rmdir -v {} +Параметр -type d выполняет поиск каталогов, -empty выбирает пустые каталоги, а -exec rmdir {} выполняет команду rmdir для их удаления.
Команда rmdir гарантирует, что каталог пуст перед его удалением.
В качестве альтернативы, вы также можете использовать эту команду для выполнения той же задачи:
$ find . -type d -empty -deletePlease open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥4❤1
KodeKloud Free Labs — площадка c интерактивными заданиями и реальными сценариями, которые помогут погрузиться в практическое применение принципов DevOps и облачных технологий, не выходя из браузера.
В бесплатных лабах сейчас есть: Linux, Кубер, Docker, GiT, Python и прочие прелести.
👉 DevOps Portal | #ресурсы
В бесплатных лабах сейчас есть: Linux, Кубер, Docker, GiT, Python и прочие прелести.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥9❤2🤝1
Чем отличается CMD от ENTRYPOINT в Dockerfile?
Инструкции CMD и ENTRYPOINT выполняются в момент запуска контейнера, тольо инструкция CMD позволяет переопределить передаваемые команде аргументы.
Пример 1. CMD: Опишем сборку образа в Dockerfile.
В инструкцию CMD передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
Теперь передадим 2 новых аргумента для запуска контейнера.
ping заменен на traceroute, IP адрес заменен на 1.1.1.1.
Пример 2. ENTRYPOINT: Опишем сборку образа в Dockerfile.
В инструкцию ENTRYPOINT передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
Теперь передадим изменим один из аргументов для запуска контейнера.
Как видим, аргумент передать контейнеру нельзя.
👉 DevOps Portal
Инструкции CMD и ENTRYPOINT выполняются в момент запуска контейнера, тольо инструкция CMD позволяет переопределить передаваемые команде аргументы.
Пример 1. CMD: Опишем сборку образа в Dockerfile.
FROM alpine
CMD ["ping", "8.8.8.8"] В инструкцию CMD передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=32.976 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=31.998 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=31.843 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 31.708/33.316/36.823 msТеперь передадим 2 новых аргумента для запуска контейнера.
$ docker run test traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 46 byte packets
1 172.17.0.1 (172.17.0.1) 0.017 ms 0.016 ms 0.009 ms
2 192.168.168.1 (192.168.168.1) 0.996 ms 1.553 ms 2.069 ms
3 * * *
4 lag-2-435.bgw01.samara.ertelecom.ru (85.113.62.125) 1.454 ms 1.427 ms 1.984 ms
5 172.68.8.3 (172.68.8.3) 19.685 ms 15.722 ms 15.565 ms
6 172.68.8.2 (172.68.8.2) 15.846 ms 22.696 ms 35.093 ms
7 one.one.one.one (1.1.1.1) 17.439 ms 17.670 ms 24.202 msping заменен на traceroute, IP адрес заменен на 1.1.1.1.
Пример 2. ENTRYPOINT: Опишем сборку образа в Dockerfile.
FROM alpine
ENTRYPOINT ["ping", "8.8.8.8"]В инструкцию ENTRYPOINT передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test2
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=36.189 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=44.120 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=44.584 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 36.189/41.631/44.584 msТеперь передадим изменим один из аргументов для запуска контейнера.
$ docker run test2 ping 1.1.1.1
BusyBox v1.31.1 () multi-call binary.
Usage: ping [OPTIONS] HOST
Send ICMP ECHO_REQUEST packets to network hosts
-4,-6 Force IP or IPv6 name resolution
-c CNT Send only CNT pings
-s SIZE Send SIZE data bytes in packets (default 56)
-i SECS Interval
-A Ping as soon as reply is recevied
-t TTL Set TTL
-I IFACE/IP Source interface or IP address
-W SEC Seconds to wait for the first response (default 10)
(after all -c CNT packets are sent)
-w SEC Seconds until ping exits (default:infinite)
(can exit earlier with -c CNT)
-q Quiet, only display output at start
and when finished
-p HEXBYTE Pattern to use for payloadКак видим, аргумент передать контейнеру нельзя.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥6🤔4
Linux. Карманный справочник. 4-е изд
Автор: Дэниел Джей
Год: 2024
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Дэниел Джей
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9
This media is not supported in your browser
VIEW IN TELEGRAM
Dockly
Это интерактивный терминальный интерфейс для управления контейнерами Docker.
Утилита позволяет в режиме реального времени просматривать активные контейнеры, образы и сети, выполнять команды, такие как перезапуск или удаление контейнеров, а также получать доступ к их логам и ресурсам.
Подходит для разработчиков и администраторов, которым нужен быстрый и удобный способ мониторинга и управления Docker-средами.
GitHub: dockly
👉 DevOps Portal
Это интерактивный терминальный интерфейс для управления контейнерами Docker.
Утилита позволяет в режиме реального времени просматривать активные контейнеры, образы и сети, выполнять команды, такие как перезапуск или удаление контейнеров, а также получать доступ к их логам и ресурсам.
Подходит для разработчиков и администраторов, которым нужен быстрый и удобный способ мониторинга и управления Docker-средами.
GitHub: dockly
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3🤝1
Программа сообщает о том, что не может найти свой конфиг. Каким образом можно узнать, где она пытается его найти?
Либо в самой программе, если удастся найти параметры
👉 DevOps Portal
line-buffered опция которая выведет результат как только найдетstrace -f — отслеживание дочерних процессовstrace -f l ftp sitename | & grep --line-buffered open | grep /home/userЛибо в самой программе, если удастся найти параметры
/usr/sbin/mysqld --verbose --help | grep -A 1 «Default options»Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
DistroSea
Удобный способ протестировать операционные системы перед установкой.
Сервис позволяет запустить десятки дистрибутивов Linux, ознакомиться с интерфейсом, протестировать функционал и поработать в терминале.
👉 distrosea.com
👉 DevOps Portal | #ресурсы
Удобный способ протестировать операционные системы перед установкой.
Сервис позволяет запустить десятки дистрибутивов Linux, ознакомиться с интерфейсом, протестировать функционал и поработать в терминале.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
ssh commands cheat sheet.pdf
1.5 MB
Давно не делились полезными шпаргалками! Держите – объемная подборка по SSH: от базовых команд до туннелирования
Сохраняй, пригодится
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7
Примеры типовых операций в bash-скриптах
Арифметические действия, циклы по кол-ву раз
Разного рода проверки
Работа с FTP
Работа с telnet
Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.
Пример цикла по множеству значений
Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой
chmod a+x script.sh
👉 DevOps Portal
Арифметические действия, циклы по кол-ву раз
#!/bin/bash
A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"
# пример цикла по i
I=0
while [ $I -lt 15 ]
do
printf "0x%02x " "$I"
I=`expr $I + 1`
done
echoРазного рода проверки
#!/bin/bash
# пример проверки существования файла
# создаем файл test1
touch test1
# проверяем существование файла test1
if [ -f test1 ] ; then
echo "файл test1 существует"
fi
# проверяем несуществование файла test2
if ! [ -f test2 ] ; then
echo "файл test2 не существует"
fi
# краткая справка по другим опциям команды [ ]
# -d filename директория существует
# -f filename файл существует
# -L filename символьная ссылка существует
# -r, -w, -x файл доступен для чтения, записи или выполнения
# -s filename файл существует и имеет ненулевую длину
# f1 -nt f2 f1 новее чем f2
# f1 -ot f2 f1 старше чем f2Работа с FTP
#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p ADDRESS <<EoF
user USER PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0Работа с telnet
#!/bin/bash
(
sleep 1
echo "root"
echo "cd /tmp"
echo "ls"
sleep 1
echo "quit"
) | telnet 192.168.1.150Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.
Пример цикла по множеству значений
#!/bin/bash
# пример цикла по множеству значений
for A in раз два три четыре пять
do
echo "$A,"
done
echo "вышел заяц погулять"
echoНе забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой
chmod a+x script.sh
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22
Топ 4 лучших типа сервисов Kubernetes в одной диаграмме.
👉 ClusterIP
ClusterIP - это стандартный и наиболее распространенный тип службы. Kubernetes назначает сервису ClusterIP внутренний IP-адрес кластера. Это делает службу доступной только в пределах кластера.
👉 NodePort
Это позволяет вывести сервис за пределы кластера, добавив общекластерный порт поверх ClusterIP. Мы можем запросить сервис по NodeIP:NodePort.
👉 LoadBalancer
Этот способ раскрывает сервис извне, используя балансировщик нагрузки облачного провайдера.
👉 ExternalName
Сопоставляет службу с доменным именем. Обычно это используется для создания службы в Kubernetes для представления внешней базы данных.
👉 DevOps Portal
ClusterIP - это стандартный и наиболее распространенный тип службы. Kubernetes назначает сервису ClusterIP внутренний IP-адрес кластера. Это делает службу доступной только в пределах кластера.
Это позволяет вывести сервис за пределы кластера, добавив общекластерный порт поверх ClusterIP. Мы можем запросить сервис по NodeIP:NodePort.
Этот способ раскрывает сервис извне, используя балансировщик нагрузки облачного провайдера.
Сопоставляет службу с доменным именем. Обычно это используется для создания службы в Kubernetes для представления внешней базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Самоучитель по CI/CD в K8s
Отличный ресурс, чтобы освоить Kubernetes и научиться доставлять в него код своих приложений
Пошаговые инструкции, теория и примеры кода помогут быстро погрузиться в процесс
Выбирайте свою технологию:
👉 Node.js
👉 Spring Boot
👉 Django
👉 Go
👉 Rails
👉 Laravel
👉 DevOps Portal | #ресурсы
Отличный ресурс, чтобы освоить Kubernetes и научиться доставлять в него код своих приложений
Пошаговые инструкции, теория и примеры кода помогут быстро погрузиться в процесс
Выбирайте свою технологию:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👀2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁40👍3🤝1
Чем отличается su от sudo?
su «substitute user» — заменить пользователя
sudo «substitute user and do» — подменить пользователя и выполнить
su требует пароль целевой учетной записи, на кого переключаемся.
sudo требует пароль текущего пользователя и запускает от его имени команды, которым требуются права суперюзера.
Например, мы сидим под пользователем user и хотим войти под John:
Будет запрошен пароль, нужно ввести пароль именно от учетной записи john, а не от user.
А вот пример с sudo:
А здесь нужно ввести пароль от учетной записи user, а не от John или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers.
А для чего нужен дефис после su?
Для очистки переменных и чтобы пользоваться чистой оболочкой при переключении на другого пользователя.
Авторизуемся под пользователем user и экспортируем переменную:
Теперь у пользователя user есть переменная "a" которая = test.
Переключаемся на пользователя John и смотрим переменную "a"
Вывелась строчка test. То есть все что мы задали под user, перекочевало в оболочку john. А теперь добавим дефис:
Переменная $a больше не выводится. Чистая оболочка. Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали.
У sudo есть подобные ключи -s -i
Запустится оболочка с правами root
Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можно попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидеть что с ключом -i переменная выведется на экран.
👉 DevOps Portal
su «substitute user» — заменить пользователя
sudo «substitute user and do» — подменить пользователя и выполнить
su требует пароль целевой учетной записи, на кого переключаемся.
sudo требует пароль текущего пользователя и запускает от его имени команды, которым требуются права суперюзера.
Например, мы сидим под пользователем user и хотим войти под John:
user@dev:/$ su john
Будет запрошен пароль, нужно ввести пароль именно от учетной записи john, а не от user.
А вот пример с sudo:
user@dev:/$ sudo -u john whoami
А здесь нужно ввести пароль от учетной записи user, а не от John или рута. Но для этого случая сперва необходимо добавить пермишены для пользователя user в файл /etc/sudoers.
user ALL=(ALL:ALL) ALL
Редактировать этот файл можно по средствам команды visudo. А свалидировать конфиг можно командой visudo -c. Редактирование этого файла через visodu хорошо тем, что если вы допустите ошибку, то при сохранении, оно сообщит о ней.
А для чего нужен дефис после su?
Для очистки переменных и чтобы пользоваться чистой оболочкой при переключении на другого пользователя.
Авторизуемся под пользователем user и экспортируем переменную:
ssh user@pc
export a="test"
Теперь у пользователя user есть переменная "a" которая = test.
Переключаемся на пользователя John и смотрим переменную "a"
su john
echo $a
Вывелась строчка test. То есть все что мы задали под user, перекочевало в оболочку john. А теперь добавим дефис:
su - john
echo $a
Переменная $a больше не выводится. Чистая оболочка. Кстати с этим дефисом часто косячат и потом долго не могут понять в чем причина. Переменные вроде были заданы, а потом куда-то пропали.
su (с дефисом) — сначала переключается пользователь, а затем запускается shell, зачищаются все переменные.
su (без дефиса) — переключает пользователя, оставляя переменные окружения старого пользователя.
У sudo есть подобные ключи -s -i
user@pc:/$ sudo -s
Запустится оболочка с правами root
user@pc:/$ sudo -i
Запустится оболочка, но уже с чтением файлов root/.profile/.bashrc и т.п. Можно попробовать добавить экспорт переменной в .profile, сделать sudo -s/-i и увидеть что с ключом -i переменная выведется на экран.
По сути sudo -i = команде sudo su -. Но обычно за sudo su - в приличных местах можно получить по шапке. Это плохая практика! Так как это порождает дополнительный процесс и больше гемора с набором самой команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39🔥10❤7🤔1
Portainer — проект с открытым исходным кодом, представляющий собой образ графического web-интерфейса для управления Docker.
Hadolint — представляет собой утилиту, предназначенную для оценки Dockerfile с точки зрения корректности синтаксиса и безопасности инструкций.
Dozzle — представляет собой веб-интерфейс для отображения логов контейнеров в режиме реального времени.
Dive — утилита, которая визуально отображает подробную информацию о Docker образах и их слоях.
Ctop — утилита для мониторинга метрик в контейнерах, которая напоминает утилиту top в Unix системах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3
ZRAM позволяет сжимать оперативную память на лету и таким образом увеличить ее объём.
При включении zram, сжатие переносит часть нагрузки на процессор, но использование zram действительно может улучшить производительность.
Также есть zswap, которая сжимает данные в разделе подкачки. И которая по умолчанию включена почти во всех официальных ядрах.
Проблема zswap заключается в том, что его приоритет выше чем у zram, который остается неиспользуемым. Чтобы решить эту проблему, нужно отключить zswap в ядре.
Но чтобы применить эту опцию, нужно пересобрать ядро. Пойдем легким путем и выключим zswap через загрузчик grub.
Редактируем файл /etc/default/grub
Не забываем перегенирировать конфиг grub:
Перезагружаем машину и проверяем отключение zswap:
Если вывелась буква N — значит все правильно.
Ну и наконец включаем zram. Для этого пишем bash скрипт и кидаем его в автозагрузку:
1. Загружаем модуль zram
2. Выбираем алгоритм сжатия lz4 (либо zstd)
3. Объем zram 1гиг физической оперативки
4. 2 это количество потоков сжатия (потоки процессора)
5. Создаем блочное устройство и включаем его
Запускаем скрипт и проверяем включение командой: zramctl. Если на экран что-то вывелось, значит всё хорошо и сжатие начало работать.
Если заморачиваться с bash скриптами не хочется, ставим утилиту которая будет работать через systemd.
Правим конфиг /etc/systemd/zram-generator.conf
Активируем и запускаем:
Всё! Теперь оно само будет запускаться без лишних движений.
👉 DevOps Portal
При включении zram, сжатие переносит часть нагрузки на процессор, но использование zram действительно может улучшить производительность.
Также есть zswap, которая сжимает данные в разделе подкачки. И которая по умолчанию включена почти во всех официальных ядрах.
Проблема zswap заключается в том, что его приоритет выше чем у zram, который остается неиспользуемым. Чтобы решить эту проблему, нужно отключить zswap в ядре.
CONFIG_ZSWAP_DEFAULT_ON=N
Но чтобы применить эту опцию, нужно пересобрать ядро. Пойдем легким путем и выключим zswap через загрузчик grub.
Редактируем файл /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=0" loglevel=3 quiet "
Не забываем перегенирировать конфиг grub:
grub-mkconfig -o /boot/grub/grub.cfg
Перезагружаем машину и проверяем отключение zswap:
cat /sys/module/zswap/parameters/enabled
Если вывелась буква N — значит все правильно.
Ну и наконец включаем zram. Для этого пишем bash скрипт и кидаем его в автозагрузку:
#!/bin/bash
modprobe zram
mkdir /sys/block/zram0
echo lz4 > /sys/block/zram0/comp_algorithm
echo 1G > /sys/block/zram0/disksize
echo 2 > /sys/block/zram0/max_comp_streams
mkswap --label zram0 /dev/zram0
swapon --priority 100 /dev/zram0
1. Загружаем модуль zram
2. Выбираем алгоритм сжатия lz4 (либо zstd)
3. Объем zram 1гиг физической оперативки
4. 2 это количество потоков сжатия (потоки процессора)
5. Создаем блочное устройство и включаем его
Запускаем скрипт и проверяем включение командой: zramctl. Если на экран что-то вывелось, значит всё хорошо и сжатие начало работать.
Если заморачиваться с bash скриптами не хочется, ставим утилиту которая будет работать через systemd.
apt install systemd-zram-generator
Правим конфиг /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram
compression-algorithm = lz4
Активируем и запускаем:
systemctl daemon-reload
systemctl start /dev/zram0
Всё! Теперь оно само будет запускаться без лишних движений.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5
This media is not supported in your browser
VIEW IN TELEGRAM
SecretScanner
Ищет незащищённые креды и пароли в Docker-образах, контейнерах и на ПК.
Сканирует данные, сверяя их с базой из 140 типов секретов.
Входит в состав ThreatMapper — инструмента с открытым кодом для выявления и ранжирования уязвимостей в облачных приложениях.
👉 GitHub
👉 DevOps Portal | #ресурсы
Ищет незащищённые креды и пароли в Docker-образах, контейнерах и на ПК.
Сканирует данные, сверяя их с базой из 140 типов секретов.
Входит в состав ThreatMapper — инструмента с открытым кодом для выявления и ранжирования уязвимостей в облачных приложениях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Знали ли вы про такую команду в linux как - «yes»?
Например, есть у вас консольная команда, которая во время своей работы будет запрашивать подтверждение: а вы точно уверены, что удаляете тестовую базу данных? Вот на такие случаи и нужна команда «yes», чтобы не руками вводить подтверждение, а делегировать это действие.
Полезно для пайплайнов. Бывает такое, что у программы нет ключей типа apt -y install, а подтверждать как-то в автоматическом режиме нужно.
Синтаксис проброса стандартный, через систему пайпов:
В примере выше, когда пакетный менеджер попросит нажать Y, команда «yes» автоматически это сделает и начнется процесс установки.
Не забываем, про передачу аргументов, если внешняя программа например хочет чтобы вы ввели слово: «hello» делаем так:
Если есть команда «yes», значит должна быть и «no». Но увы😁 . Так вот если нужно отменить, передайте в «yes» аргументом строку «no».
Что-то может запросить простого нажатия Enter, например когда в репозиторий добавляется gpg ключ. Как послать Enter? А вот так:
👉 DevOps Portal
Команда yes служит для вывода в стандартный поток (stdout) строки «y» или любой другой строки. Если ее запустить по умолчанию, команда будет бесконечно сыпать строку «y».
Например, есть у вас консольная команда, которая во время своей работы будет запрашивать подтверждение: а вы точно уверены, что удаляете тестовую базу данных? Вот на такие случаи и нужна команда «yes», чтобы не руками вводить подтверждение, а делегировать это действие.
Полезно для пайплайнов. Бывает такое, что у программы нет ключей типа apt -y install, а подтверждать как-то в автоматическом режиме нужно.
Синтаксис проброса стандартный, через систему пайпов:
yes | apt install nginx
В примере выше, когда пакетный менеджер попросит нажать Y, команда «yes» автоматически это сделает и начнется процесс установки.
Не забываем, про передачу аргументов, если внешняя программа например хочет чтобы вы ввели слово: «hello» делаем так:
yes hello | apt install nginx
Но обычно на практике, в 99% случаев команда «yes» запускается без аргументов, так как большинство запрашивает именно Yes.
Если есть команда «yes», значит должна быть и «no». Но увы
Что-то может запросить простого нажатия Enter, например когда в репозиторий добавляется gpg ключ. Как послать Enter? А вот так:
yes "" | <твоя команда>
Это сработает как Enter потому, что команда «yes» выводит в stdout не просто сроку Y, но еще и завершает ее в конце символом Enter. Вот именно поэтому при запуске чистого «yes», строчки на экране будут идти столбиком.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44👍8😁1
This media is not supported in your browser
VIEW IN TELEGRAM
kubectx
Это инструмент командной строки, который позволяет пользователям переключаться между контекстами (кластерами) и пространствами имен Kubernetes быстрее и проще, чем с помощью одних только команд kubectl.
Установка
Можно установить с помощью Krew:
После установки инструменты будут доступны в виде kubectl ctx и kubectl ns.
Еще можно установить так:
и так:
👉 DevOps Portal | #ресурсы
Это инструмент командной строки, который позволяет пользователям переключаться между контекстами (кластерами) и пространствами имен Kubernetes быстрее и проще, чем с помощью одних только команд kubectl.
# switch to another cluster that's in kubeconfig
$ kubectx minikube
Switched to context «minikube».
# switch back to previous cluster
$ kubectx -
Switched to context «oregon».
# rename context
$ kubectx dublin=gke_ahmetb_europe-west1-b_dublin
Context «gke_ahmetb_europe-west1-b_dublin» renamed to «dublin».
# change the active namespace on kubectl
$ kubens kube-system
Context «test» set.
Active namespace is «kube-system».
# go back to the previous namespace
$ kubens -
Context «test» set.
Active namespace is «default».
Установка
Можно установить с помощью Krew:
kubectl krew install ctx
kubectl krew install ns
После установки инструменты будут доступны в виде kubectl ctx и kubectl ns.
Еще можно установить так:
brew install kubectx
и так:
sudo apt install kubectxPlease open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3