Архив автора: admin

Как открыть PDF-файлы в предпочитаемом вами браузере (Chrome, Edge, Firefox, Opera, Vivaldi)

У каждого человека с компьютером есть веб-браузер на своем компьютере. Операционная система Windows поставляется с предустановленным браузером Edge. У некоторых из нас даже установлено несколько браузеров для разных целей, или один из них нравится больше, чем другой.

Большинство современных веб-браузеров поддерживают различные форматы файлов, например формат PDF. Однако, когда вы нажимаете на файл PDF, доступный на веб-сайте, он часто загружается или открывается в другом веб-браузере или приложении.

В этой статье мы покажем вам, как открывать PDF-файлы в вашем любимом веб-браузере, независимо от того, какой браузер вы используете.

Зачем использовать веб-браузер для файлов PDF

Существует множество сторонних программ, которые можно использовать для открытия и редактирования PDF-файлов, таких как Adobe Acrobat, Libre Office и т. д. Так зачем использовать простой браузер?

Веб-браузеры не позволяют редактировать PDF-файлы и очень ограничены в своих возможностях. Однако, если вы редко редактируете PDF-файлы, браузеры прекрасно справятся с этой задачей.

Поскольку на наших компьютерах уже установлены браузеры, вам не нужно загружать и устанавливать сторонние приложения для открытия PDF-файлов. Это также экономит место на жестком диске и снижает нагрузку на системные ресурсы, поскольку некоторые программы PDF могут быть тяжелыми.

Если вам нужно открывать только PDF-файлы, веб-браузеры прекрасно подойдут. Давайте теперь продолжим смотреть, как настроить различные браузеры, а также параметры Windows для открытия PDF-файлов.

Как открыть PDF-файлы в Google Chrome

В большинстве веб-браузеров вам необходимо настроить сам браузер для открытия PDF-файлов (а не только для их загрузки). То же самое и в случае с Хромом.

Как только это будет сделано, вы можете сделать Chrome (или любой другой браузер) приложением по умолчанию для открытия PDF-файлов.

Выполните следующие действия, чтобы открыть файл PDF в Chrome:

  1. Откройте настройки Chrome.

    настройки хромаОткройте настройки Chrome

    Нажмите на многоточие (3 точки) в правом верхнем углу, а затем нажмите Настройки из расширенного меню.

  2. Перейдите в «Конфиденциальность и безопасность».

    Перейдите на вкладку «Конфиденциальность и безопасность».Перейдите на вкладку «Конфиденциальность и безопасность».

  3. Перейдите в «Настройки сайта».

    Настройки сайтаНастройки сайта

    Под Конфиденциальность и безопасность раздел, нажмите Настройки сайта.

  4. Разверните «Дополнительные настройки контента».

    Разверните Дополнительные настройки контента.Разверните Дополнительные настройки контента.

    Прокрутите страницу вниз и нажмите «Дополнительные настройки контента», чтобы расширить его.

  5. Откройте «PDF-документы».

    PDF-документыPDF-документы

    Под Дополнительные настройки контентанажмите PDF-документы.

  6. Выберите «Открыть PDF-файлы в Chrome».

    Открывайте PDF-файлы в ChromeОткрывайте PDF-файлы в Chrome

Когда вы нажимаете на файл PDF на веб-странице, он теперь открывается в Chrome, а не просто загружается.

Как открыть PDF-файлы в Microsoft Edge

В отличие от Google Chrome, браузер Edge настроен на открытие файлов PDF, если он выбран, или в программе просмотра PDF по умолчанию. Однако вы можете выбрать, будет ли он загружать PDF или нет. Вот как:

  1. Откройте настройки Edge.

    настройки краяОткройте настройки Edge

    Нажмите на многоточие (3 точки) в правом верхнем углу, а затем нажмите Настройки из расширенного меню.

  2. Перейдите в раздел «Файлы cookie и разрешения сайта».

    Перейдите на вкладку «Файлы cookie и разрешения сайта».Перейдите на вкладку «Файлы cookie и разрешения сайта».

  3. Откройте «PDF-документы».

    Край PDF-документовКрай PDF-документов

    Открыть PDF-документы под Все разрешения раздел.

  4. Включите или выключите ползунок перед «Всегда загружать PDF-файлы».

    Управление загрузкой PDF в EdgeУправление загрузкой PDF в Edge

    Когда ползунок находится в положении «Вкл.», Edge будет загружать файлы PDF, когда вы нажимаете на один из них на любой веб-странице.

Как открыть PDF-файлы в Mozilla Firefox

При использовании Firefox вы можете выбрать, будет ли PDF-файл открываться в Firefox или другом приложении/браузере. По умолчанию Firefox настроен на открытие файлов PDF в том же браузере. Однако, если вы изменили этот параметр, вот как вернуть его обратно:

  1. Откройте настройки Firefox.

    настройки фаерфоксаОткройте настройки Firefox

    Нажмите на 3 строки в правом верхнем углу браузера, а затем нажмите Настройки.

  2. Оставайтесь на вкладке «Общие».

    Откройте общие настройки Firefox.Откройте общие настройки Firefox.

  3. Щелкните «Portable Document Format (PDF)» в таблице под Приложения.

    Выберите PDFВыберите PDF

    Прокрутите вниз до Приложения и нажмите «Portable Document Format (PDF)» в таблице.

  4. Разверните раскрывающееся меню в Действие столбец.

    Разверните раскрывающееся меню «Действие».Разверните раскрывающееся меню «Действие».

  5. Выберите «Открыть в Firefox».

    Открывайте PDF-файлы с помощью FIrefoxОткрывайте PDF-файлы в Firefox

Как открыть PDF-файлы в Opera

Как и в Chrome, вам необходимо настроить веб-браузер Opera для открытия PDF-файлов, а не только для их загрузки. Вот как:

  1. Откройте настройки оперы.

    настройки оперыОткройте настройки оперы

    Нажмите на 3 строки в правом верхнем углу браузера, а затем нажмите «Перейти к полным настройкам браузера».

  2. Оставайтесь в основных настройках.

    Откройте основные настройки Opera.Откройте основные настройки Opera.

  3. Откройте «Настройки сайта».

    Откройте настройки сайтаОткройте настройки сайта

    Прокрутите вниз до раздела «Конфиденциальность и безопасность» и нажмите Настройки сайта.

  4. Нажмите «PDF-документы».

    Открывайте PDF-документыОткрывайте PDF-документы

  5. Выберите «Открыть PDF-файлы в Opera».

    Открывайте PDF-файлы в OperaОткрывайте PDF-файлы в Opera

Браузер Opera теперь будет открывать PDF-файлы, а не открывать их.

Как открыть PDF-файлы в Vivaldi

Выполните следующие действия, чтобы использовать Vivaldi для открытия PDF-файлов:

  1. Откройте настройки Вивальди.

    Откройте настройки Вивальди.Откройте настройки Вивальди.

    Нажмите на значок шестеренки в левом нижнем углу браузера.

  2. Откройте вкладку «Веб-страницы».

    Переключиться на вкладку Веб-страницыПереключиться на вкладку Веб-страницы

  3. Установите флажок рядом с «Включить внутреннюю программу просмотра PDF».

    Включить программу просмотра PDF VivaldisВключить программу просмотра PDF Vivaldi

    Прокрутите загрузку и выберите «Включить внутреннюю программу просмотра PDF» в ПЛАГИНЫ раздел.

Как открыть PDF-файлы в вашем любимом браузере

После того, как вы применили данные настройки в браузере, вы можете открывать PDF-файлы, сохраненные на вашем компьютере, в любом из них. Вы можете выбрать браузер из контекстного меню файла или сделать свой любимый браузер браузером по умолчанию для файлов PDF.

Откройте файл PDF в браузере с помощью диалогового окна «Открыть с помощью»

Независимо от вашего браузера по умолчанию, вы всегда можете изменить веб-браузер, чтобы открыть файл PDF, просто выбрав его в диалоговом окне «Открыть с помощью». Вот как:

  1. Перейдите к файлу PDF с помощью Проводника.

  2. Щелкните правой кнопкой мыши файл PDF.

  3. Разверните «Открыть с помощью» и нажмите «Выбрать другое приложение».

    Выбрать другое приложениеВыбрать другое приложение

  4. Нажмите на браузер, в котором вы хотите открыть файл PDF.

    Выберите браузерВыберите браузер

  5. Нажмите «Только один раз».

    Открыть файл PDF в выбранном браузере только один разОткрыть файл PDF в выбранном браузере только один раз

    Нажатие «Только один раз» не изменит приложение по умолчанию для открытия PDF-файлов.

Изменить браузер по умолчанию для открытия PDF-файлов

Вы также можете изменить приложение по умолчанию для открытия PDF-файлов с помощью настроек Windows. Метод, описанный ниже, работает как в Windows 10, так и в 11.

  1. Перейдите к:

    Приложение «Настройки» >> «Приложения» >> «Приложения по умолчанию» >> «Выбрать значения по умолчанию по типу файла»

    Выберите приложение по умолчанию по типу файлаВыберите приложение по умолчанию по типу файла

  2. Найдите «PDF».

    Поиск PDFПоиск PDF

  3. Нажмите на приложение или «Выберите значение по умолчанию» в разделе .pdf.

    Изменить приложение PDF по умолчаниюИзменить приложение PDF по умолчанию

  4. Выберите браузер, который вы хотите сделать приложением по умолчанию для файлов PDF.

    Выберите браузер по умолчаниюВыберите браузер по умолчанию

  5. Нажмите «Установить по умолчанию».

    Сделать браузер приложением по умолчанию для PDF-файловСделать браузер приложением по умолчанию для PDF-файлов

Выбранный веб-браузер теперь будет приложением по умолчанию для всех файлов с расширением .pdf. Каждый PDF-файл теперь будет автоматически открываться в этом браузере, если только он не открыт явно в другом приложении из диалогового окна «Открыть с помощью».

Заключительные мысли

В этой статье описаны все способы открытия PDF-файла в предпочитаемом вами веб-браузере.

Когда вы устанавливаете веб-браузер перед любым сторонним приложением, поддерживающим формат PDF, оно автоматически становится приложением по умолчанию для расширения файла. Когда вы позже установите другое приложение, поддерживающее формат PDF, например Adobe Acrobat, вам необходимо вручную сделать его приложением по умолчанию, используя тот же метод, который описан выше.

Мы надеемся, что эта статья поможет вам понять, как открывать файлы PDF и другие расширения с помощью различных приложений и браузеров.

Похожие сообщения:

  • Как включить или отключить JavaScript в браузерах (Chrome, Edge Firefox, Opera, Vivaldi)
  • Как показать/скрыть панель закладок в Chrome, Edge, Firefox, Vivaldi, Opera
  • Что такое файлы cookie и как их очистить в браузерах Chrome, Edge, Firefox, Opera, Vivaldi
  • Как отключить блокировку всплывающих окон в веб-браузерах
  • Как открыть и скачать Magnet-ссылки в любом браузере



2023-05-03T04:29:13
Tips and Tricks

Как исправить копирование и вставку, не работающую при подключении к удаленному рабочему столу

Копирование и вставка содержимого и данных на удаленные компьютеры и с них с использованием подключения к удаленному рабочему столу (MSTSC) — это основное использование протокола. Хотя эта важная функция включена по умолчанию при подключении к удаленному компьютеру в вашей сети, могут возникнуть проблемы, препятствующие ее использованию.

Пользователи имеют сообщил что даже после выполнения типичных задач по устранению неполадок их проблема не была решена, и они не смогли скопировать данные на удаленный компьютер и с него.

Если вы столкнулись с похожей проблемой, в этом руководстве приведен ряд решений, которые вы можете выполнить, чтобы решить проблему и снова облегчить себе жизнь.

Причины, по которым копипаста не работает

Когда вы копируете что-либо с помощью контекстного меню или сочетания клавиш CTRL + C, данные временно сохраняются в буфере обмена Windows внутри системной памяти (ОЗУ). Файл, запускающий буфер обмена для удаленного подключения, называется «rdpclip.exe», что также является названием процесса.

Если вы не можете копировать или вставлять содержимое на удаленный компьютер и с него, возможно, rdpclip.exe не работает должным образом.

Другая причина, по которой функция копирования-вставки не работает, заключается в том, что функция буфера обмена может быть отключена в вашем удаленном сеансе или одна из машин блокирует перенаправление буфера обмена.

В приведенных ниже возможных решениях мы указали методы решения этих проблем и устранения проблемы.

Исправить невозможность копирования и вставки при подключении к удаленному рабочему столу (RDC)

Выполните следующие задачи в указанном хронологическом порядке, чтобы восстановить функциональность копирования и вставки.

Включить общий доступ к буферу обмена в сеансе удаленного рабочего стола

Если вы не можете копировать или вставлять содержимое ни на удаленный компьютер, ни на главный компьютер (с удаленного компьютера), проверьте, разрешено ли совместное использование буфера обмена в удаленном сеансе.

Ни одно из решений для устранения проблемы не будет работать, если не включен общий доступ к буферу обмена.

Выполните следующие действия, чтобы включить общий доступ к буферу обмена во время сеанса удаленного рабочего стола, чтобы иметь возможность копировать и вставлять содержимое с одного компьютера на другой:

  1. Откройте средство подключения к удаленному рабочему столу.

    mstscmstsc

    Введите mstsc в поле «Выполнить команду», чтобы запустить подключение к удаленному рабочему столу.

  2. Нажмите «Показать параметры».

    показать большеПоказать больше вариантов

  3. Перейдите на вкладку «Локальные ресурсы».

    Откройте вкладку «Локальные ресурсы»Откройте вкладку «Локальные ресурсы».

  4. Установите флажок рядом с «Буфер обмена».

    Включить буфер обменаВключить буфер обмена

    Установите флажок рядом с «Буфер обмена» в разделе «Локальные устройства и ресурсы».

  5. Вернитесь на вкладку «Общие».

    Переключиться на вкладку ОбщиеПерейдите на вкладку Общие

  6. Введите данные для подключения.

    Введите данные подключенияВведите данные подключения

  7. Щелкните Подключиться.

Ваш удаленный сеанс теперь будет подключаться к удаленному ПК с включенным общим доступом к буферу обмена. Проверьте, можете ли вы теперь копировать и вставлять содержимое между устройствами.

Если буфер обмена уже включен или ваша проблема еще не решена даже после активации, продолжайте выполнять другие возможные исправления, указанные ниже.

Перезапустите Rdpclip.exe

Как мы упоминали ранее, rdpclip.exe — это процесс, стоящий за буфером обмена удаленного сеанса. Иногда rdpclip.exe дает сбой, и процесс необходимо перезапустить.

Существует 2 способа перезапустить процесс rdpclip.exe.

Перезапустите Rdpclip.exe из диспетчера задач.

  1. Откройте диспетчер задач на удаленном компьютере.

  2. Перейдите на вкладку «Подробности».

    Откройте вкладку «Сведения о диспетчере задач».Откройте вкладку «Сведения о диспетчере задач».

  3. Завершите процесс «rdpclip.exe».

    Убить exe-процесс rdpclipУбить процесс rdpclip.exe

    Щелкните правой кнопкой мыши процесс «rdpclip.exe» и выберите Завершить задачу.

  4. Нажмите «Завершить процесс» для подтверждения.

    Подтвердить действие 4Подтвердить действие

  5. Запустите новую задачу из диспетчера задач.

    Запустить новую задачуЗапустить новую задачу

  6. Введите «rdpclip.exe» и запустите его.

    Перезапустите rdpclipexeПерезапустите rdpclip.exe

Вы перезапустили процесс rdpclip.exe. Теперь проверьте, можете ли вы копировать и вставлять любой контент на любую машину.

Чтобы избежать всех описанных выше шагов, вы можете через несколько секунд перезапустить процесс rdpclip.exe с помощью командной строки.

Перезапустите Rdpclip.exe из командной строки.

  1. На удаленном компьютере запустите командную строку с повышенными привилегиями.

  2. Запустите следующий командлет, чтобы завершить процесс rdpclip.exe:

    taskkill/f/IM rdpclip.exe

    Завершить rdpclipexe из командной строкиЗавершите rdpclip.exe из командной строки

  3. Затем запустите этот командлет, чтобы перезапустить процесс rdpclip.exe:

    запустите C:WindowsSystem32rdpclip.exe

    Перезапустите rdpclipexe с помощью командной строки.Перезапустите rdpclip.exe с помощью командной строки.

Так же легко перезапустить процесс rdpclip.exe с помощью командной строки.

Теперь проверьте, можете ли вы снова нормально выполнять функции копирования и вставки.

Включить перенаправление буфера обмена с помощью групповой политики

Групповые политики управляют тем, как ваша система ведет себя для различных задач и функций. Возможно, ваша организация контролирует определенную политику, которая не позволяет вам копировать или вставлять содержимое с удаленных компьютеров через приложение удаленного рабочего стола.

Однако вы можете обойти это, выполнив следующие действия, чтобы включить перенаправление буфера обмена удаленного рабочего стола. Обратите внимание, что эти шаги необходимо выполнить как на главном, так и на удаленных компьютерах.

  1. На хост-компьютере откройте редактор групповой политики.

    gpedit mscОткройте редактор групповой политики.

  2. Перейдите к следующему с помощью левой панели:

    Конфигурация компьютера >> Административные шаблоны >> Компоненты Windows >> Службы удаленных рабочих столов >> Узел сеансов удаленных рабочих столов >> Перенаправление устройств и ресурсов

  3. Дважды щелкните политику «Не разрешать перенаправление буфера обмена».

    Откройте свойства групповой политикиОткрыть групповую политику

  4. Выберите Отключено.

    Отключить политикуОтключить политику

  5. Нажмите Применить и ОК.

  6. Запустите следующий командлет в командной строке с повышенными привилегиями, чтобы изменения вступили в силу.

    GPUобновление/сила

    последняя версия gpupdateПринудительно обновить новую конфигурацию политики

  7. Повторите шаги с 1 по 6 на удаленном компьютере.

После настройки политики на обоих компьютерах проверьте, устранена ли проблема.

Включить перенаправление буфера обмена из реестра Windows

Если метод групповой политики вам не подходит, вы можете разрешить/включить перенаправление буфера обмена удаленного рабочего стола из реестра Windows. Однако задачи, выполняемые на хосте и удаленных компьютерах, различаются.

Выполните оба исправления, приведенные ниже, на соответствующем компьютере.

Примечание: Эти процессы включают ручное управление реестром Windows. Неправильная настройка критических значений в системном реестре может быть фатальной для вашей операционной системы. Поэтому мы настаиваем на том, чтобы вы создали точку восстановления системы, прежде чем продолжить процесс.

Вы также можете использовать наш лучший выбор программного обеспечения для создания образов дисков и резервного копирования, чтобы больше никогда не потерять свои данные или операционную систему.

На хост-компьютере

  1. Откройте редактор реестра на хост-компьютере.

    regeditОткройте редактор реестра

    Введите regedit в поле «Выполнить команду».

  2. Перейдите к:

    КомпьютерHKEY_LOCAL_MACHINEПРОГРАММНОЕ ОБЕСПЕЧЕНИЕMicrosoftКлиент сервера терминалов

  3. Дважды щелкните значение «DisableClipboardRedirection».

    Откройте DisableClipboardRedirection DWORDОткройте DisableClipboardRedirection DWORD

  4. Измените его значение данных на «0».

    Изменить значение данныхИзменить значение данных

    Измените данные значения для DisableClipboardRedirection на 0а затем щелкните Хорошо.

  5. Перезагрузите компьютер, чтобы изменения вступили в силу.

Когда он перезапустится, проверьте, можете ли вы теперь копировать и вставлять содержимое между устройствами. Если проблема не устранена, подключитесь к удаленному компьютеру с помощью подключения к удаленному рабочему столу, а затем выполните действия, описанные в следующем разделе ниже.

Если вы не видите значение «DisableClipboardRedirection» на шаге 3 выше, вы можете создать его с помощью файла .REG, опубликованного ниже. Вы также можете пропустить все вышеперечисленные шаги и вместо этого запустить этот файл реестра, чтобы выполнить работу.

Как исправить копирование и вставку, не работающую при подключении к удаленному рабочему столу 1 Включить перенаправление буфера обмена удаленного рабочего стола на главном компьютере (3,0 КиБ, 67 совпадений)

Загрузите и запустите файл .REG на главном компьютере, следуйте инструкциям на экране и перезагрузите компьютер.

На удаленном компьютере

  1. На удаленном компьютере откройте редактор реестра.

    regeditОткройте редактор реестра

  2. Перейдите к:

    КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWdsrdpwd

  3. Дважды щелкните DWORD «fDisableClip» и установите для его значения данных значение «0».

    Изменить значение данных для fDisableClipИзменить значение данных для fDisableClip

  4. Теперь перейдите к:

    КомпьютерHKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlСервер терминаловWinStationsRDP-Tcp

  5. Дважды щелкните DWORD «fDisableClip» и установите для его значения данных значение «0».

    Изменить значение данных для fDisableClip 2Изменить значение данных для fDisableClip

  6. Перезагрузите компьютер, чтобы изменения вступили в силу.

Когда он перезагрузится, снова подключитесь к удаленному ПК с помощью удаленного рабочего стола и проверьте, можете ли вы теперь копировать на него и с него.

Заключение

Внимательно изучив причины и рассмотрев возможные решения, из-за которых функция копирования-вставки не работает во время сеанса удаленного рабочего стола, можно сказать, что в большинстве случаев проблема решаема.

Если вы выполните все исправления, описанные выше, проблема наверняка исчезнет.

Похожие сообщения:



2023-05-03T03:28:34
Tips and Tricks

Как восстановить отсутствующий диск D в Windows

Windows позволяет пользователям создавать множество разделов диска для хранения системных и пользовательских данных. Windows использует букву диска C для системных файлов. Другие разделы используют метки «D», «E» и т. д.

Пользователи часто сообщил что диск D внезапно пропал. Раздел D обычно хранит их личные данные, а не данные ОС. Эти данные важны для конечного пользователя и недоступны.

Это также может произойти после установки Центра обновления Windows в Windows 10 или Windows 11. Не о чем беспокоиться. Мы покажем вам, как восстановить утерянный диск D на вашем ПК, независимо от причины отсутствия диска.

Почему отсутствует диск D?

При использовании операционной системы Windows один или несколько ваших дисков могут внезапно исчезнуть из проводника без предупреждения. Вот возможные причины отсутствия диска D на вашем компьютере:

  • Буква диска больше не назначается.
  • Привод CD/DVD использует букву «D».
  • Раздел диска скрыт.
  • Неисправное обновление Windows привело к исчезновению диска.
  • Драйвер диска устарел или поврежден.
  • Раздел был случайно удален.

Независимо от причины отсутствия раздела диска, вы найдете возможное решение проблемы и сможете восстановить отсутствующий диск D с помощью следующих исправлений.

Восстановить отсутствующий диск D в Windows

Выполните следующие решения в хронологическом порядке, чтобы восстановить отсутствующий раздел диска. Не забывайте применять исправление только в соответствии с указанными обстоятельствами и только в том случае, если они применимы к вашей ситуации.

Перезагрузить компьютер

Иногда достаточно простой перезагрузки компьютера, чтобы восстановить отсутствующий диск D.

Компьютер может загружаться неправильно и может пропускать дополнительные диски, не обнаруживая их. Попробуйте перезагрузить компьютер и проверьте, виден ли снова отсутствующий раздел.

Это особенно может быть в случае, когда диск D является вашим CD- или DVD-дисководом или USB-накопителем.

Повторное сканирование дисков

Вы также можете вручную пересканировать все подключенные диски на вашем компьютере. Вот как:

  1. Откройте консоль управления дисками.

    дискмгмтОткройте консоль управления дисками

    Введите “diskmgmt.msc» в поле «Выполнить команду».

  2. Разверните меню «Действие».

    Развернуть меню действийРазвернуть меню действий

  3. Нажмите «Повторно сканировать диски».

    Пересканировать дискиПересканировать диски

Консоли управления дисками теперь потребуется несколько секунд для повторного сканирования всех подключенных дисков. Затем проверьте, видите ли вы снова отсутствующий диск.

Просмотр скрытых дисков

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

  1. Откройте параметры проводника.

    Открыть параметры проводникаОткрыть параметры проводника

    Нажмите на многоточие (3 точки) в проводнике, а затем нажмите «Параметры».

  2. Перейдите на вкладку «Вид».

    Открыть вкладку «Вид»Открыть вкладку «Вид»

  3. Выберите «Показать скрытые файлы, папки и диски» в разделе Расширенные настройки.

    Показать скрытые диски в ПроводникеПоказать скрытые диски в Проводнике

  4. Нажмите Применить и ОК.

Теперь, когда скрытые элементы видны, проверьте, можете ли вы снова видеть и получать доступ к диску D.

Если вы сейчас найдете отсутствующий раздел, это означает, что диск был скрыт. Следующее решение показывает, как отобразить скрытые диски.

Показать скрытые диски

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

  1. Откройте редактор групповой политики.

    gpedit mscОткройте редактор групповой политики

    Введите “gpedit.msc» в поле «Выполнить команду».

  2. Перейдите к следующему на левой панели:

    Политика локального компьютера >> Конфигурация пользователя >> Административные шаблоны >> Компоненты Windows >> Проводник

  3. Дважды щелкните политику «Скрыть указанные диски в моем компьютере».

    Откройте настройки групповой политикиОткройте настройки групповой политики

  4. Выберите «Отключено».

    Отключить политикуОтключить политику

  5. Нажмите Применить и ОК.

  6. Запустите следующий командлет в командной строке с повышенными привилегиями:

    GPUUpdate/Force

    последняя версия gpupdateПрименить новую групповую политику

Ваши скрытые диски больше не должны быть скрыты и всегда должны быть видны.

Назначить букву диска

Наиболее распространенная проблема внезапного исчезновения диска D заключается в том, что буква диска больше не назначается. Это может произойти, если подключен другой внешний диск с такой же буквой, дисковод CD/DVD имеет ту же конфликтующую букву диска или из-за системной ошибки.

Если диск D пропал, а другого диска с такой же буквой не видно, выполните следующие действия, чтобы назначить ему букву диска.

  1. Откройте консоль управления дисками.

    дискмгмтОткройте консоль управления дисками

    Введите “diskmgmt.msc» в поле «Выполнить команду».

  2. Щелкните правой кнопкой мыши раздел с отсутствующей буквой и выберите «Изменить букву диска и пути».

    Изменить букву дискаИзменить букву диска

  3. Нажмите «Добавить» во всплывающем окне.

    Добавить метку дискаДобавить метку диска

  4. Назначьте букву диска и нажмите OK.

    Назначить букву дискаНазначить букву диска

Вот и все! Отсутствующий диск теперь должен появиться в проводнике.

Обратите внимание, что этот метод будет работать только в том случае, если диск обнаружен системой и только письмо отсутствует. Если по какой-то причине диск не определяется компьютером полностью, то он не будет виден и в Консоли управления дисками.

Узнайте, как исправить проблемы с отсутствующим жестким диском.

Кроме того, если диск пропал из-за конфликта букв дисковода CD/DVD, необходимо сначала удалить его букву диска, чтобы назначить ту же букву отсутствующему разделу.

Чтобы отменить назначение или изменить букву диска, щелкните значок Удалять или Изменять кнопка из “Изменить букву диска и пути” окно.

Изменить или удалить букву дискаИзменить или удалить букву диска

Создать новый том

Мы сталкивались с сообщениями, в которых пользователи заявляли, что на их предыдущих компьютерах были доступны диски C и D, но когда они купили новый компьютер, в нем был только диск C.

Это связано с тем, что на жестком диске нового компьютера есть только один раздел. Однако, если на диске есть неиспользуемое пространство, вы можете уменьшить его и создать новый диск D. Вот как:

  1. Откройте консоль управления дисками.

    дискмгмтОткройте консоль управления дисками

    Введите “diskmgmt.msc» в поле «Выполнить команду».

  2. Щелкните правой кнопкой мыши диск C и выберите «Сжать том» в контекстном меню.

    Уменьшить объемУменьшить объем

  3. Введите объем места для нового диска в поле «Введите объем пространства для сжатия в МБ».

    Введите количество места для сжатияВведите количество места для сжатия

  4. Щелкните Уменьшить.

    Теперь вы увидите нераспределенное дисковое пространство в консоли управления дисками.

  5. Щелкните правой кнопкой мыши нераспределенное пространство и выберите «Новый простой том».

    Создать новый томСоздать новый том

    Откроется мастер создания нового тома.

  6. Нажмите «Далее» в мастере создания нового тома.

    Приступить к созданию нового томаПриступить к созданию нового тома

  7. Выберите место для нового тома и нажмите «Далее».

    Размер для нового томаРазмер для нового тома

  8. Выберите букву диска для назначения и нажмите «Далее».

    Назначить букву диска2Назначить букву диска

  9. Выберите параметры форматирования и нажмите «Далее».

    Выберите настройки форматированияВыберите настройки форматирования

  10. Нажмите Готово.

Отсутствующий диск теперь будет создан на вашем новом компьютере.

Обновите драйверы дисков

Драйвер — это фрагмент кода или файл, который действует как средство связи между операционной системой и оборудованием. Если он поврежден или устарел, соответствующее аппаратное или программное обеспечение может перестать работать должным образом.

Возможной причиной внезапного исчезновения диска D может быть неисправный или устаревший драйвер диска. Выполните следующие действия, чтобы обновить драйвер и попытаться решить проблему:

  1. Откройте диспетчер устройств.

    devmgmtОткройте диспетчер устройств

    Введите “devmgmt.msc» в поле «Выполнить команду».

  2. Разверните «Диски».

    Развернуть ДискиРазвернуть Диски

  3. Щелкните правой кнопкой мыши устройство с отсутствующим диском и выберите «Обновить драйвер» в контекстном меню.

    Обновите драйвер дискаОбновите драйвер диска

  4. Нажмите «Автоматический поиск драйверов» в мастере обновления драйверов.

    Автоматическое обновление драйверовАвтоматическое обновление драйверов

    Теперь мастер будет искать в Интернете обновленный драйвер.

  5. После обновления драйвера закройте мастер.

Если вам будет предложено «Лучшие драйверы для вашего устройства уже установлены», вы можете попытаться вручную обновить драйвер или переустановить существующий.

Восстановить Windows

Если ни одно из приведенных выше решений не работает для вас, у вас может остаться только возможность использовать восстановление системы.

Восстановление ОС Windows означает возврат ее к более раннему состоянию, когда все работало идеально. Конечно, это работает только в том случае, если вы ранее создали точку восстановления.

Если вы не можете восстановить отсутствующий диск D, попробуйте восстановить прежнее состояние компьютера.

Если диск D по-прежнему полностью отсутствует в «Моем компьютере» и вы нигде не можете его найти, убедитесь, что раздел диска D находится на том же жестком диске, который установлен на компьютере. Если у вас несколько жестких дисков, убедитесь, что второй жесткий диск находится в рабочем состоянии.

Часто задаваемые вопросы (FAQ)

Почему мой диск D отсутствует?

Диск D может быть намеренно скрыт, нераспределен или отсутствовать на вашем компьютере из-за повреждения, повреждения или неназначенной метки диска.

Как исправить, что диск D не определяется?

Вот несколько быстрых решений, которые можно попробовать, если ваш диск D не определяется:
-Перезагрузить компьютер
-Повторное сканирование дисков из консоли управления дисками.
-Убедитесь, что все соединения с физическими дисками безопасны.
-Назначить букву диска.
-Обновить драйвер диска.
-Показать скрытые диски из групповой политики.

Похожие сообщения:



2023-05-03T02:27:37
Tips and Tricks

Kubernetes. установка elk из helm чарта xpack ilm

Для начала создаём namespase elk




kubectl create namespace elk




ну или




cat namespace.yml




kind: Namespace

apiVersion: v1

metadata:

  name: elk




kubectl apply -f namespace.yml




выкачиваем чарт




git clone https://github.com/elastic/helm-charts.git
cd helm-charts/
git checkout 7.9




Далее нам надо сгенерировать сертификаты на основе которых будет всё работать.




[root@prod-vsrv-kubemaster1 helm-charts]# mkdir mkdir /certs
[root@prod-vsrv-kubemaster1 helm-charts]# cd /certs/




Создаём файл в котором укажем наши доменные имена (logstash требователен к наличию домена в сертификате)




cat cnf




[req]

distinguished_name = req_distinguished_name

x509_extensions = v3_req

prompt = no



[req_distinguished_name]

C = KG

ST = Bishkek

L = Bishkek

O = test

CN = elasticsearch-master



[v3_req]

subjectKeyIdentifier = hash

authorityKeyIdentifier = keyid,issuer

basicConstraints = CA:TRUE

subjectAltName = @alt_names



[alt_names]

DNS.1 = elasticsearch-master

DNS.2 = kibana-kibana

DNS.3 = elasticsearch-master-headless

DNS.4 = logstash-logstash-headless

DNS.5 = elk.prod.test.local

DNS.6 = elasticsearch-master-0

DNS.7 = elasticsearch-master-1

DNS.8 = elasticsearch-master-2





openssl genpkey -aes-256-cbc -pass pass:123456789 -algorithm RSA -out mysite.key -pkeyopt rsa_keygen_bits:3072




Тут надо будет ввести пароль при генерации а дальше заполнить данные сертификата.
Я везде задал пароль 123456789
openssl req -new -x509 -key mysite.key -sha256 -config cnf -out mysite.crt -days 7300
Enter pass phrase for mysite.key:




создаём сертификат p12 который нужен elastic




openssl pkcs12 -export -in mysite.crt -inkey mysite.key -out identity.p12 -name «mykey»
Enter pass phrase for mysite.key:   вот тут вводим наш пароль 123456789
Enter Export Password:   ТУТ ОСТАВЛЯЕМ БЕЗ ПАРОЛЯ
Verifying — Enter Export Password:  ТУТ ОСТАВЛЯЕМ БЕЗ ПАРОЛЯ




docker run —rm -v /certs:/certs -it openjdk:oracle keytool -import -file /certs/mysite.crt -keystore /certs/trust.jks -storepass 123456789




появится сообщение в котором мы соглашаемся, что доверяем сертификату





Вытаскиваем приватный ключ чтоб он у нас был без пароля
openssl rsa -in mysite.key -out mysite-without-pass.key
Enter pass phrase for mysite.key:
writing RSA key




Всё готово, все нужные сертификаты для elasticsearch сгенерированы:




[root@prod-vsrv-kubemaster1 certs]# ll
total 32
-rw-r—r— 1 root root 575 Feb 10 10:15 cnf
-rw-r—r— 1 root root 3624 Feb 10 10:15 identity.p12
-rw-r—r— 1 root root 1935 Feb 10 10:15 mysite.crt
-rw-r—r— 1 root root 2638 Feb 10 10:15 mysite.key
-rw-r—r— 1 root root 2459 Feb 10 10:39 mysite-without-pass.key
-rw-r—r— 1 root root 1682 Feb 10 10:15 trust.jks




Создаём секрет с сертификатами
[root@prod-vsrv-kubemaster1 certs]# kubectl create secret generic elastic-certificates -n elk —from-file=identity.p12 —from-file=mysite.crt —from-file=mysite.key —from-file=mysite-without-pass.key —from-file=trust.jks




Создаём секрет с логином и паролем для elastic:
kubectl create secret generic secret-basic-auth -n elk —from-literal=password=elastic —from-literal=username=elastic




отметим что у нас в кластере уже установлен nfs-provisioner




Перейдём к настройке переменных у elastic




elasticsearch/values.yaml
Тут включаем xpack добавляем сертификаты и указываем директорию для снапшотов




esConfig:

  elasticsearch.yml: |

    path.repo: /snapshot

    xpack.security.enabled: true

    xpack.security.transport.ssl.enabled: true

    xpack.security.transport.ssl.verification_mode: certificate

    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.http.ssl.enabled: true

    xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/identity.p12





path.repo: /snapshot   — это наша директория для снапшотов, они будут сохраняться в отдельном volume




также добавляем в переменные наш логин и пароль что мы указали при создании секрета




extraEnvs:

  - name: ELASTIC_PASSWORD

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password

  - name: ELASTIC_USERNAME

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username




также подключаем директорию для сертификатов




secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/elasticsearch/config/certs





также указываем наш nfs провижинер




volumeClaimTemplate:

  accessModes: [ "ReadWriteOnce" ]

  storageClassName: nfs-storageclass

  resources:

    requests:

      storage: 3Gi




также выставляем antiAffinity soft (так как у нас 2 воркера а эластик запускается в 3х подах он не может стартануть) эта настройка говорит что на одной ноде могут быть запущены 2 пода из кластера уэластика.




antiAffinity: «soft»




также правим протокол на https




protocol: https




весь файл будет иметь следующий вид:




[root@prod-vsrv-kubemaster1 helm-charts]# cat elasticsearch/values.yaml




---

clusterName: "elasticsearch"

nodeGroup: "master"



# The service that non master groups will try to connect to when joining the cluster

# This should be set to clusterName + "-" + nodeGroup for your master group

masterService: ""



# Elasticsearch roles that will be applied to this nodeGroup

# These will be set as environment variables. E.g. node.master=true

roles:

  master: "true"

  ingest: "true"

  data: "true"

  remote_cluster_client: "true"

# ml: "true" # ml is not availble with elasticsearch-oss



replicas: 3

minimumMasterNodes: 2



esMajorVersion: ""



# Allows you to add any config files in /usr/share/elasticsearch/config/

# such as elasticsearch.yml and log4j2.properties

esConfig:

  elasticsearch.yml: |

    path.repo: /snapshot

    xpack.security.enabled: true

    xpack.security.transport.ssl.enabled: true

    xpack.security.transport.ssl.verification_mode: certificate

    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.http.ssl.enabled: true

    xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/identity.p12

    xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/identity.p12



#    key:

#      nestedkey: value

#  log4j2.properties: |

#    key = value



# Extra environment variables to append to this nodeGroup

# This will be appended to the current 'env:' key. You can use any of the kubernetes env

# syntax here

extraEnvs:

  - name: ELASTIC_PASSWORD

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password

  - name: ELASTIC_USERNAME

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username





#  - name: MY_ENVIRONMENT_VAR

#    value: the_value_goes_here



# Allows you to load environment variables from kubernetes secret or config map

envFrom: []

# - secretRef:

#     name: env-secret

# - configMapRef:

#     name: config-map



# A list of secrets and their paths to mount inside the pod

# This is useful for mounting certificates for security and for mounting

# the X-Pack license

secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/elasticsearch/config/certs

#    defaultMode: 0755



image: "docker.elastic.co/elasticsearch/elasticsearch"

imageTag: "7.9.4-SNAPSHOT"

imagePullPolicy: "IfNotPresent"



podAnnotations: {}

  # iam.amazonaws.com/role: es-cluster



# additionals labels

labels: {}



esJavaOpts: "-Xmx1g -Xms1g"



resources:

  requests:

    cpu: "1000m"

    memory: "2Gi"

  limits:

    cpu: "1000m"

    memory: "2Gi"



initResources: {}

  # limits:

  #   cpu: "25m"

  #   # memory: "128Mi"

  # requests:

  #   cpu: "25m"

  #   memory: "128Mi"



sidecarResources: {}

  # limits:

  #   cpu: "25m"

  #   # memory: "128Mi"

  # requests:

  #   cpu: "25m"

  #   memory: "128Mi"



networkHost: "0.0.0.0"



volumeClaimTemplate:

  accessModes: [ "ReadWriteOnce" ]

  storageClassName: nfs-storageclass

  resources:

    requests:

      storage: 3Gi



rbac:

  create: false

  serviceAccountAnnotations: {}

  serviceAccountName: ""



podSecurityPolicy:

  create: false

  name: ""

  spec:

    privileged: true

    fsGroup:

      rule: RunAsAny

    runAsUser:

      rule: RunAsAny

    seLinux:

      rule: RunAsAny

    supplementalGroups:

      rule: RunAsAny

    volumes:

      - secret

      - configMap

      - persistentVolumeClaim



persistence:

  enabled: true

  labels:

    # Add default labels for the volumeClaimTemplate fo the StatefulSet

    enabled: false

  annotations: {}



extraVolumes: []

  #  - name: extras

  #    emptyDir: {}



extraVolumeMounts: []

  # - name: extras

  #   mountPath: /usr/share/extras

  #   readOnly: true





extraContainers: []

  # - name: do-something

  #   image: busybox

  #   command: ['do', 'something']



extraInitContainers: []

  # - name: do-something

  #   image: busybox

  #   command: ['do', 'something']



# This is the PriorityClass settings as defined in

# https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass

priorityClassName: ""



# By default this will make sure two pods don't end up on the same node

# Changing this to a region would allow you to spread pods across regions

antiAffinityTopologyKey: "kubernetes.io/hostname"



# Hard means that by default pods will only be scheduled if there are enough nodes for them

# and that they will never end up on the same node. Setting this to soft will do this "best effort"

antiAffinity: "soft"



# This is the node affinity settings as defined in

# https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature

nodeAffinity: {}



# The default is to deploy all pods serially. By setting this to parallel all pods are started at

# the same time when bootstrapping the cluster

podManagementPolicy: "Parallel"



# The environment variables injected by service links are not used, but can lead to slow Elasticsearch boot times when

# there are many services in the current namespace.

# If you experience slow pod startups you probably want to set this to `false`.

enableServiceLinks: true



protocol: https

httpPort: 9200

transportPort: 9300



service:

  labels: {}

  labelsHeadless: {}

  type: ClusterIP

  nodePort: ""

  annotations: {}

  httpPortName: http

  transportPortName: transport

  loadBalancerIP: ""

  loadBalancerSourceRanges: []

  externalTrafficPolicy: ""



updateStrategy: RollingUpdate



# This is the max unavailable setting for the pod disruption budget

# The default value of 1 will make sure that kubernetes won't allow more than 1

# of your pods to be unavailable during maintenance

maxUnavailable: 1



podSecurityContext:

  fsGroup: 1000

  runAsUser: 1000



securityContext:

  capabilities:

    drop:

    - ALL

  # readOnlyRootFilesystem: true

  runAsNonRoot: true

  runAsUser: 1000



# How long to wait for elasticsearch to stop gracefully

terminationGracePeriod: 120



sysctlVmMaxMapCount: 262144



readinessProbe:

  failureThreshold: 3

  initialDelaySeconds: 10

  periodSeconds: 10

  successThreshold: 3

  timeoutSeconds: 5



# https://www.elastic.co/guide/en/elasticsearch/reference/7.9/cluster-health.html#request-params wait_for_status

clusterHealthCheckParams: "wait_for_status=green&timeout=1s"



## Use an alternate scheduler.

## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/

##

schedulerName: ""



imagePullSecrets: []

nodeSelector: {}

tolerations: []



# Enabling this will publically expose your Elasticsearch instance.

# Only enable this if you have security enabled on your cluster

ingress:

  enabled: false

  annotations: {}

    # kubernetes.io/ingress.class: nginx

    # kubernetes.io/tls-acme: "true"

  path: /

  hosts:

    - chart-example.local

  tls: []

  #  - secretName: chart-example-tls

  #    hosts:

  #      - chart-example.local



nameOverride: ""

fullnameOverride: ""



# https://github.com/elastic/helm-charts/issues/63

masterTerminationFix: false



lifecycle: {}

  # preStop:

  #   exec:

  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

  # postStart:

  #   exec:

  #     command:

  #       - bash

  #       - -c

  #       - |

  #         #!/bin/bash

  #         # Add a template to adjust number of shards/replicas

  #         TEMPLATE_NAME=my_template

  #         INDEX_PATTERN="logstash-*"

  #         SHARD_COUNT=8

  #         REPLICA_COUNT=1

  #         ES_URL=http://localhost:9200

  #         while [[ "$(curl -s -o /dev/null -w '%{http_code}n' $ES_URL)" != "200" ]]; do sleep 1; done

  #         curl -XPUT "$ES_URL/_template/$TEMPLATE_NAME" -H 'Content-Type: application/json' -d'{"index_patterns":['""$INDEX_PATTERN""'],"settings":{"number_of_shards":'$SHARD_COUNT',"number_of_replicas":'$REPLICA_COUNT'}}'



sysctlInitContainer:

  enabled: true



keystore: []



# Deprecated

# please use the above podSecurityContext.fsGroup instead

fsGroup: ""





========================================================================================




перейдём к настройке kibana:




kibana/values.yaml




Правим http на https
elasticsearchHosts: «https://elasticsearch-master:9200»




также




extraEnvs:

  - name: 'ELASTICSEARCH_USERNAME'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username

  - name: 'ELASTICSEARCH_PASSWORD'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password





также подключаем директорию с сертификатами




secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/kibana/config/certs





также добавляем в основной конфиг пути до сертификатов




kibanaConfig:

   kibana.yml: |

    server.ssl:

      enabled: true

      key: /usr/share/kibana/config/certs/mysite-without-pass.key

      certificate: /usr/share/kibana/config/certs/mysite.crt

    xpack.security.encryptionKey: "something_at_least_32_characters"

    elasticsearch.ssl:

      certificateAuthorities: /usr/share/kibana/config/certs/mysite.crt

      verificationMode: certificate





также настраиваем ingress чтобы по нашему домену открывалась кибана, отметим что строка:
nginx.ingress.kubernetes.io/backend-protocol: «HTTPS»
обязательна так как без неё ингрес по умолчанию проксирует всё на HTTP




ingress:

  enabled: true

  annotations:

    # kubernetes.io/ingress.class: nginx

    # kubernetes.io/tls-acme: "true"

     nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

  path: /

  hosts:

    - elk.prod.test.local





весь файл будет иметь вид:




 cat kibana/values.yaml




---

elasticsearchHosts: "https://elasticsearch-master:9200"



replicas: 1



# Extra environment variables to append to this nodeGroup

# This will be appended to the current 'env:' key. You can use any of the kubernetes env

# syntax here

extraEnvs:

  - name: 'ELASTICSEARCH_USERNAME'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username

  - name: 'ELASTICSEARCH_PASSWORD'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password



#  - name: "NODE_OPTIONS"

#    value: "--max-old-space-size=1800"

#  - name: MY_ENVIRONMENT_VAR

#    value: the_value_goes_here



# Allows you to load environment variables from kubernetes secret or config map

envFrom: []

# - secretRef:

#     name: env-secret

# - configMapRef:

#     name: config-map



# A list of secrets and their paths to mount inside the pod

# This is useful for mounting certificates for security and for mounting

# the X-Pack license

secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/kibana/config/certs



#  - name: kibana-keystore

#    secretName: kibana-keystore

#    path: /usr/share/kibana/data/kibana.keystore

#    subPath: kibana.keystore # optional



image: "docker.elastic.co/kibana/kibana"

imageTag: "7.9.4-SNAPSHOT"

imagePullPolicy: "IfNotPresent"



# additionals labels

labels: {}



podAnnotations: {}

  # iam.amazonaws.com/role: es-cluster



resources:

  requests:

    cpu: "1000m"

    memory: "2Gi"

  limits:

    cpu: "1000m"

    memory: "2Gi"



protocol: https



serverHost: "0.0.0.0"



healthCheckPath: "/app/kibana"



# Allows you to add any config files in /usr/share/kibana/config/

# such as kibana.yml

kibanaConfig:

   kibana.yml: |

    server.ssl:

      enabled: true

      key: /usr/share/kibana/config/certs/mysite-without-pass.key

      certificate: /usr/share/kibana/config/certs/mysite.crt

    xpack.security.encryptionKey: "something_at_least_32_characters"

    elasticsearch.ssl:

      certificateAuthorities: /usr/share/kibana/config/certs/mysite.crt

      verificationMode: certificate



#   kibana.yml: |

#     key:

#       nestedkey: value



# If Pod Security Policy in use it may be required to specify security context as well as service account



podSecurityContext:

  fsGroup: 1000



securityContext:

  capabilities:

    drop:

    - ALL

  # readOnlyRootFilesystem: true

  runAsNonRoot: true

  runAsUser: 1000



serviceAccount: ""



# This is the PriorityClass settings as defined in

# https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass

priorityClassName: ""



httpPort: 5601



extraContainers: ""

# - name: dummy-init

#   image: busybox

#   command: ['echo', 'hey']



extraInitContainers: ""

# - name: dummy-init

#   image: busybox

#   command: ['echo', 'hey']



updateStrategy:

  type: "Recreate"



service:

  type: ClusterIP

  loadBalancerIP: ""

  port: 5601

  nodePort: ""

  labels: {}

  annotations: {}

    # cloud.google.com/load-balancer-type: "Internal"

    # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0

    # service.beta.kubernetes.io/azure-load-balancer-internal: "true"

    # service.beta.kubernetes.io/openstack-internal-load-balancer: "true"

    # service.beta.kubernetes.io/cce-load-balancer-internal-vpc: "true"

  loadBalancerSourceRanges: []

    # 0.0.0.0/0



ingress:

  enabled: true

  annotations:

    # kubernetes.io/ingress.class: nginx

    # kubernetes.io/tls-acme: "true"

     nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

  path: /

  hosts:

    - elk.prod.test.local

  tls: []

  #  - secretName: chart-example-tls

  #    hosts:

  #      - chart-example.local



readinessProbe:

  failureThreshold: 3

  initialDelaySeconds: 10

  periodSeconds: 10

  successThreshold: 3

  timeoutSeconds: 5



imagePullSecrets: []

nodeSelector: {}

tolerations: []

affinity: {}



nameOverride: ""

fullnameOverride: ""



lifecycle: {}

  # preStop:

  #   exec:

  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

  # postStart:

  #   exec:

  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]



# Deprecated - use only with versions < 6.6

elasticsearchURL: "" # "http://elasticsearch-master:9200"





==========================================================================================




перейдём к настройке logstash




logstash/values.yaml




включаем xpack




logstashConfig:

  logstash.yml: |

    http.host: 0.0.0.0

    xpack.monitoring.enabled: true

    xpack.monitoring.elasticsearch.username: '${ELASTICSEARCH_USERNAME}'

    xpack.monitoring.elasticsearch.password: '${ELASTICSEARCH_PASSWORD}'

    xpack.monitoring.elasticsearch.hosts: [ "https://elasticsearch-master:9200" ]

    xpack.monitoring.elasticsearch.ssl.certificate_authority: /usr/share/logstash/config/certs/mysite.crt





также настраиваем  приём на порт 5045 так как 5044 поднимается автоматически и если оставить input с 5044 то будет конфликт портов, настраиваем также фильтр по неймспейсу если приходят логи из неймспейса terminal-soft мы к ним добавляем тэг, убираем пару лишних  полей и отправляем в ластик, указывая имя индекса имя ilm политики  -которая должна быть предварительно создана.




logstashPipeline:

  logstash.conf: |

    input {

       exec { command => "uptime" interval => 30 }

       beats {

       port => 5045

       }

    }



    filter {

        if [kubernetes][namespace] == "terminal-soft" {

         mutate {

          add_tag => "tag-terminal-soft"

          remove_field => ["[agent][name]","[agent][version]","[host][mac]","[host][ip]"] }

        }

       }



    output {

      if "tag-terminal-soft" in [tags] {

        elasticsearch {

            hosts => [ "https://elasticsearch-master:9200" ]

            cacert => "/usr/share/logstash/config/certs/mysite.crt"

            manage_template => false

            index => "terminal-soft-%{+YYYY.MM.dd}"

            ilm_rollover_alias => "terminal-soft"

            ilm_policy => "terminal-soft"

            user => '${ELASTICSEARCH_USERNAME}'

            password => '${ELASTICSEARCH_PASSWORD}'

        }

      }

    }





также указываем логин пароль с которым будем подключаться к elasticearch




extraEnvs:

  - name: 'ELASTICSEARCH_USERNAME'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username

  - name: 'ELASTICSEARCH_PASSWORD'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password





также




secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/logstash/config/certs





также




antiAffinity: «soft»




также раскоментим сервис и укажем в нём порт куда всё пересылать 5045 (его мы задали выше в input)




service:

  annotations: {}

  type: ClusterIP

  ports:

    - name: beats

      port: 5044

      protocol: TCP

      targetPort: 5045





весь файл имеет вид:




[root@prod-vsrv-kubemaster1 helm-charts]# cat logstash/values.yaml




---

replicas: 1



# Allows you to add any config files in /usr/share/logstash/config/

# such as logstash.yml and log4j2.properties

#

# Note that when overriding logstash.yml, `http.host: 0.0.0.0` should always be included

# to make default probes work.

logstashConfig:

  logstash.yml: |

    http.host: 0.0.0.0

    xpack.monitoring.enabled: true

    xpack.monitoring.elasticsearch.username: '${ELASTICSEARCH_USERNAME}'

    xpack.monitoring.elasticsearch.password: '${ELASTICSEARCH_PASSWORD}'

    xpack.monitoring.elasticsearch.hosts: [ "https://elasticsearch-master:9200" ]

    xpack.monitoring.elasticsearch.ssl.certificate_authority: /usr/share/logstash/config/certs/mysite.crt



#    key:

#      nestedkey: value

#  log4j2.properties: |

#    key = value



# Allows you to add any pipeline files in /usr/share/logstash/pipeline/

### ***warn*** there is a hardcoded logstash.conf in the image, override it first

logstashPipeline:

  logstash.conf: |

    input {

       exec { command => "uptime" interval => 30 }

       beats {

       port => 5045

       }

    }



    filter {

        if [kubernetes][namespace] == "terminal-soft" {

         mutate {

          add_tag => "tag-terminal-soft"

          remove_field => ["[agent][name]","[agent][version]","[host][mac]","[host][ip]"] }

        }

       }



    output {

      if "tag-terminal-soft" in [tags] {

        elasticsearch {

            hosts => [ "https://elasticsearch-master:9200" ]

            cacert => "/usr/share/logstash/config/certs/mysite.crt"

            manage_template => false

            index => "terminal-soft-%{+YYYY.MM.dd}"

            ilm_rollover_alias => "terminal-soft"

            ilm_policy => "terminal-soft"

            user => '${ELASTICSEARCH_USERNAME}'

            password => '${ELASTICSEARCH_PASSWORD}'

        }

      }

    }





#    input {

#      exec {

#        command => "uptime"

#        interval => 30

#      }

#    }

#    output { stdout { } }



# Extra environment variables to append to this nodeGroup

# This will be appended to the current 'env:' key. You can use any of the kubernetes env

# syntax here

extraEnvs:

  - name: 'ELASTICSEARCH_USERNAME'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: username

  - name: 'ELASTICSEARCH_PASSWORD'

    valueFrom:

      secretKeyRef:

        name: secret-basic-auth

        key: password



#  - name: MY_ENVIRONMENT_VAR

#    value: the_value_goes_here



# Allows you to load environment variables from kubernetes secret or config map

envFrom: []

# - secretRef:

#     name: env-secret

# - configMapRef:

#     name: config-map



# Add sensitive data to k8s secrets

secrets: []

#  - name: "env"

#    value:

#      ELASTICSEARCH_PASSWORD: "LS1CRUdJTiBgUFJJVkFURSB"

#      api_key: ui2CsdUadTiBasRJRkl9tvNnw

#  - name: "tls"

#    value:

#      ca.crt: |

#        LS0tLS1CRUdJT0K

#        LS0tLS1CRUdJT0K

#        LS0tLS1CRUdJT0K

#        LS0tLS1CRUdJT0K

#      cert.crt: "LS0tLS1CRUdJTiBlRJRklDQVRFLS0tLS0K"

#      cert.key.filepath: "secrets.crt" # The path to file should be relative to the `values.yaml` file.





# A list of secrets and their paths to mount inside the pod

secretMounts:

  - name: elastic-certificates

    secretName: elastic-certificates

    path: /usr/share/logstash/config/certs





image: "docker.elastic.co/logstash/logstash"

imageTag: "7.9.4-SNAPSHOT"

imagePullPolicy: "IfNotPresent"

imagePullSecrets: []



podAnnotations: {}



# additionals labels

labels: {}



logstashJavaOpts: "-Xmx1g -Xms1g"



resources:

  requests:

    cpu: "100m"

    memory: "1536Mi"

  limits:

    cpu: "1000m"

    memory: "1536Mi"



volumeClaimTemplate:

  accessModes: [ "ReadWriteOnce" ]

  resources:

    requests:

      storage: 1Gi



rbac:

  create: false

  serviceAccountAnnotations: {}

  serviceAccountName: ""



podSecurityPolicy:

  create: false

  name: ""

  spec:

    privileged: true

    fsGroup:

      rule: RunAsAny

    runAsUser:

      rule: RunAsAny

    seLinux:

      rule: RunAsAny

    supplementalGroups:

      rule: RunAsAny

    volumes:

      - secret

      - configMap

      - persistentVolumeClaim



persistence:

  enabled: false

  annotations: {}



extraVolumes: ""

  # - name: extras

  #   emptyDir: {}



extraVolumeMounts: ""

  # - name: extras

  #   mountPath: /usr/share/extras

  #   readOnly: true



extraContainers: ""

  # - name: do-something

  #   image: busybox

  #   command: ['do', 'something']



extraInitContainers: ""

  # - name: do-something

  #   image: busybox

  #   command: ['do', 'something']



# This is the PriorityClass settings as defined in

# https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass

priorityClassName: ""



# By default this will make sure two pods don't end up on the same node

# Changing this to a region would allow you to spread pods across regions

antiAffinityTopologyKey: "kubernetes.io/hostname"



# Hard means that by default pods will only be scheduled if there are enough nodes for them

# and that they will never end up on the same node. Setting this to soft will do this "best effort"

antiAffinity: "soft"



# This is the node affinity settings as defined in

# https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#node-affinity-beta-feature

nodeAffinity: {}



# The default is to deploy all pods serially. By setting this to parallel all pods are started at

# the same time when bootstrapping the cluster

podManagementPolicy: "Parallel"



httpPort: 9600



# Custom ports to add to logstash

extraPorts: []

#  - name: beats

#    containerPort: 5044



updateStrategy: RollingUpdate



# This is the max unavailable setting for the pod disruption budget

# The default value of 1 will make sure that kubernetes won't allow more than 1

# of your pods to be unavailable during maintenance

maxUnavailable: 1



podSecurityContext:

  fsGroup: 1000

  runAsUser: 1000



securityContext:

  capabilities:

    drop:

    - ALL

  # readOnlyRootFilesystem: true

  runAsNonRoot: true

  runAsUser: 1000



# How long to wait for logstash to stop gracefully

terminationGracePeriod: 120



# Probes

# Default probes are using `httpGet` which requires that `http.host: 0.0.0.0` is part of

# `logstash.yml`. If needed probes can be disabled or overrided using the following syntaxes:

#

# disable livenessProbe

# livenessProbe: null

#

# replace httpGet default readinessProbe by some exec probe

# readinessProbe:

#   httpGet: null

#   exec:

#     command:

#       - curl

#      - localhost:9600



livenessProbe:

  httpGet:

    path: /

    port: http

  initialDelaySeconds: 300

  periodSeconds: 10

  timeoutSeconds: 5

  failureThreshold: 3

  successThreshold: 1



readinessProbe:

  httpGet:

    path: /

    port: http

  initialDelaySeconds: 60

  periodSeconds: 10

  timeoutSeconds: 5

  failureThreshold: 3

  successThreshold: 3



## Use an alternate scheduler.

## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/

##

schedulerName: ""



nodeSelector: {}

tolerations: []



nameOverride: ""

fullnameOverride: ""



lifecycle: {}

  # preStop:

  #   exec:

  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

  # postStart:

  #   exec:

  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]



service:

  annotations: {}

  type: ClusterIP

  ports:

    - name: beats

      port: 5044

      protocol: TCP

      targetPort: 5045

#    - name: http

#      port: 8080

#      protocol: TCP

#      targetPort: 8080



ingress:

  enabled: false

#  annotations: {}

#  hosts:

#    - host: logstash.local

#      paths:

#        - path: /logs

#          servicePort: 8080

#  tls: []





===========================================================================================




Перейдём к настройке filebeat




filebeat/values.yaml




filebeatConfig:

  filebeat.yml: |

    filebeat.inputs:

    - type: container

      paths:

        - /var/log/containers/*.log

      processors:

      - add_kubernetes_metadata:

          host: ${NODE_NAME}

          matchers:

          - logs_path:

              logs_path: "/var/log/containers/"



    output.logstash:

      enabled: true

      hosts: ["logstash-logstash:5044"]





полностью файл будет выглядеть следующим образом:




[root@prod-vsrv-kubemaster1 helm-charts]# cat filebeat/values.yaml




---

# Allows you to add any config files in /usr/share/filebeat

# such as filebeat.yml

filebeatConfig:

  filebeat.yml: |

    filebeat.inputs:

    - type: container

      paths:

        - /var/log/containers/*.log

      processors:

      - add_kubernetes_metadata:

          host: ${NODE_NAME}

          matchers:

          - logs_path:

              logs_path: "/var/log/containers/"



    output.logstash:

      enabled: true

      hosts: ["logstash-logstash:5044"]



# Extra environment variables to append to the DaemonSet pod spec.

# This will be appended to the current 'env:' key. You can use any of the kubernetes env

# syntax here

extraEnvs: []

#  - name: MY_ENVIRONMENT_VAR

#    value: the_value_goes_here



extraVolumeMounts: []

  # - name: extras

  #   mountPath: /usr/share/extras

  #   readOnly: true



extraVolumes: []

  # - name: extras

  #   emptyDir: {}



extraContainers: ""

# - name: dummy-init

#   image: busybox

#   command: ['echo', 'hey']



extraInitContainers: []

# - name: dummy-init

#   image: busybox

#   command: ['echo', 'hey']



envFrom: []

# - configMapRef:

#     name: configmap-name



# Root directory where Filebeat will write data to in order to persist registry data across pod restarts (file position and other metadata).

hostPathRoot: /var/lib

hostNetworking: false

dnsConfig: {}

# options:

#   - name: ndots

#     value: "2"

image: "docker.elastic.co/beats/filebeat"

imageTag: "7.9.4-SNAPSHOT"

imagePullPolicy: "IfNotPresent"

imagePullSecrets: []



livenessProbe:

  exec:

    command:

      - sh

      - -c

      - |

        #!/usr/bin/env bash -e

        curl --fail 127.0.0.1:5066

  failureThreshold: 3

  initialDelaySeconds: 10

  periodSeconds: 10

  timeoutSeconds: 5



readinessProbe:

  exec:

    command:

      - sh

      - -c

      - |

        #!/usr/bin/env bash -e

        filebeat test output

  failureThreshold: 3

  initialDelaySeconds: 10

  periodSeconds: 10

  timeoutSeconds: 5



# Whether this chart should self-manage its service account, role, and associated role binding.

managedServiceAccount: true



# additionals labels

labels: {}



podAnnotations: {}

  # iam.amazonaws.com/role: es-cluster



# Various pod security context settings. Bear in mind that many of these have an impact on Filebeat functioning properly.

#

# - User that the container will execute as. Typically necessary to run as root (0) in order to properly collect host container logs.

# - Whether to execute the Filebeat containers as privileged containers. Typically not necessarily unless running within environments such as OpenShift.

podSecurityContext:

  runAsUser: 0

  privileged: false



resources:

  requests:

    cpu: "100m"

    memory: "100Mi"

  limits:

    cpu: "1000m"

    memory: "200Mi"



# Custom service account override that the pod will use

serviceAccount: ""



# Annotations to add to the ServiceAccount that is created if the serviceAccount value isn't set.

serviceAccountAnnotations: {}

  # eks.amazonaws.com/role-arn: arn:aws:iam::111111111111:role/k8s.clustername.namespace.serviceaccount



# A list of secrets and their paths to mount inside the pod

# This is useful for mounting certificates for security other sensitive values

secretMounts: []

#  - name: filebeat-certificates

#    secretName: filebeat-certificates

#    path: /usr/share/filebeat/certs



# How long to wait for Filebeat pods to stop gracefully

terminationGracePeriod: 30



tolerations: []



nodeSelector: {}



affinity: {}



# This is the PriorityClass settings as defined in

# https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass

priorityClassName: ""



updateStrategy: RollingUpdate



# Override various naming aspects of this chart

# Only edit these if you know what you're doing

nameOverride: ""

fullnameOverride: ""





==========================================================================================




Filebeat multiline.




Появилась задача: логи с контейнера в котором джава приложение приходят построчно, т.е. каждая строка это отдельный месседж при отображении в kibana, это не удобно читать, чтоб их объеденить в одно сообщение, добавим в filebeat фильтр




multiline.pattern: ‘^([0-9]{4}-[0-9]{2}-[0-9]{2})’
multiline.negate: true
multiline.match: after




в общем виде:




vim filebeat/values.yaml




---

# Allows you to add any config files in /usr/share/filebeat

# such as filebeat.yml

filebeatConfig:

  filebeat.yml: |

    filebeat.inputs:

    - type: container

      paths:

        - /var/log/containers/*.log

      processors:

      - add_kubernetes_metadata:

          host: ${NODE_NAME}

          matchers:

          - logs_path:

              logs_path: "/var/log/containers/"

      multiline.pattern: '^([0-9]{4}-[0-9]{2}-[0-9]{2})'

      multiline.negate: true

      multiline.match: after



    output.logstash:

      enabled: true

      hosts: ["logstash-logstash:5044"]





и обновляем наш чарт:
helm upgrade —install filebeat -n elk —values filebeat/values.yaml filebeat/




всё теперь логи будут формироваться относительно даты в самом начале сообщения.




===========================================================================================




Дополнение для работы snapshot




Создаём PV который дальше будем подкидывать в template elasticsearch  (напоминаю что у меня nfs-provisioner)
cat pvc-snapshot.yml




apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: elasticsearch-snapshot-dir

  namespace: elk

  labels:

   app: elasticsearch-snapshot

spec:

  storageClassName: nfs-storageclass

  accessModes:

    - ReadWriteMany

  resources:

    requests:

      storage: 5Gi





запускаем




kubectl apply -f pvc-snapshot.yml




смотрим имя созданного PV




kubectl get pv -n elk | grep elk

pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef   5Gi        RWX            Delete           Bound    elk/elasticsearch-snapshot-dir                                                                                              nfs-storageclass              21h





вот наше имя




pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef




теперь правим temaplate




vim elasticsearch/templates/statefulset.yaml




      volumes:

        - name: "pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef"

          persistentVolumeClaim:

            claimName: elasticsearch-snapshot-dir





И в этом же файле в ещё одном месте:




        volumeMounts:

          - name: pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef

            mountPath: "/snapshot"





на всякий случай файл имеет вид:




cat elasticsearch/templates/statefulset.yaml




---

apiVersion: {{ template "elasticsearch.statefulset.apiVersion" . }}

kind: StatefulSet

metadata:

  name: {{ template "elasticsearch.uname" . }}

  labels:

    heritage: {{ .Release.Service | quote }}

    release: {{ .Release.Name | quote }}

    chart: "{{ .Chart.Name }}"

    app: "{{ template "elasticsearch.uname" . }}"

    {{- range $key, $value := .Values.labels }}

    {{ $key }}: {{ $value | quote }}

    {{- end }}

  annotations:

    esMajorVersion: "{{ include "elasticsearch.esMajorVersion" . }}"

spec:

  serviceName: {{ template "elasticsearch.uname" . }}-headless

  selector:

    matchLabels:

      app: "{{ template "elasticsearch.uname" . }}"

  replicas: {{ .Values.replicas }}

  podManagementPolicy: {{ .Values.podManagementPolicy }}

  updateStrategy:

    type: {{ .Values.updateStrategy }}

  {{- if .Values.persistence.enabled }}

  volumeClaimTemplates:

  - metadata:

      name: {{ template "elasticsearch.uname" . }}

    {{- if .Values.persistence.labels.enabled }}

      labels:

        heritage: {{ .Release.Service | quote }}

        release: {{ .Release.Name | quote }}

        chart: "{{ .Chart.Name }}"

        app: "{{ template "elasticsearch.uname" . }}"

        {{- range $key, $value := .Values.labels }}

        {{ $key }}: {{ $value | quote }}

        {{- end }}

    {{- end }}

    {{- with .Values.persistence.annotations  }}

      annotations:

{{ toYaml . | indent 8 }}

    {{- end }}

    spec:

{{ toYaml .Values.volumeClaimTemplate | indent 6 }}

  {{- end }}

  template:

    metadata:

      name: "{{ template "elasticsearch.uname" . }}"

      labels:

        heritage: {{ .Release.Service | quote }}

        release: {{ .Release.Name | quote }}

        chart: "{{ .Chart.Name }}"

        app: "{{ template "elasticsearch.uname" . }}"

        {{- range $key, $value := .Values.labels }}

        {{ $key }}: {{ $value | quote }}

        {{- end }}

      annotations:

        {{- range $key, $value := .Values.podAnnotations }}

        {{ $key }}: {{ $value | quote }}

        {{- end }}

        {{/* This forces a restart if the configmap has changed */}}

        {{- if .Values.esConfig }}

        configchecksum: {{ include (print .Template.BasePath "/configmap.yaml") . | sha256sum | trunc 63 }}

        {{- end }}

    spec:

      {{- if .Values.schedulerName }}

      schedulerName: "{{ .Values.schedulerName }}"

      {{- end }}

      securityContext:

{{ toYaml .Values.podSecurityContext | indent 8 }}

        {{- if .Values.fsGroup }}

        fsGroup: {{ .Values.fsGroup }} # Deprecated value, please use .Values.podSecurityContext.fsGroup

        {{- end }}

      {{- if .Values.rbac.create }}

      serviceAccountName: "{{ template "elasticsearch.uname" . }}"

      {{- else if not (eq .Values.rbac.serviceAccountName "") }}

      serviceAccountName: {{ .Values.rbac.serviceAccountName | quote }}

      {{- end }}

      {{- with .Values.tolerations }}

      tolerations:

{{ toYaml . | indent 6 }}

      {{- end }}

      {{- with .Values.nodeSelector }}

      nodeSelector:

{{ toYaml . | indent 8 }}

      {{- end }}

      {{- if or (eq .Values.antiAffinity "hard") (eq .Values.antiAffinity "soft") .Values.nodeAffinity }}

      {{- if .Values.priorityClassName }}

      priorityClassName: {{ .Values.priorityClassName }}

      {{- end }}

      affinity:

      {{- end }}

      {{- if eq .Values.antiAffinity "hard" }}

        podAntiAffinity:

          requiredDuringSchedulingIgnoredDuringExecution:

          - labelSelector:

              matchExpressions:

              - key: app

                operator: In

                values:

                - "{{ template "elasticsearch.uname" .}}"

            topologyKey: {{ .Values.antiAffinityTopologyKey }}

      {{- else if eq .Values.antiAffinity "soft" }}

        podAntiAffinity:

          preferredDuringSchedulingIgnoredDuringExecution:

          - weight: 1

            podAffinityTerm:

              topologyKey: {{ .Values.antiAffinityTopologyKey }}

              labelSelector:

                matchExpressions:

                - key: app

                  operator: In

                  values:

                  - "{{ template "elasticsearch.uname" . }}"

      {{- end }}

      {{- with .Values.nodeAffinity }}

        nodeAffinity:

{{ toYaml . | indent 10 }}

      {{- end }}

      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriod }}

      volumes:

        - name: "pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef"

          persistentVolumeClaim:

            claimName: elasticsearch-snapshot-dir



        {{- range .Values.secretMounts }}

        - name: {{ .name }}

          secret:

            secretName: {{ .secretName }}

            {{- if .defaultMode }}

            defaultMode: {{ .defaultMode }}

            {{- end }}

        {{- end }}

        {{- if .Values.esConfig }}

        - name: esconfig

          configMap:

            name: {{ template "elasticsearch.uname" . }}-config

        {{- end }}

{{- if .Values.keystore }}

        - name: keystore

          emptyDir: {}

        {{- range .Values.keystore }}

        - name: keystore-{{ .secretName }}

          secret: {{ toYaml . | nindent 12 }}

        {{- end }}

{{ end }}

      {{- if .Values.extraVolumes }}

      # Currently some extra blocks accept strings

      # to continue with backwards compatibility this is being kept

      # whilst also allowing for yaml to be specified too.

      {{- if eq "string" (printf "%T" .Values.extraVolumes) }}

{{ tpl .Values.extraVolumes . | indent 8 }}

      {{- else }}

{{ toYaml .Values.extraVolumes | indent 8 }}

      {{- end }}

      {{- end }}

      {{- if .Values.imagePullSecrets }}

      imagePullSecrets:

{{ toYaml .Values.imagePullSecrets | indent 8 }}

      {{- end }}

      {{- if semverCompare ">1.13-0" .Capabilities.KubeVersion.GitVersion }}

      enableServiceLinks: {{ .Values.enableServiceLinks }}

      {{- end }}

      initContainers:

      {{- if .Values.sysctlInitContainer.enabled }}

      - name: configure-sysctl

        securityContext:

          runAsUser: 0

          privileged: true

        image: "{{ .Values.image }}:{{ .Values.imageTag }}"

        imagePullPolicy: "{{ .Values.imagePullPolicy }}"

        command: ["sysctl", "-w", "vm.max_map_count={{ .Values.sysctlVmMaxMapCount}}"]

        resources:

{{ toYaml .Values.initResources | indent 10 }}

      {{- end }}

{{ if .Values.keystore }}

      - name: keystore

        image: "{{ .Values.image }}:{{ .Values.imageTag }}"

        imagePullPolicy: "{{ .Values.imagePullPolicy }}"

        command:

        - sh

        - -c

        - |

          #!/usr/bin/env bash

          set -euo pipefail



          elasticsearch-keystore create



          for i in /tmp/keystoreSecrets/*/*; do

            key=$(basename $i)

            echo "Adding file $i to keystore key $key"

            elasticsearch-keystore add-file "$key" "$i"

          done



          # Add the bootstrap password since otherwise the Elasticsearch entrypoint tries to do this on startup

          if [ ! -z ${ELASTIC_PASSWORD+x} ]; then

            echo 'Adding env $ELASTIC_PASSWORD to keystore as key bootstrap.password'

            echo "$ELASTIC_PASSWORD" | elasticsearch-keystore add -x bootstrap.password

          fi



          cp -a /usr/share/elasticsearch/config/elasticsearch.keystore /tmp/keystore/

        env: {{ toYaml .Values.extraEnvs | nindent 10 }}

        envFrom: {{ toYaml .Values.envFrom | nindent 10 }}

        resources: {{ toYaml .Values.initResources | nindent 10 }}

        volumeMounts:

          - name: keystore

            mountPath: /tmp/keystore

          {{- range .Values.keystore }}

          - name: keystore-{{ .secretName }}

            mountPath: /tmp/keystoreSecrets/{{ .secretName }}

          {{- end }}

{{ end }}

      {{- if .Values.extraInitContainers }}

      # Currently some extra blocks accept strings

      # to continue with backwards compatibility this is being kept

      # whilst also allowing for yaml to be specified too.

      {{- if eq "string" (printf "%T" .Values.extraInitContainers) }}

{{ tpl .Values.extraInitContainers . | indent 6 }}

      {{- else }}

{{ toYaml .Values.extraInitContainers | indent 6 }}

      {{- end }}

      {{- end }}

      containers:

      - name: "{{ template "elasticsearch.name" . }}"

        securityContext:

{{ toYaml .Values.securityContext | indent 10 }}

        image: "{{ .Values.image }}:{{ .Values.imageTag }}"

        imagePullPolicy: "{{ .Values.imagePullPolicy }}"

        readinessProbe:

          exec:

            command:

              - sh

              - -c

              - |

                #!/usr/bin/env bash -e

                # If the node is starting up wait for the cluster to be ready (request params: "{{ .Values.clusterHealthCheckParams }}" )

                # Once it has started only check that the node itself is responding

                START_FILE=/tmp/.es_start_file



                # Disable nss cache to avoid filling dentry cache when calling curl

                # This is required with Elasticsearch Docker using nss < 3.52

                export NSS_SDB_USE_CACHE=no



                http () {

                  local path="${1}"

                  local args="${2}"

                  set -- -XGET -s



                  if [ "$args" != "" ]; then

                    set -- "$@" $args

                  fi



                  if [ -n "${ELASTIC_USERNAME}" ] && [ -n "${ELASTIC_PASSWORD}" ]; then

                    set -- "$@" -u "${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}"

                  fi



                  curl --output /dev/null -k "$@" "{{ .Values.protocol }}://127.0.0.1:{{ .Values.httpPort }}${path}"

                }



                if [ -f "${START_FILE}" ]; then

                  echo 'Elasticsearch is already running, lets check the node is healthy'

                  HTTP_CODE=$(http "/" "-w %{http_code}")

                  RC=$?

                  if [[ ${RC} -ne 0 ]]; then

                    echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' ${BASIC_AUTH} {{ .Values.protocol }}://127.0.0.1:{{ .Values.httpPort }}/ failed with RC ${RC}"

                    exit ${RC}

                  fi

                  # ready if HTTP code 200, 503 is tolerable if ES version is 6.x

                  if [[ ${HTTP_CODE} == "200" ]]; then

                    exit 0

                  elif [[ ${HTTP_CODE} == "503" && "{{ include "elasticsearch.esMajorVersion" . }}" == "6" ]]; then

                    exit 0

                  else

                    echo "curl --output /dev/null -k -XGET -s -w '%{http_code}' ${BASIC_AUTH} {{ .Values.protocol }}://127.0.0.1:{{ .Values.httpPort }}/ failed with HTTP code ${HTTP_CODE}"

                    exit 1

                  fi



                else

                  echo 'Waiting for elasticsearch cluster to become ready (request params: "{{ .Values.clusterHealthCheckParams }}" )'

                  if http "/_cluster/health?{{ .Values.clusterHealthCheckParams }}" "--fail" ; then

                    touch ${START_FILE}

                    exit 0

                  else

                    echo 'Cluster is not yet ready (request params: "{{ .Values.clusterHealthCheckParams }}" )'

                    exit 1

                  fi

                fi

{{ toYaml .Values.readinessProbe | indent 10 }}

        ports:

        - name: http

          containerPort: {{ .Values.httpPort }}

        - name: transport

          containerPort: {{ .Values.transportPort }}

        resources:

{{ toYaml .Values.resources | indent 10 }}

        env:

          - name: node.name

            valueFrom:

              fieldRef:

                fieldPath: metadata.name

          {{- if eq .Values.roles.master "true" }}

          {{- if ge (int (include "elasticsearch.esMajorVersion" .)) 7 }}

          - name: cluster.initial_master_nodes

            value: "{{ template "elasticsearch.endpoints" . }}"

          {{- else }}

          - name: discovery.zen.minimum_master_nodes

            value: "{{ .Values.minimumMasterNodes }}"

          {{- end }}

          {{- end }}

          {{- if lt (int (include "elasticsearch.esMajorVersion" .)) 7 }}

          - name: discovery.zen.ping.unicast.hosts

            value: "{{ template "elasticsearch.masterService" . }}-headless"

          {{- else }}

          - name: discovery.seed_hosts

            value: "{{ template "elasticsearch.masterService" . }}-headless"

          {{- end }}

          - name: cluster.name

            value: "{{ .Values.clusterName }}"

          - name: network.host

            value: "{{ .Values.networkHost }}"

          - name: ES_JAVA_OPTS

            value: "{{ .Values.esJavaOpts }}"

          {{- range $role, $enabled := .Values.roles }}

          - name: node.{{ $role }}

            value: "{{ $enabled }}"

          {{- end }}

{{- if .Values.extraEnvs }}

{{ toYaml .Values.extraEnvs | indent 10 }}

{{- end }}

{{- if .Values.envFrom }}

        envFrom:

{{ toYaml .Values.envFrom | indent 10 }}

{{- end }}

        volumeMounts:

          - name: pvc-30e262ad-770c-45ad-8e3c-28d70a6400ef

            mountPath: "/snapshot"

          {{- if .Values.persistence.enabled }}

          - name: "{{ template "elasticsearch.uname" . }}"

            mountPath: /usr/share/elasticsearch/data

          {{- end }}

{{ if .Values.keystore }}

          - name: keystore

            mountPath: /usr/share/elasticsearch/config/elasticsearch.keystore

            subPath: elasticsearch.keystore

{{ end }}

          {{- range .Values.secretMounts }}

          - name: {{ .name }}

            mountPath: {{ .path }}

            {{- if .subPath }}

            subPath: {{ .subPath }}

            {{- end }}

          {{- end }}

          {{- range $path, $config := .Values.esConfig }}

          - name: esconfig

            mountPath: /usr/share/elasticsearch/config/{{ $path }}

            subPath: {{ $path }}

          {{- end -}}

        {{- if .Values.extraVolumeMounts }}

        # Currently some extra blocks accept strings

        # to continue with backwards compatibility this is being kept

        # whilst also allowing for yaml to be specified too.

        {{- if eq "string" (printf "%T" .Values.extraVolumeMounts) }}

{{ tpl .Values.extraVolumeMounts . | indent 10 }}

        {{- else }}

{{ toYaml .Values.extraVolumeMounts | indent 10 }}

        {{- end }}

        {{- end }}

      {{- if .Values.masterTerminationFix }}

      {{- if eq .Values.roles.master "true" }}

      # This sidecar will prevent slow master re-election

      # https://github.com/elastic/helm-charts/issues/63

      - name: elasticsearch-master-graceful-termination-handler

        image: "{{ .Values.image }}:{{ .Values.imageTag }}"

        imagePullPolicy: "{{ .Values.imagePullPolicy }}"

        command:

        - "sh"

        - -c

        - |

          #!/usr/bin/env bash

          set -eo pipefail



          http () {

              local path="${1}"

              if [ -n "${ELASTIC_USERNAME}" ] && [ -n "${ELASTIC_PASSWORD}" ]; then

                BASIC_AUTH="-u ${ELASTIC_USERNAME}:${ELASTIC_PASSWORD}"

              else

                BASIC_AUTH=''

              fi

              curl -XGET -s -k --fail ${BASIC_AUTH} {{ .Values.protocol }}://{{ template "elasticsearch.masterService" . }}:{{ .Values.httpPort }}${path}

          }



          cleanup () {

            while true ; do

              local master="$(http "/_cat/master?h=node" || echo "")"

              if [[ $master == "{{ template "elasticsearch.masterService" . }}"* && $master != "${NODE_NAME}" ]]; then

                echo "This node is not master."

                break

              fi

              echo "This node is still master, waiting gracefully for it to step down"

              sleep 1

            done



            exit 0

          }



          trap cleanup SIGTERM



          sleep infinity &

          wait $!

        resources:

{{ toYaml .Values.sidecarResources | indent 10 }}

        env:

          - name: NODE_NAME

            valueFrom:

              fieldRef:

                fieldPath: metadata.name

        {{- if .Values.extraEnvs }}

{{ toYaml .Values.extraEnvs | indent 10 }}

        {{- end }}

        {{- if .Values.envFrom }}

        envFrom:

{{ toYaml .Values.envFrom | indent 10 }}

        {{- end }}

      {{- end }}

      {{- end }}

{{- if .Values.lifecycle }}

        lifecycle:

{{ toYaml .Values.lifecycle | indent 10 }}

{{- end }}

      {{- if .Values.extraContainers }}

      # Currently some extra blocks accept strings

      # to continue with backwards compatibility this is being kept

      # whilst also allowing for yaml to be specified too.

      {{- if eq "string" (printf "%T" .Values.extraContainers) }}

{{ tpl .Values.extraContainers . | indent 6 }}

      {{- else }}

{{ toYaml .Values.extraContainers | indent 6 }}

      {{- end }}

      {{- end }}





===========================================================================================




Начинаем установку:




[root@prod-vsrv-kubemaster1 helm-charts]# helm install elasticsearch -n elk —values elasticsearch/values.yaml elasticsearch/




[root@prod-vsrv-kubemaster1 helm-charts]# helm install kibana -n elk —values kibana/values.yaml kibana/




ждём когда запустится кибана и переходим по домену указанному в ingress у кибана в переменных








Сюда вбиваем наши логин и пароль из секрета созданного в самом начале, напомню elastic elastic




Переходим в
Stack Management Index Management index templates






на втором пункте нажимаем next, на третьем пишем @timespamp и выбираем date





потом нажимаем next далее:





теперь создаём политику на ролловер и удаление









Запускаем logstash и filebeat настраиваем snapshot




[root@prod-vsrv-kubemaster1 helm-charts]# helm install logstash -n elk —values logstash/values.yaml logstash/




[root@prod-vsrv-kubemaster1 helm-charts]# helm install filebeat -n elk —values filebeat/values.yaml filebeat/




теперь создаём репозиторий для снапшотов и их политику






тут указываем нашу директорию /snapshot она подключалась через отдельный вольюм






далее вводим
name terminal-soft




snapshot name:  <terminal-soft-{now/d}>    (кавычки обязательны)










Роли и пользователей можно настраивать тут:





======================================================================================================================================================




запускаем elastic в 1 instance




vim elasticsearch/values.yaml




replicas: 1

minimumMasterNodes: 1




[root@prod-vsrv-kubemaster1 helm-charts-7.9.4.elasticsearch-1-pod]# helm install elasticsearch -n elk —values elasticsearch/values.yaml elasticsearch/




[root@prod-vsrv-kubemaster1 helm-charts-7.9.4.elasticsearch-1-pod]# helm install kibana -n elk —values kibana/values.yaml kibana/




Создаём в kibana так же темплейт
Но задаём параметр number_of_replicas»: «0»





после запускаем logstash filebeat
[root@prod-vsrv-kubemaster1 helm-charts-7.9.4.elasticsearch-1-pod]# helm install logstash -n elk —values logstash/values.yaml logstash/
[root@prod-vsrv-kubemaster1 helm-charts-7.9.4.elasticsearch-1-pod]# helm install filebeat -n elk —values filebeat/values.yaml filebeat/
После этого настраиваем snapshot




====================================================================================================




Настройка доступов пользователю для индексов.




Создаём пространство:






указываем — что должно отображаться в пространстве:







Создаём роль для нашего индекса:





указываем привилегии как для кластера так и непосредственно для индекса terminal-soft





добавляем привилегии для пространства:





настраиваем доступы для пространства, — чтение/полный доступ/отключить






Создаём пользователя:





задаём пароль и созданную нами ранее роль:





Логинимся под нашим новым пользователем





Создаём index pattern







Проверяем:





как видим данные отображаются:





11.Восстановление из snapshot




Если требуется восстановить индексы из snapshot то делаем следующее:










Тут надо добавить параметр




«indexing_complete»: «true»
только в том случае если  при восстановлении возникает ошибка следующего вида:




Unable to restore snapshot




[illegal_state_exception] alias [terminal-soft] has more than one write index [terminal-soft-2021.03.04-000022,terminal-soft-2021.03.16-000034]








Поэтому когда производишь восстановление необходимо восстанавливать индекс из самого последнего снапшота.
т.е. Если нужен индекс за 10 число то снапшот смотрим где-то  за 15 число. Ну или добавляем пераметр «indexing_complete»: «true»




Источник: https://sidmid.ru/kubernetes-установка-elk-из-helm-чарта-xpack-ilm/



2023-05-03T01:28:39
Software

Разница между лицензионными ключами продуктов Windows OEM SLP, NSLP, COA и DM

В предыдущем посте мы обсуждали различные типы ключей продукта Windows и их отличия друг от друга. Одним из типов ключей продукта были ключи производителя оригинального оборудования (OEM), которые предварительно устанавливаются на новые компьютеры.

Сегодня мы рассмотрим тему различных типов лицензионных ключей Windows OEM, которые можно найти сегодня, чтобы наши читатели могли принять обоснованное решение при покупке своего следующего компьютера.

Типы лицензионных ключей Windows OEM

Компании, которые производят компьютеры, являются производителями оригинального оборудования, такими как Dell, HP, Asus и т. д. Microsoft предоставляет им OEM-лицензии для использования на их компьютерах, которые предварительно устанавливаются, когда они достигают конечного пользователя.

С момента выпуска Windows XP Microsoft предоставляет OEM-производителям различные типы лицензий для конечных пользователей.

Существует 4 типа лицензионных ключей OEM:

  • OEM: предварительная установка с блокировкой системы (SLP)
  • OEM: предварительная установка без блокировки системы (NSLP)
  • OEM: Сертификат подлинности (COA)
  • OEM: цифровой маркер (DM)

Каждый из этих типов предназначен для разных целей и с небольшими отличиями. Давайте продолжим смотреть, чем они отличаются друг от друга и какой из них вам следует выбрать.

OEM: СЛП

Ключи продукта OEM: System Locked Pre-installation (SLP) уже встроены в ОС. Для этих типов ключей не требуется активное подключение к Интернету, а также подключение к серверам Microsoft для успешной активации Windows.

Встроенный подписанный сертификат в ОС сверяется с данными, встроенными в BIOS системы. Если данные внутри успешно совпадают, то Windows активируется.

Одно предостережение относительно лицензионных ключей OEM:SLP заключается в том, что их нельзя использовать на других компьютерах. Ключ активации привязан к жесткому диску и материнской плате компьютера и будет работать только на этом конкретном компьютере.

Компьютер с лицензионным ключом OEM: SLP Windows будет иметь наклейку «Сертификат подлинности». На этой этикетке также есть письменный ключ продукта. Однако этот ключ продукта не используется для активации Windows. Вместо этого проверяется сравнение цифрового сертификата и BIOS (как было сказано выше).

Ключ продукта указан на этикетке на случай переустановки Windows.

ОЕМ: НСЛП

Лицензионные ключи OEM: Non-SLP аналогичны розничным лицензиям. Они поставляются с ключом продукта активации, который конечному пользователю необходимо ввести вручную для активации Windows.

Единственная разница между ключом OEM: NSLP и розничным ключом заключается в том, что ключ OEM: NSLP распространяется OEM.

OEM: Сертификат подлинности

Сертификат аутентификацииСертификат аутентификации

OEM: сертификат подлинности (COA) — это тип OEM-лицензии, при котором устройство поставляется с этикеткой, подобной приведенной выше. Эта метка является сертификатом аутентификации, подтверждающим подлинность ОС Windows.

На устройстве с лицензией OEM: COA ОС Windows предустановлена ​​и предварительно активирована с помощью ключа продукта, указанного на этикетке.

Ключ продукта указан на этикетке на случай переустановки Windows.

Однако, в отличие от лицензионного ключа OEM: SLP, лицензии OEM: COA не привязаны к оборудованию и могут быть перенесены на другие устройства с той же версией ОС. Обратите внимание, что такая передача лицензии может быть незаконна, но будет работать. Более того, одну и ту же лицензию можно использовать только на одном устройстве одновременно.

ОЕМ: ДМ

Лицензия OEM: Digital Marker (DM) очень похожа на лицензию OEM: SLP. OEM: лицензии DM встроены в аппаратное обеспечение компьютера через сертификат с цифровой подписью в Windows и файл, встроенный в BIOS.

Он также поставляется с прикрепленной этикеткой с написанным на ней ключом продукта.

Однако, в отличие от лицензий OEM: SLP, устройства, активированные с помощью лицензий OEM: DM, не требуют ручного ввода ключа продукта в случае переустановки ОС.

Как проверить тип лицензии OEM?

Вы можете проверить, есть ли у вашего ПК OEM, розничная или корпоративная лицензия. Тем не менее, нет собственного метода для проверки того, какой тип OEM-версии работает.

Однако есть несколько сторонних инструментов, которые можно использовать для определения типа лицензирования OEM на вашем ПК:

  • Проверка Microsoft PIDX
  • Средство проверки ключа продукта Windows 7

У этих инструментов нет собственного официального веб-сайта, поэтому вам может потребоваться просмотреть Интернет и загрузить их из надежного источника.

Заключение

Теперь, когда вы знаете, какие типы различных OEM-лицензий доступны сегодня, вы можете принять взвешенное решение о том, какую из них вы хотите приобрести.

Даже с OEM-лицензиями между версиями не так много различий. Однако, если вы хотите купить новые ноутбуки для своей фирмы, вам следует приобрести их с лицензией OEM: SLP, чтобы оборудование нельзя было заменить.

Похожие сообщения:



2023-05-03T01:26:54
Tips and Tricks

Как смотреть видео с возрастным ограничением на YouTube без входа в систему (компьютер, Android, iPhone)

YouTube, пожалуй, одна из самых популярных потоковых платформ, доступных сегодня. Он охватывает все типы аудитории — от детей, которые смотрят детские стишки, до взрослых, желающих узнать больше о своих лекарствах. Несмотря на то, что платформа не разрешает строго откровенный контент, некоторые видео скрыты за возрастной стеной, чтобы защитить свою аудиторию младше определенного возраста. Эти видео называются видео с возрастным ограничением.

Из-за этой возрастной настройки контента Youtube иногда может появляться следующее приглашение:

Войдите, чтобы подтвердить свой возраст

Войдите, чтобы подтвердить свой возрастЮтуб возраст подсказка

Даже после входа в систему вы иногда не можете просмотреть видео.

Если вы столкнулись с этой проблемой и пропускаете часть контента YouTube, следующее руководство поможет вам обойти режим возрастного ограничения и отключить «Ограниченный режим» на Youtube на компьютере, устройстве Android или устройстве iOS.

Как работает возрастное ограничение YouTube

При входе на YouTube вас попросят использовать учетную запись Google. Информация, указанная в вашей учетной записи Google, затем используется для определения вашего возраста, например даты рождения.

Если ваш возраст приближается к 18 годам и старше, то «Ограниченный режим» отключается. Однако, если вам от 13 до 18 лет, «Ограниченный режим» включается автоматически. Если вам еще не исполнилось 13 лет, вы вообще не сможете создать учетную запись YouTube.

Чтобы проверить, какую дату рождения YouTube рассматривает для вашей учетной записи, выполните следующие действия:

  1. Нажмите на изображение своего профиля в правом верхнем углу.

    Убедитесь, что вы вошли в систему 1Откройте настройки своего профиля YouTube.

  2. Щелкните Настройки.

    Откройте настройки YouTubeОткройте настройки YouTube

  3. в Счет нажмите «Просмотреть или изменить настройки учетной записи Google».

    Просмотр настроек аккаунта GoogleПросмотр настроек аккаунта Google

    Теперь вы будете перенаправлены в настройки своего аккаунта Google.

  4. Переключиться на Личная информация вкладка

    Просмотр личной информацииПросмотр личной информации

  5. Теперь вы сможете увидеть свой день рождения под Базовая информация раздел. Вы можете нажать на него, чтобы отредактировать его.

    Просмотр или изменение дня рождения в аккаунте GoogleПросмотр или изменение дня рождения в аккаунте Google

Это день рождения, который YouTube использует для определения вашего возраста.

Как смотреть видео с возрастным ограничением на YouTube на ПК

При использовании компьютера существует несколько способов просмотра видео на YouTube без входа в систему. Это можно решить, просто войдя в систему или отключив «Ограниченный режим».

Есть и другие методы, о которых вы узнаете ниже.

Войдите на YouTube, чтобы смотреть видео с возрастными ограничениями

Как упоминается в подсказке Youtube, вход в Youtube, вероятно, снимет ограничение и позволит вам посмотреть видео. Попробуйте войти на Youtube с помощью своей учетной записи Google, выполнив следующие действия:

  1. Открыть www.youtube.com с помощью любого веб-браузера.

  2. Нажмите «Войти» в правом верхнем углу.

    Нажмите ВойтиНажмите «Войти»

    Обратите внимание: если вместо этого вы видите изображение своего профиля в правом верхнем углу, это означает, что вы уже вошли в Youtube. Если вы по-прежнему не можете просмотреть видео NSFW, перейдите непосредственно к другим методам, приведенным ниже.

  3. Выберите свою учетную запись или нажмите «Использовать другую учетную запись».

    Выберите аккаунтВыберите аккаунт

  4. Введите учетные данные своей учетной записи и нажмите «Далее».

    Введите учетные данныеВведите учетные данные

Теперь вы войдете в Youtube, и вам будет разрешено просматривать видео NSFW. Однако, если проблема не устранена, попробуйте отключить «Ограниченный режим», используя руководство в следующем разделе ниже.

Отключить ограниченный режим

На YouTube есть «Ограниченный режим», в котором все видео не воспроизводятся и могут содержать неприемлемый контент для детей. Если этот режим включен, вы можете не видеть эти видео.

Попробуйте отключить «Ограниченный режим» YouTube, выполнив следующие действия:

  1. Подтвердите, что вы вошли на Youtube, просмотрев изображение своего профиля в правом верхнем углу.

    Если вы не вошли в систему, вы можете сделать это, выполнив действия, описанные в разделе выше.

  2. Нажмите на изображение своего профиля в правом верхнем углу.

    Убедитесь, что вы вошли в системуНажмите на свой профиль

  3. Нажмите на настройки ограниченного режима в раскрывающемся меню.

    Откройте настройки ограниченного режимаОткройте настройки ограниченного режима

  4. В следующем меню переместите ползунок перед «АКТИВИРОВАТЬ ОГРАНИЧЕННЫЙ РЕЖИМ» в положение «Выкл.».

    Отключить ограниченный режимОтключить ограниченный режим

Как только «Ограниченный режим» будет отключен, ваша страница обновится, чтобы включить новый контент NSFW или воспроизвести видео, которое вы уже открыли.

Если вы хотите снова включить эту функцию в будущем, просто переместите ползунок «Активировать ограниченный режим».

Обход возрастных ограничений на YouTube с помощью сторонних веб-сайтов

В Интернете есть и другие веб-сайты, похожие на Youtube, на которых размещены те же видео с немного другими URL-адресами. Одним из таких сайтов является youtubensfw.com. Все, что вам нужно сделать, это открыть видео с ограниченным доступом на Youtube и изменить его URL. Вот как:

  1. Открыть www.youtube.com а затем откройте видео с ограниченным доступом.

  2. Нажмите на омнибокс вверху, чтобы изменить URL-адрес.

    Изменить URLИзменить URL

  3. Добавьте «nsfw» рядом с «youtube» и измените URL-адрес на «www.youtubensfw.com…» и нажмите Enter, оставив остальную часть URL-адреса без изменений.

    Напишите www youtubensfw comНапишите www.youtubensfw.com

Это же видео теперь будет открываться на другом веб-сайте без ограничений доступа.

Как обойти возрастное ограничение Youtube на устройствах Android

На большинстве устройств Android на телефонах и планшетах предустановлено приложение Youtube. Как и в веб-версии, у них также есть ограниченный режим, который вы можете изменить. Выполните следующие действия, чтобы отключить ограниченный режим YouTube на устройстве Android:

  1. Откройте приложение Ютуб.

  2. Нажмите на изображение своего профиля в правом верхнем углу.

    Открыть настройкиОткрыть настройки

  3. Щелкните Настройки.

    Нажмите НастройкиНажмите Настройки

  4. Щелкните Общие.

    Нажмите ОбщиеНажмите на Общие

  5. Переведите ползунок перед «Ограниченным режимом» в положение «Выкл.».

    Отключить ограниченный режим AndroidОтключить ограниченный режим

Ограниченный режим YouTube теперь будет отключен и позволит вам смотреть видео NSFW. Однако, если вы хотите вернуться к настройкам по умолчанию в будущем, все, что вам нужно сделать, это снова переключить ползунок «Ограниченный режим».

Как обойти возрастное ограничение Youtube на iPhone

Как и Android, устройства iOS также имеют предустановленные приложения YouTube с «Ограниченным режимом». Вот как вы можете отключить его для просмотра ограниченного контента:

  1. Откройте приложение Ютуб.

  2. Нажмите на изображение своего профиля в правом верхнем углу.

  3. Щелкните Настройки.

  4. Щелкните Общие.

  5. Переведите ползунок перед «Ограниченным режимом» в положение «Выкл.».

Шаги для Android и iOS по отключению «Ограниченного режима» YouTube очень похожи. Следовательно, то же самое относится и к включению функции, когда это необходимо.

Часто задаваемые вопросы (FAQ)

Что такое ограниченный режим на Youtube?

Ограниченный режим YouTube — это политика Google по показу зрителям контента, соответствующего их возрасту. Учетные записи младше 18 лет не могут просматривать откровенный контент или контент NSFW.

Как отключить ограниченный режим на Youtube?

Ограниченный режим можно отключить только после входа в систему с учетной записью Google. После входа в систему вы можете отключить ограниченный режим на ПК, перейдя в меню «Профиль» >> «Ограниченный режим», или на iOS/Android, перейдя в «Меню профиля» >> «Настройки» >> «Основные» >> «Ограниченный режим».

Сколько мне должно быть лет, чтобы смотреть запрещенные видео на Youtube?

Вам должно быть не менее 18 лет, чтобы иметь возможность просматривать запрещенный контент на Youtube.

Сколько мне должно быть лет, чтобы создать учетную запись Youtube?

Вам должно быть не менее 13 лет, чтобы иметь возможность создать собственную учетную запись на Youtube. Если вы моложе этого возраста, взрослый должен создать для вас учетную запись для детей.

Похожие сообщения:



2023-05-02T22:23:36
Tips and Tricks