Использование интерфейса командной строки#

Последовательность выполнения#

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

  1. Используйте команду oc new-project для создания нового проекта:

    oc new-project my-project
    

    Пример вывода:

    Now using project "my-project" on server "https://openshift.example.com:6443".
    
  2. Используйте команду oc new-app для создания нового приложения:

    oc new-app https://github.com/sclorg/cakephp-ex
    

    Пример вывода:

    --> Found image 40de956 (9 days old) in imagestream "openshift/php" under tag "7.2" for "php"
    
    ...
    
        Run 'oc status' to view your app.
    
  3. Используйте команду oc get pods для просмотра pod текущего проекта.

    oc get pods -o wide
    

    Пример вывода:

    NAME                  READY   STATUS      RESTARTS   AGE     IP            NODE                           NOMINATED NODE
    cakephp-ex-1-build    0/1     Completed   0          5m45s   NN.NNN.N.NN   ip-NN-N-NNN-NN.ec2.internal    <none>
    cakephp-ex-1-deploy   0/1     Completed   0          3m44s   MM.MMM.M.M    ip-MM-M-MMM-MM.ec2.internal    <none>
    cakephp-ex-1-ktz97    1/1     Running     0          3m33s   PP.PPP.P.PP   ip-PP-P-PPP-PPP.ec2.internal   <none>
    

    Где NN.NNN.N.NN, MM.MMM.M.M и PP.PPP.P.PP в примере вывода – актуальные IP адреса pod.

  4. Используйте команду oc logs для просмотра журналов pod:

    oc logs cakephp-ex-1-deploy
    

    Пример вывода:

    --> Scaling cakephp-ex-1 to 1
    --> Success
    
  5. Используйте команду oc project для просмотра текущего проекта:

    oc project
    

    Пример вывода:

    Using project "my-project" on server "https://openshift.example.com:6443".
    
  6. Используйте команду oc status для просмотра информации о текущем проекте, такой как информация о службах, развертывании и конфигурации сборки.

    oc status
    

    Пример вывода:

    In project my-project on server https://openshift.example.com:6443
    
    svc/cakephp-ex - NNN.NN.NNN.NN ports 8080, 8443
      dc/cakephp-ex deploys istag/cakephp-ex:latest <-
        bc/cakephp-ex source builds https://github.com/sclorg/cakephp-ex on openshift/php:7.2
        deployment #1 deployed 2 minutes ago - 1 pod
    
    3 infos identified, use 'oc status --suggest' to see details.
    

    Где NNN.NN.NNN.NN – актуальный IP адрес.

  7. Используйте команду oc api-resource, чтобы просмотреть список поддерживаемых ресурсов API на сервере:

    oc api-resources
    

    Пример вывода:

    NAME                                  SHORTNAMES       APIGROUP                              NAMESPACED   KIND
    bindings                                                                                     true         Binding
    componentstatuses                     cs                                                     false        ComponentStatus
    configmaps                            cm                                                     true         ConfigMap
    ...
    
  8. Используйте oc help для получения списка и описания всех доступных команд CLI:

    oc help
    

    Пример вывода:

    OpenShift Client
    
    This client helps you develop, build, deploy, and run your applications on any OpenShift or Kubernetes compatible
    platform. It also includes the administrative commands for managing a cluster under the 'adm' subcommand.
    
    Usage:
      oc [flags]
    
    Basic Commands:
      login           Log in to a server
      new-project     Request a new project
      new-app         Create a new application
    
    ...
    
  9. Используйте флаг --help, чтобы получить справку по конкретной команде CLI:

    oc create --help
    

    Пример вывода:

    Create a resource by filename or stdin
    
    JSON and YAML formats are accepted.
    
    Usage:
      oc create -f FILENAME [flags]
    
    ...
    
  10. Используйте команду oc explain для просмотра описания и полей конкретного ресурса:

    oc explain pods
    

    Пример вывода:

    KIND:     Pod
    VERSION:  v1
    
    DESCRIPTION:
         Pod is a collection of containers that can run on a host. This resource is
         created by clients and scheduled onto hosts.
    
    FIELDS:
       apiVersion	<string>
         APIVersion defines the versioned schema of this representation of an
         object. Servers should convert recognized schemas to the latest internal
         value, and may reject unrecognized values. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
    
    ...
    
  11. Выйдите из интерфейса командной строки DropApp Plus, чтобы завершить текущий сеанс, используя команду oc logout:

    oc logout
    

    Пример вывода:

    Например, для службы с именем foo, которая сопоставляется контейнеру с именем bar, определены следующие переменные:

    FOO_SERVICE_HOST=<the host the service is running on>
    FOO_SERVICE_PORT=<the port the service is running on>
    
  12. Получите доступ к API DropApp, используя oc клиентские библиотеки или отправляя запросы REST.

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

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

  14. Авторизация отделена от аутентификации и контролирует обработку HTTP-вызовов. Пройдите проверку подлинности, прежде чем запрос может быть авторизован (и предоставлено разрешение на доступ).

  15. Используйте контроллеры допуска explains plug-ins which intercepts requests to the DropApp API server after authentication and authorization.

Процесс контроля допуска выполняется в два этапа. На первом этапе выполняются изменяющие контроллеры допуска. На втором этапе выполняется проверка контроллеров допуска. Еще раз обратите внимание, что некоторые контроллеры выполняются обоими этапами.

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

Контроллеры допуска иногда могут иметь побочные эффекты, то есть изменять связанные ресурсы как часть обработки запроса. Любой побочный эффект требует соответствующего процесса исправления или согласования, поскольку данный контроллер допуска не знает наверняка, что данный запрос пройдет все другие контроллеры допуска. 16. Используйте функцию ядра SLO Sysctls в кластере DropApp, который описывает администратору, как использовать sysctl - интерфейс командной строки для установки параметров ядра. 17. Используйте аудит, чтобы взаимодействовать с журналами аудита DropApp. Каждый запрос может быть записан с соответствующим этапом. Определенные этапы являются:

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

  • ResponseStarted - этап после отправки заголовков ответа, но до отправки тела ответа. Этот этап генерируется только для длительных запросов (например, watch).

  • ResponseComplete - этап, когда ответ завершен, и байты отправляться не будут.

  • Panic - события, генерируемые при возникновении kernel panic.

Настройка кластера DropApp#

  1. При определении конфигураций укажите последнюю стабильную версию API.

  2. Файлы конфигурации храните в системе управления версиями перед отправкой в кластер DropApp. Это позволяет быстро откатить изменение конфигурации при необходимости. Это также помогает в повторном создании и восстановлении кластера.

  3. Запишите файлы конфигурации, используя YAML, а не JSON. Хотя эти форматы могут использоваться взаимозаменяемо почти во всех сценариях, YAML, как правило, более удобен для пользователя.

  4. Группируйте связанные объекты в один файл всякий раз, когда это имеет смысл. Часто одним файлом управлять проще, чем несколькими. Посмотрите файл guestbook-all-in-one.yaml в качестве примера этого синтаксиса. Обратите также внимание, что многие oc команды могут вызываться в каталоге. Например, можно вызвать каталог конфигурационных файлов oc apply.

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

  6. Поместите описания объектов в аннотации, чтобы обеспечить лучший самоанализ.

Открытые pod в сравнении с наборами копий, развертываниями и заданиями#

Не используйте открытые pod (то есть pod, не привязанные к набору реплик или развертыванию), если можно этого избежать. Открытые pod не будут перенесены в случае сбоя узла.

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

Услуги#

Создайте службу перед соответствующими рабочими нагрузками ее серверной части (развертываниями или наборами реплик) и перед любыми рабочими нагрузками, которым требуется доступ к ней. Когда DropApp запускает контейнер, он предоставляет переменные среды, указывающие на все службы, которые были запущены при запуске контейнера. Например, если служба с именем foo существует, все контейнеры получат следующие переменные в своей исходной среде:

FOO_SERVICE_HOST=<the host the Service is running on>
FOO_SERVICE_PORT=<the port the Service is running on>

Это подразумевает требование к порядку – все, к чему pod может получить доступ, должно быть создано перед pod, иначе переменные среды не будут заполнены. DNS не имеет этого ограничения. Необязательным (хотя и настоятельно рекомендуемым) кластерным дополнением является DNS-сервер. DNS-сервер проверяет API DropApp на наличие новых services и создает набор записей DNS для каждой. Если DNS был включен во всем кластере DropApp, то все pod должны иметь возможность автоматически разрешать имена services.

Не указывайте hostPort для pod, если это не является абсолютно необходимым. Когда pod привязан к hostPort, это ограничивает количество мест, которые pod может запланировать, потому что каждая комбинация hostIP, hostPort, protocol должна быть уникальной. Если не указать hostIP и protocol явно, DropApp Plus будет использовать 0.0.0.0 по умолчанию hostIP и TCP по умолчанию protocol.

Если вам нужен доступ к порту только для целей отладки, возможно использование прокси-сервера api-server или oc port-forward.

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

Использование меток#

Определите и используйте метки, которые идентифицируют семантические атрибуты приложения или развертывания, такие как { app.kubernetes.io/name: MyApp, tier: frontend, phase: test, deployment: v3 }. Можно использовать метки для выбора подходящих pod для других ресурсов; например, службы, которая выбирает все tier: frontend pod или все phase: test компоненты app.dropapp.io/name: MyApp.

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

Желаемое состояние объекта описывается deployment, и если применяются изменения к этой спецификации, контроллер развертывания изменяет фактическое состояние на желаемое состояние с контролируемой скоростью.

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

Можно манипулировать метками для отладки. Поскольку контроллеры DropApp (такие, как - ReplicaSet) и службы соответствуют pod с использованием меток выбора, удаление соответствующих меток из pod остановит его рассмотрение контроллером или передачу трафика службой. Если удалить метки существующего pod, его контроллер создаст новый pod, который займет его место. Для интерактивного удаления или добавления меток используйте oc label.

Использование oc#

Используйте oc apply -f <directory>. Команда ищет конфигурацию DropApp во всех .yaml, .yml и .json файлах в <directory> и передает ее apply.

Используйте селекторы меток для get и delete операций вместо конкретных имен объектов. Смотрите разделы, посвященные селекторам меток и эффективному использованию меток.

Используйте oc create deployment и oc expose для быстрого создания одноконтейнерных развертываний и служб.

Результат#

Командная строка настроена и готова к использованию.