OpenShift - szybki przewodnik

OpenShift to platforma programistyczna w chmurze jako usługa (PaaS) obsługiwana przez firmę Red Hat. Jest to oparta na chmurze, przyjazna dla użytkownika platforma typu open source służąca do tworzenia, testowania i uruchamiania aplikacji, a następnie wdrażania ich w chmurze.

OpenShift może zarządzać aplikacjami napisanymi w różnych językach, takich jak Node.js, Ruby, Python, Perl i Java. Jedną z kluczowych cech OpenShift jest to, że jest rozszerzalny, co pomaga użytkownikom obsługiwać aplikację napisaną w innych językach.

OpenShift zawiera różne koncepcje wirtualizacji jako warstwę abstrakcji. Podstawowa koncepcja OpenShift opiera się na wirtualizacji.

Wirtualizacja

Ogólnie wirtualizację można zdefiniować jako tworzenie systemu wirtualnego, a nie fizyczną lub rzeczywistą wersję czegokolwiek, zaczynając od systemu, pamięci masowej lub systemu operacyjnego. Głównym celem wirtualizacji jest zwiększenie skalowalności i niezawodności infrastruktury IT. Koncepcja wirtualizacji istnieje od dziesięcioleci, a wraz z rozwojem dzisiejszej branży IT można ją zastosować do szerokiego zakresu warstw, począwszy od poziomu systemu, poziomu sprzętu, a skończywszy na wirtualizacji na poziomie serwera.

Jak to działa

Można to opisać jako technologię, w której każda aplikacja lub system operacyjny jest wyodrębniony z rzeczywistej warstwy fizycznej. Jednym z kluczowych zastosowań technologii wirtualizacji jest wirtualizacja serwera, która wykorzystuje oprogramowanie zwane hiperwizorem, aby oddzielić warstwę od podstawowego sprzętu. Wydajność systemu operacyjnego działającego w ramach wirtualizacji jest tak dobra, jak w przypadku fizycznego sprzętu. Jednak koncepcja wirtualizacji jest popularna, ponieważ większość uruchomionych systemów i aplikacji nie wymaga użycia odpowiedniego sprzętu.

Architektura fizyczna a wirtualna

Rodzaje wirtualizacji

  • Application Virtualization- W tej metodzie aplikacja jest wyodrębniona z bazowego systemu operacyjnego. Ta metoda jest bardzo przydatna, gdy aplikacja może być uruchamiana w izolacji, bez uzależnienia od systemu operacyjnego pod nią.

  • Desktop Virtualization- Ta metoda służy do zmniejszenia obciążenia stacji roboczej, w której można uzyskać zdalny dostęp do pulpitu za pomocą cienkiego klienta przy biurku. W tej metodzie komputery stacjonarne są najczęściej uruchamiane w centrum danych. Klasycznym przykładem może być obraz wirtualnego pulpitu (VDI), który jest używany w większości organizacji.

  • Data Virtualization - Jest to metoda abstrakcji i odejścia od tradycyjnego sposobu zarządzania danymi i danymi.

  • Server Virtualization- W tej metodzie zwirtualizowane są zasoby związane z serwerem, w tym fizyczny serwer, proces i system operacyjny. Oprogramowanie, które umożliwia taką abstrakcję, jest często nazywane hiperwizorem.

  • Storage Virtualization - Jest to proces łączenia wielu urządzeń pamięci masowej w jedno urządzenie pamięci masowej, które jest zarządzane z jednej centralnej konsoli.

  • Network Virtualization - Jest to metoda, w której wszystkie dostępne zasoby sieciowe są łączone poprzez rozdzielenie dostępnej przepustowości i kanałów, z których każdy jest niezależny od siebie.

OpenShift

OpenShift to platforma aplikacji obsługująca chmurę jako usługa (PaaS). Jest to technologia typu open source, która pomaga organizacjom przenieść tradycyjną infrastrukturę i platformę aplikacji z fizycznych, wirtualnych nośników do chmury.

OpenShift obsługuje bardzo dużą różnorodność aplikacji, które można łatwo tworzyć i wdrażać na platformie chmurowej OpenShift. OpenShift zasadniczo obsługuje trzy rodzaje platform dla programistów i użytkowników.

Infrastruktura jako usługa (IaaS)

W tym formacie dostawca usług udostępnia maszyny wirtualne na poziomie sprzętu z pewną wstępnie zdefiniowaną wirtualną konfiguracją sprzętową. W tej przestrzeni jest wielu konkurentów, zaczynając od chmury AWS Google, Rackspace i wielu innych.

Główną wadą posiadania IaaS po długiej procedurze konfiguracji i inwestycji jest to, że nadal jest się odpowiedzialnym za instalację i utrzymanie systemu operacyjnego i pakietów serwerowych, zarządzanie siecią infrastruktury oraz podstawową administrację systemem.

Oprogramowanie jako usługa (SaaS)

W przypadku SaaS najmniej zmartwień jest podstawowa infrastruktura. Jest to tak proste, jak plug and play, w którym użytkownik musi po prostu zarejestrować się w usługach i zacząć z nich korzystać. Główną wadą tej konfiguracji jest to, że można wykonać tylko minimalną ilość dostosowań, na którą zezwala usługodawca. Jednym z najczęstszych przykładów SaaS jest Gmail, w którym użytkownik musi się tylko zalogować i zacząć go używać. Użytkownik może również wprowadzić drobne modyfikacje na swoim koncie. Jednak z punktu widzenia dewelopera nie jest to zbyt przydatne.

Platforma jako usługa (PaaS)

Można go uznać za środkową warstwę między SaaS i IaaS. Podstawowym celem oceny PaaS jest programista, w którym środowisko programistyczne można uruchomić za pomocą kilku poleceń. Te środowiska są zaprojektowane w taki sposób, aby mogły zaspokoić wszystkie potrzeby programistyczne, począwszy od posiadania serwera aplikacji internetowych z bazą danych. Aby to zrobić, potrzebujesz tylko jednego polecenia, a usługodawca zrobi wszystko za Ciebie.

Dlaczego warto korzystać z OpenShift?

OpenShift zapewnia wspólną platformę dla jednostek korporacyjnych do hostowania aplikacji w chmurze bez martwienia się o podstawowy system operacyjny. To sprawia, że ​​korzystanie, tworzenie i wdrażanie aplikacji w chmurze jest bardzo łatwe. Jedną z kluczowych cech jest to, że zapewnia zarządzany sprzęt i zasoby sieciowe do wszelkiego rodzaju programowania i testowania. Dzięki OpenShift programista PaaS ma swobodę projektowania wymaganego środowiska ze specyfikacjami.

OpenShift zapewnia różnego rodzaju umowy dotyczące poziomu usług, jeśli chodzi o plany usług.

Free - Ten plan jest ograniczony do trzech lat z 1 GB miejsca na każdy.

Bronze - Ten plan obejmuje 3 lata i rozszerza się do 16 lat przy 1 GB przestrzeni rocznie.

Sliver - To 16-letni plan Bronze, jednak ma pojemność 6 GB bez dodatkowych kosztów.

Oprócz powyższych funkcji, OpenShift oferuje również wersję lokalną znaną jako OpenShift Enterprise. W OpenShift programiści mają możliwość projektowania skalowalnych i nieskalowalnych aplikacji, a projekty te są wdrażane przy użyciu serwerów HAproxy.

funkcje

Istnieje wiele funkcji obsługiwanych przez OpenShift. Niewielu z nich to -

  • Obsługa wielu języków
  • Obsługa wielu baz danych
  • System kaset rozszerzalnych
  • Zarządzanie wersjami kodu źródłowego
  • Wdrażanie jednym kliknięciem
  • Obsługa wielu środowisk
  • Standaryzowany przepływ pracy deweloperów
  • Zarządzanie zależnościami i kompilacją
  • Automatyczne skalowanie aplikacji
  • Responsywna konsola internetowa
  • Bogaty zestaw narzędzi wiersza polecenia
  • Zdalne logowanie SSH do aplikacji
  • Obsługa REST API
  • Samoobsługowy stos aplikacji na żądanie
  • Wbudowane usługi baz danych
  • Ciągła integracja i zarządzanie wersjami
  • Integracja IDE
  • Zdalne debugowanie aplikacji

OpenShift powstał z bazy o nazwie OpenShift V2, która opierała się głównie na koncepcji roku i kartridży, w których każdy komponent ma swoją specyfikację, począwszy od stworzenia maszyny do wdrożenia aplikacji, od zbudowania do wdrożenia aplikacji.

Cartridges - Byli centralnym punktem budowania nowej aplikacji, zaczynając od typu aplikacji, której środowisko wymaga do ich uruchomienia i wszystkich zależności spełnianych w tej sekcji.

year- Można go zdefiniować jako maszynę lub serwer z metalowym niedźwiedziem z określonymi specyfikacjami dotyczącymi zasobów, pamięci i procesora. Uważano je za podstawową jednostkę do uruchamiania aplikacji.

Application - Odnoszą się one po prostu do aplikacji lub dowolnej aplikacji integracyjnej, która zostanie wdrożona i uruchomiona w środowisku OpenShift.

W miarę zagłębiania się w tej sekcji omówimy różne formaty i oferty OpenShift. Wcześniej OpenShift miał trzy główne wersje.

OpenShift Origin- To był dodatek społecznościowy lub wersja open source OpenShift. Był również znany jako projekt upstream dla pozostałych dwóch wersji.

OpenShift Online - Jest to publiczny PaaS jako usługa hostowana na AWS.

OpenShift Enterprise - jest wzmocnioną wersją OpenShift z licencjami ISV i dostawców.

OpenShift Online

OpenShift online to oferta społeczności OpenShift, za pomocą której można szybko tworzyć, wdrażać i skalować aplikacje kontenerowe w chmurze publicznej. Jest to publiczna platforma do tworzenia i hostowania aplikacji w chmurze firmy Red Hat, która umożliwia automatyczne udostępnianie, zarządzanie i skalowanie aplikacji, co pomaga deweloperowi skupić się na pisaniu logiki aplikacji.

Zakładanie konta w Red Hat OpenShift Online

Step 1 - Przejdź do przeglądarki i odwiedź witrynę https://manage.openshift.com/

Step 2 - Jeśli masz konto Red Hat, zaloguj się do konta OpenShift przy użyciu identyfikatora logowania i hasła Red Hat, korzystając z następującego adresu URL. https://developers.redhat.com

Step 3 - Jeśli nie masz loginu do konta Red Hat, zarejestruj się w usłudze online OpenShift, korzystając z poniższego łącza.

https://developers.redhat.com/auth/realms/rhd/login-actions/registration?code=G4w-myLd3GCH_QZCqMUmIOQlU7DIf_gfIvGu38nnzZQ.cb229a9d-3cff-4c58-b7f6-7b2c9eb17926

Po zalogowaniu zobaczysz następującą stronę.

Gdy wszystko będzie gotowe, Red Hat pokaże podstawowe szczegóły konta, jak pokazano na poniższym zrzucie ekranu.

Wreszcie, gdy jesteś zalogowany, zobaczysz następującą stronę.

Platforma kontenerowa OpenShift

Platforma kontenerowa OpenShift to platforma dla przedsiębiorstw, która pomaga wielu zespołom, takim jak zespół programistów i działów IT, w tworzeniu i wdrażaniu infrastruktury kontenerowej. Wszystkie kontenery zbudowane w OpenShift wykorzystują bardzo niezawodną technologię konteneryzacji Docker, którą można wdrożyć w dowolnym centrum danych lub publicznie hostowanych platformach chmurowych.

Platforma kontenerowa OpenShift była formalnie znana jako OpenShift Enterprises. Jest to lokalna, prywatna platforma jako usługa firmy Red Hat, zbudowana w oparciu o podstawową koncepcję kontenerów aplikacji obsługiwanych przez platformę Docker, gdzie koordynacją i administracją zarządza Kubernetes.

Innymi słowy, OpenShift łączy Dockera i Kubernetes na poziomie przedsiębiorstwa. Jest to oprogramowanie platformy kontenerowej dla jednostek przedsiębiorstwa, które umożliwia wdrażanie kandydatów i zarządzanie nimi w wybranej infrastrukturze. Na przykład hosting instancji OpenShift w instancjach AWS.

Platforma kontenerowa OpenShift jest dostępna w two package levels.

OpenShift Container Local- To jest dla tych programistów, którzy chcą wdrażać i testować aplikacje na komputerze lokalnym. Ten pakiet jest używany głównie przez zespoły programistyczne do tworzenia i testowania aplikacji.

OpenShift Container Lab - Jest to przeznaczone do rozszerzonej oceny aplikacji, począwszy od etapu projektowania, aż do wdrożenia, do środowiska przed produkcją.

Dedykowany do OpenShift

To kolejna oferta dodana do portfolio OpenShift, w którym klient może wybrać hosting platformy kontenerowej w dowolnej wybranej przez siebie chmurze publicznej. Daje to użytkownikowi końcowemu prawdziwe poczucie oferty wielochmurowej, w której może używać OpenShift w dowolnej chmurze, która spełnia ich potrzeby.

Jest to jedna z najnowszych ofert firmy Red Hat, w której użytkownik końcowy może używać OpenShift do tworzenia testów wdrożeniowych i uruchamiania aplikacji w OpenShift, który jest hostowany w chmurze.

Funkcje OpenShift Dedykowane

Dedykowany OpenShift oferuje dostosowaną platformę aplikacji rozwiązań w chmurze publicznej i jest odziedziczony po technologii OpenShift 3.

  • Extensible and Open - Jest to oparte na otwartej koncepcji Dockera i wdrażane w chmurze, dzięki czemu może się wydawać w razie potrzeby.

  • Portability - Ponieważ jest zbudowany przy użyciu Dockera, aplikacje działające na platformie Docker można łatwo przenosić z jednego miejsca do drugiego, gdzie jest obsługiwany Docker.

  • Orchestration - Dzięki OpenShift 3 jedna z kluczowych funkcji orkiestracji kontenerów i zarządzania klastrami jest obsługiwana przy użyciu Kubernetes, który pojawił się w ofercie z OpenShift w wersji 3.

  • Automation - Ta wersja OpenShift jest wyposażona w funkcję zarządzania kodem źródłowym, automatyzacji kompilacji i automatyzacji wdrażania, co czyni ją bardzo popularną na rynku jako platforma jako dostawca usług.

Konkurenci OpenShift

Google App Engine- To bezpłatna platforma Google do tworzenia i hostowania aplikacji internetowych. Silnik aplikacji Google oferuje szybką platformę do tworzenia i wdrażania.

Microsoft Azure - Chmura Azure jest hostowana przez Microsoft w ich centrach danych.

Amazon Elastic Cloud Compute - Są to wbudowane usługi dostarczane przez Amazon, które pomagają w tworzeniu i hostowaniu skalowalnych aplikacji internetowych w chmurze.

Cloud Foundry - jest otwartą platformą PaaS dla aplikacji Java, Ruby, Python i Node.js.

CloudStack - CloudStack Apache to projekt opracowany przez Citrix i ma stać się bezpośrednim konkurentem OpenShift i OpenStack.

OpenStack - Kolejna technologia chmurowa dostarczona przez firmę Red Hat do przetwarzania w chmurze.

Kubernetes - Jest to technologia bezpośredniej orkiestracji i zarządzania klastrami stworzona do zarządzania kontenerem Docker.

OpenShift to system warstwowy, w którym każda warstwa jest ściśle powiązana z drugą warstwą za pomocą klastra Kubernetes i Docker. Architektura OpenShift jest zaprojektowana w taki sposób, że może obsługiwać i zarządzać kontenerami Docker, które są hostowane na wszystkich warstwach przy użyciu Kubernetes. W przeciwieństwie do wcześniejszej wersji OpenShift V2, nowa wersja OpenShift V3 obsługuje infrastrukturę kontenerową. W tym modelu Docker pomaga w tworzeniu lekkich kontenerów opartych na systemie Linux, a Kubernetes obsługuje zadanie organizowania i zarządzania kontenerami na wielu hostach.

Składniki OpenShift

Jednym z kluczowych elementów architektury OpenShift jest zarządzanie infrastrukturą kontenerową w Kubernetes. Kubernetes jest odpowiedzialny za wdrażanie i zarządzanie infrastrukturą. W każdym klastrze Kubernetes możemy mieć więcej niż jeden master i wiele węzłów, co zapewnia, że ​​instalacja nie ma sensu.

Kubernetes Master Machine Components

Etcd- Przechowuje informacje o konfiguracji, które mogą być używane przez każdy z węzłów w klastrze. Jest to magazyn wartości kluczy o wysokiej dostępności, który można rozdzielić na wiele węzłów. Powinien być dostępny tylko przez serwer Kubernetes API, ponieważ może zawierać poufne informacje. Jest to rozproszony magazyn wartości kluczy, dostępny dla wszystkich.

API Server- Kubernetes to serwer API, który zapewnia wszystkie operacje w klastrze za pomocą API. Serwer API implementuje interfejs, co oznacza, że ​​różne narzędzia i biblioteki mogą się z nim łatwo komunikować. Kubeconfig to pakiet wraz z narzędziami po stronie serwera, których można używać do komunikacji. Udostępnia Kubernetes API ”.

Controller Manager- Ten komponent odpowiada za większość kolektorów, które regulują stan klastra i wykonują zadanie. Można go uważać za demona, który działa w pętli niezakończonej i jest odpowiedzialny za zbieranie i wysyłanie informacji do serwera API. Działa w kierunku uzyskania udostępnionego stanu klastra, a następnie wprowadza zmiany w celu doprowadzenia bieżącego stanu serwera do pożądanego stanu. Kluczowymi kontrolerami są kontroler replikacji, kontroler punktu końcowego, kontroler przestrzeni nazw i kontroler konta usługi. Menedżer kontrolera obsługuje różnego rodzaju kontrolery do obsługi węzłów, punktów końcowych itp.

Scheduler- Jest to kluczowy składnik mastera Kubernetes. Jest to usługa w master, która odpowiada za dystrybucję obciążenia. Odpowiada za śledzenie wykorzystania obciążenia roboczego na węzłach klastra, a następnie umieszczanie obciążenia, na którym zasoby są dostępne, i akceptowanie obciążenia. Innymi słowy, jest to mechanizm odpowiedzialny za przydzielanie zasobników do dostępnych węzłów. Harmonogram jest odpowiedzialny za wykorzystanie obciążenia i przydzielanie modułu do nowego węzła.

Komponenty węzła Kubernetes

Poniżej znajdują się kluczowe komponenty serwera Node, które są niezbędne do komunikacji z masterem Kubernetes.

Docker - Pierwszym wymaganiem każdego węzła jest Docker, który pomaga w uruchamianiu hermetyzowanych kontenerów aplikacji w stosunkowo izolowanym, ale lekkim środowisku operacyjnym.

Kubelet Service- Jest to mała usługa w każdym węźle, która jest odpowiedzialna za przekazywanie informacji do i z usługi płaszczyzny sterowania. Współdziała ze sklepem etcd, aby odczytać szczegóły konfiguracji i wartości Wrighta. To komunikuje się z głównym komponentem w celu otrzymywania poleceń i pracy. Proces kubelet przejmuje wtedy odpowiedzialność za utrzymanie stanu pracy i serwera węzła. Zarządza regułami sieciowymi, przekierowaniem portów itp.

Kubernetes Proxy Service- Jest to usługa proxy, która działa na każdym węźle i pomaga w udostępnianiu usług hostowi zewnętrznemu. Pomaga w przekazywaniu żądania poprawnych kontenerów. Usługa proxy Kubernetes może przeprowadzać podstawowe równoważenie obciążenia. Daje pewność, że środowisko sieciowe jest przewidywalne i dostępne, ale jednocześnie jest izolowane. Zarządza podami w węźle, woluminach, sekretach, tworzy nowe sprawdzanie stanu kontenerów itp.

Zintegrowany rejestr kontenerów OpenShift

Rejestr kontenerów OpenShift to wbudowana jednostka pamięci firmy Red Hat, która służy do przechowywania obrazów Dockera. Wraz z najnowszą zintegrowaną wersją OpenShift pojawił się interfejs użytkownika do przeglądania obrazów w wewnętrznej pamięci OpenShift. Rejestry te mogą przechowywać obrazy z określonymi tagami, które są później używane do budowania z nich kontenerów.

Często używane terminy

Image- Obrazy Kubernetes (Docker) są kluczowymi elementami składowymi infrastruktury kontenerowej. Obecnie Kubernetes obsługuje tylko obrazy platformy Docker. Każdy kontener w kapsule ma w sobie uruchomiony obraz Dockera. Podczas konfigurowania poda właściwość obrazu w pliku konfiguracyjnym ma taką samą składnię jak polecenie Docker.

Project - Można je zdefiniować jako zmienioną nazwę domeny, która była obecna we wcześniejszej wersji OpenShift V2.

Container - Są to te, które są tworzone po wdrożeniu obrazu w węźle klastra Kubernetes.

Node- Węzeł to działająca maszyna w klastrze Kubernetes, która jest również znana jako sługa dla mistrza. Są to jednostki robocze, które mogą być instancją fizyczną, maszyną wirtualną lub chmurą.

Pod- Pod to zbiór kontenerów i ich miejsca do przechowywania w węźle klastra Kubernetes. Możliwe jest utworzenie kapsuły z wieloma kontenerami w środku. Na przykład przechowywanie kontenera bazy danych i kontenera serwera WWW wewnątrz kapsuły.

W tym rozdziale dowiemy się o konfiguracji środowiska OpenShift.

Wymagania systemowe

Aby skonfigurować Enterprise OpenShift, trzeba mieć aktywne konto Red Hat. Ponieważ OpenShift działa na architekturze master i node Kubernetes, musimy skonfigurować oba z nich na osobnych maszynach, gdzie jedna maszyna działa jako master, a druga działa w węźle. Aby skonfigurować oba, należy spełnić minimalne wymagania systemowe.

Konfiguracja maszyny głównej

Poniżej przedstawiono minimalne wymagania systemowe dotyczące konfiguracji maszyny głównej.

  • Maszyna podstawowa hostowana w środowisku fizycznym, wirtualnym lub w dowolnym środowisku chmury.

  • Co najmniej Linux 7 z wymaganymi pakietami w tej instancji.

  • 2 rdzenie procesora.

  • Co najmniej 8 GB pamięci RAM.

  • 30 GB wewnętrznej pamięci dysku twardego.

Konfiguracja maszyny węzłowej

  • Fizyczny lub wirtualny obraz podstawowy, taki jak podany dla maszyny głównej.
  • Co najmniej Linux 7 na komputerze.
  • Docker zainstalowany w wersji nie niższej niż 1.6.
  • 1 rdzeń procesora.
  • 8 GB pamięci RAM.
  • Dysk twardy 15 GB do przechowywania zdjęć i 15 GB do przechowywania obrazów.

Przewodnik krok po kroku do konfiguracji OpenShift

W poniższym opisie zamierzamy skonfigurować środowisko laboratoryjne OpenShift, które można później rozszerzyć na większy klaster. Ponieważ OpenShift wymaga konfiguracji głównej i węzła, potrzebowalibyśmy co najmniej dwóch maszyn hostowanych w chmurze, maszynach fizycznych lub maszynach wirtualnych.

Step 1- Najpierw zainstaluj Linuksa na obu maszynach, gdzie Linux 7 powinien być najmniejszą wersją. Można to zrobić za pomocą następujących poleceń, jeśli ktoś ma aktywną subskrypcję Red Hat.

# subscription-manager repos --disable = "*"

# subscription-manager repos --enable = "rhel-7-server-rpms"

# subscription-manager repos --enable = "rhel-7-server-extras-rpms"

# subscription-manager repos --enable = "rhel-7-server-optional-rpms"

# subscription-manager repos --enable = "rhel-7-server-ose-3.0-rpms"

# yum install wget git net-tools bind-utils iptables-services bridge-utils

# yum install wget git net-tools bind-utils iptables-services bridge-utils

# yum install python-virtualenv

# yum install gcc

# yum install httpd-tools

# yum install docker

# yum update

Po zainstalowaniu wszystkich powyższych pakietów podstawowych na obu maszynach następnym krokiem byłoby skonfigurowanie Dockera na odpowiednich komputerach.

Step 2- Skonfiguruj Dockera tak, aby zezwalał na niezabezpieczoną komunikację tylko w sieci lokalnej. W tym celu edytuj plik Docker w / etc / sysconfig. Jeśli pliku nie ma, musisz utworzyć go ręcznie.

# vi /etc/sysconfig/docker
OPTIONS = --selinux-enabled --insecure-registry 192.168.122.0/24

Po skonfigurowaniu Dockera na maszynie głównej, musimy ustawić komunikację bez hasła między oboma maszynami. W tym celu użyjemy uwierzytelniania za pomocą klucza publicznego i prywatnego.

Step 3 - Wygeneruj klucze na maszynie głównej, a następnie skopiuj klucz id_rsa.pub do autoryzowanego pliku kluczy maszyny węzła, co można zrobić za pomocą następującego polecenia.

# ssh-keygen

# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

Po wykonaniu wszystkich powyższych ustawień, następnym krokiem jest skonfigurowanie OpenShift w wersji 3 na maszynie głównej.

Step 4 - Na komputerze głównym uruchom następującą komendę curl.

# sh <(curl -s https://install.openshift.com/ose)

Powyższe polecenie umieści konfigurację dla OSV3. Następnym krokiem byłoby skonfigurowanie OpenShift V3 na komputerze.

Jeśli nie możesz pobrać bezpośrednio z Internetu, możesz to zrobić z witryny https://install.openshift.com/portable/oo-install-ose.tgz jako pakiet tar, z którego instalator może działać na lokalnym komputerze głównym.

Gdy mamy już gotową konfigurację, musimy zacząć od faktycznej konfiguracji OSV3 na maszynach. Ta konfiguracja jest bardzo specyficzna, aby przetestować środowisko pod kątem rzeczywistej produkcji, mamy LDAP i inne rzeczy na miejscu.

Step 5 - Na komputerze głównym skonfiguruj następujący kod znajdujący się w /etc/openshift/master/master-config.yaml

# vi /etc/openshift/master/master-config.yaml
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
file: /root/users.htpasswd
routingConfig:
subdomain: testing.com

Następnie utwórz użytkownika standardowego do domyślnej administracji.

# htpasswd -c /root/users.htpasswd admin

Step 6- Ponieważ OpenShift używa rejestru Docker do konfigurowania obrazów, musimy skonfigurować rejestr Docker. Służy do tworzenia i przechowywania obrazów platformy Docker po kompilacji.

Utwórz katalog na maszynie węzła OpenShift za pomocą następującego polecenia.

# mkdir /images

Następnie zaloguj się do maszyny głównej przy użyciu domyślnych poświadczeń administratora, które są tworzone podczas konfigurowania rejestru.

# oc login
Username: system:admin

Przełącz się do domyślnego utworzonego projektu.

# oc project default

Step 7 - Utwórz rejestr Docker.

#echo '{"kind":"ServiceAccount","apiVersion":"v1","metadata":{"name":"registry"}}' | oc create -f -

Edytuj uprawnienia użytkownika.

#oc edit scc privileged
users:
- system:serviceaccount:openshift-infra:build-controller
- system:serviceaccount:default:registry

Utwórz i edytuj rejestr obrazów.

#oadm registry --service-account = registry --
config = /etc/openshift/master/admin.kubeconfig --
credentials = /etc/openshift/master/openshift-registry.kubeconfig --
images = 'registry.access.redhat.com/openshift3/ose-${component}:${version}' --
mount-host = /images

Step 8 - Utwórz trasę domyślną.

Domyślnie OpenShift używa OpenVswitch jako sieci oprogramowania. Użyj następującego polecenia, aby utworzyć trasę domyślną. Służy do równoważenia obciążenia i routingu proxy. Router jest podobny do rejestru Dockera i działa również w rejestrze.

# echo '{"kind":"ServiceAccount","apiVersion":"v1","metadata":{"name":"router"}}' | oc create -f -

Następnie edytuj uprawnienia użytkownika.

#oc edit scc privileged
users:
   - system:serviceaccount:openshift-infra:build-controller
   - system:serviceaccount:default:registry
   - system:serviceaccount:default:router

#oadm router router-1 --replicas = 1 --
credentials = '/etc/openshift/master/openshift-router.kubeconfig' --
images = 'registry.access.redhat.com/openshift3/ose-${component}:${version}'

Step 9 - Skonfiguruj DNS.

Aby obsłużyć żądanie adresu URL, OpenShift potrzebuje działającego środowiska DNS. Ta konfiguracja DNS jest wymagana do utworzenia symbolu wieloznacznego, który jest wymagany do utworzenia symbolu wieloznacznego DNS wskazującego router.

# yum install bind-utils bind

# systemctl start named

# systemctl enable named

vi /etc/named.conf
options {listen-on port 53 { 10.123.55.111; };
forwarders {
   10.38.55.13;
   ;
};

zone "lab.com" IN {
   type master;
   file "/var/named/dynamic/test.com.zone";
   allow-update { none; };
};

Step 10- Ostatnim krokiem byłoby skonfigurowanie serwera github na maszynie głównej OpenShift V3, co jest opcjonalne. Można to łatwo zrobić za pomocą następującej sekwencji poleceń.

#yum install curl openssh-server

#systemctl enable sshd

# systemctl start sshd

# firewall-cmd --permanent --add-service = http

# systemctl reload firewalld

#curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-

#yum install gitlab-ce

# gitlab-ctl reconfigure

Po zakończeniu powyższej konfiguracji możesz zweryfikować, testując i wdrażając aplikacje, o czym dowiemy się więcej w kolejnych rozdziałach.

Przed rozpoczęciem właściwej konfiguracji i wdrażania aplikacji musimy zrozumieć podstawowe terminy i pojęcia używane w OpenShift V3.

Kontenery i obrazy

Obrazy

To są podstawowe bloki konstrukcyjne OpenShift, które są tworzone z obrazów Dockera. W każdym pod OpenShift klaster ma swoje własne obrazy działające w nim. Kiedy konfigurujemy pod, mamy pole, które zostanie zebrane z rejestru. Ten plik konfiguracji pobierze obraz i wdroży go w węźle klastra.

apiVersion: v1
kind: pod
metadata:
   name: Tesing_for_Image_pull -----------> Name of Pod
      spec:
containers:
- name: neo4j-server ------------------------> Name of the image
image: <Name of the Docker image>----------> Image to be pulled
imagePullPolicy: Always ------------->Image pull policy
command: [“echo”, “SUCCESS”] -------------------> Massage after image pull

Aby wyciągnąć i utworzyć z niego obraz, uruchom następujące polecenie. OC to klient, który komunikuje się ze środowiskiem OpenShift po zalogowaniu.

$ oc create –f Tesing_for_Image_pull

Pojemnik

Jest to tworzone, gdy obraz platformy Docker zostanie wdrożony w klastrze OpenShift. Definiując dowolną konfigurację, w pliku konfiguracyjnym definiujemy sekcję kontenera. Jeden kontener może mieć wiele uruchomionych obrazów, a wszystkie kontenery działające w węźle klastra są zarządzane przez OpenShift Kubernetes.

spec:
   containers:
   - name: py ------------------------> Name of the container
   image: python----------> Image going to get deployed on container
   command: [“python”, “SUCCESS”]
   restartPocliy: Never --------> Restart policy of container

Poniżej przedstawiono specyfikacje dotyczące definiowania kontenera, w którym działa wiele obrazów.

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
   - containerPort: 7500
      imagePullPolicy: Always
      -name: Database
      Image: mongoDB
      Ports:
      - containerPort: 7501
imagePullPolicy: Always

W powyższej konfiguracji zdefiniowaliśmy kapsułę wielokontenerową z dwoma obrazami Tomcat i MongoDB w środku.

Strąki i usługi

Strąki

Pod można zdefiniować jako zbiór kontenerów i ich przechowywania w węźle klastra OpenShift (Kubernetes). Ogólnie rzecz biorąc, mamy dwa rodzaje kapsuły, zaczynając od pojedynczego pojemnika na pojemnik na wiele pojemników.

Single Container Pod - Można je łatwo utworzyć za pomocą polecenia OC lub podstawowego pliku konfiguracyjnego yml.

$ oc run <name of pod> --image = <name of the image from registry>

Utwórz go za pomocą prostego pliku yaml w następujący sposób.

apiVersion: v1
kind: Pod
metadata:
   name: apache
spec:
   containers:
   - name: apache
   image: apache: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always

Po utworzeniu powyższego pliku wygeneruje on pod za pomocą następującego polecenia.

$ oc create –f apache.yml

Multi-Container Pod- Strąki wielokontenerowe to takie, w których mamy więcej niż jeden uruchomiony w nich kontener. Są tworzone przy użyciu plików yaml w następujący sposób.

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always
   -name: Database
   Image: mongoDB
   Ports:
      - containerPort: 7501
imagePullPolicy: Always

Po utworzeniu tych plików możemy po prostu użyć tej samej metody co powyżej, aby utworzyć kontener.

Service- Ponieważ mamy zestaw kontenerów działających w zasobniku, w ten sam sposób mamy usługę, którą można zdefiniować jako logiczny zestaw zasobników. Jest to abstrakcyjna warstwa na górze kapsuły, która zapewnia pojedynczy adres IP i nazwę DNS, przez które można uzyskać dostęp do zasobników. Usługa pomaga w zarządzaniu konfiguracją równoważenia obciążenia i bardzo łatwym skalowaniu poda. W OpenShift, usługa jest obiektem REST, którego deifikacja może zostać wysłana do apiService w OpenShift master w celu utworzenia nowej instancji.

apiVersion: v1
kind: Service
metadata:
   name: Tutorial_point_service
spec:
   ports:
      - port: 8080
         targetPort: 31999

Kompilacje i strumienie

Buduje

W OpenShift kompilacja to proces przekształcania obrazów w kontenery. To przetwarzanie konwertuje kod źródłowy na obraz. Ten proces kompilacji działa na wstępnie zdefiniowanej strategii budowania kodu źródłowego do obrazu.

Kompilacja przetwarza wiele strategii i źródeł.

Buduj strategie

  • Source to Image- To w zasadzie narzędzie, które pomaga w budowaniu powtarzalnych obrazów. Te obrazy są zawsze gotowe do uruchomienia za pomocą polecenia uruchamiania platformy Docker.

  • Docker Build - Jest to proces, w którym obrazy są budowane przy użyciu pliku Docker, uruchamiając proste polecenie kompilacji Docker.

  • Custom Build - To są kompilacje, które są używane do tworzenia podstawowych obrazów Dockera.

Buduj źródła

Git- To źródło jest używane, gdy repozytorium git jest używane do tworzenia obrazów. Plik Dockerfile jest opcjonalny. Konfiguracje z kodu źródłowego wyglądają następująco.

source:
type: "Git"
git:
   uri: "https://github.com/vipin/testing.git"
   ref: "master"
contextDir: "app/dir"
dockerfile: "FROM openshift/ruby-22-centos7\nUSER example"

Dockerfile - Plik Dockerfile jest używany jako dane wejściowe w pliku konfiguracyjnym.

source:
   type: "Dockerfile"
   dockerfile: "FROM ubuntu: latest
   RUN yum install -y httpd"

Image Streams- Strumienie obrazów są tworzone po ściągnięciu obrazów. Zaletą strumienia obrazów jest to, że wyszukuje aktualizacje nowej wersji obrazu. Służy do porównywania dowolnej liczby obrazów kontenerów w formacie Docker zidentyfikowanych za pomocą tagów.

Strumienie obrazów mogą automatycznie wykonywać akcję, gdy tworzony jest nowy obraz. Wszystkie kompilacje i wdrożenia mogą obserwować działanie obrazu i odpowiednio wykonywać akcję. Poniżej opisano, jak definiujemy strumień kompilacji.

apiVersion: v1
kind: ImageStream
metadata:
   annotations:
      openshift.io/generated-by: OpenShiftNewApp
   generation: 1
   labels:
      app: ruby-sample-build
   selflink: /oapi/v1/namespaces/test/imagestreams/origin-ruby-sample
   uid: ee2b9405-c68c-11e5-8a99-525400f25e34
spec: {}
status:
   dockerImageRepository: 172.30.56.218:5000/test/origin-ruby-sample
   tags:
   - items:
      - created: 2016-01-29T13:40:11Z
      dockerImageReference: 172.30.56.218:5000/test/origin-apache-sample
      generation: 1
      image: vklnld908.int.clsa.com/vipin/test
   tag: latest

Trasy i szablony

Trasy

W OpenShift routing jest metodą ujawniania usługi światu zewnętrznemu poprzez tworzenie i konfigurowanie nazwy hosta osiągalnego zewnętrznie. Trasy i punkty końcowe służą do udostępnienia usługi światu zewnętrznemu, z którego użytkownik może korzystać z połączenia nazw (DNS) w celu uzyskania dostępu do określonej aplikacji.

W OpenShift trasy są tworzone przy użyciu routerów wdrożonych przez administratora OpenShift w klastrze. Routery służą do wiązania portów HTTP (80) i https (443) z aplikacjami zewnętrznymi.

Poniżej przedstawiono różne rodzaje protokołów obsługiwanych przez trasy -

  • HTTP
  • HTTPS
  • TSL i gniazdo sieciowe

Podczas konfigurowania usługi selektory służą do konfigurowania usługi i znajdowania punktu końcowego przy użyciu tej usługi. Poniżej znajduje się przykład, w jaki sposób tworzymy usługę i routing dla tej usługi przy użyciu odpowiedniego protokołu.

{
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-Rservice"},
   "spec": {
      "selector": {"name":"RService-openshift"},
      "ports": [
         {
            "protocol": "TCP",
            "port": 8888,
            "targetPort": 8080
         }
      ]
   }
}

Następnie uruchom następujące polecenie, a usługa zostanie utworzona.

$ oc create -f ~/training/content/Openshift-Rservice.json

Tak wygląda usługa po stworzeniu.

$ oc describe service Openshift-Rservice

Name:              Openshift-Rservice
Labels:            <none>
Selector:          name = RService-openshift
Type:              ClusterIP
IP:                172.30.42.80
Port:              <unnamed> 8080/TCP
Endpoints:         <none>
Session Affinity:  None
No events.

Utwórz trasę dla usługi przy użyciu następującego kodu.

{
   "kind": "Route",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-service-route"},
   "spec": {
      "host": "hello-openshift.cloudapps.example.com",
      "to": {
         "kind": "Service",
         "name": "OpenShift-route-service"
      },
      "tls": {"termination": "edge"}
   }
}

Gdy do utworzenia trasy używana jest komenda OC, tworzona jest nowa instancja zasobu trasy.

Szablony

Szablony są zdefiniowane jako standardowy obiekt w OpenShift, którego można używać wielokrotnie. Jest sparametryzowany za pomocą listy symboli zastępczych, które są używane do tworzenia wielu obiektów. Można to wykorzystać do stworzenia wszystkiego, od poda do sieci, do której użytkownicy mają uprawnienia do tworzenia. Listę obiektów można utworzyć, jeśli szablon z interfejsu CLI lub GUI w obrazie zostanie załadowany do katalogu projektu.

apiVersion: v1
kind: Template
metadata:
   name: <Name of template>
   annotations:
      description: <Description of Tag>
      iconClass: "icon-redis"
      tags: <Tages of image>
objects:
   - apiVersion: v1
   kind: Pod
   metadata:
      name: <Object Specification>
spec:
   containers:
      image: <Image Name>
      name: master
      ports:
      - containerPort: <Container port number>
         protocol: <Protocol>
labels:
   redis: <Communication Type>

Uwierzytelnianie i autoryzacja

Poświadczenie

W OpenShift, konfigurując strukturę master i client, master oferuje wbudowaną funkcję serwera OAuth. Serwer OAuth służy do generowania tokenów, które służą do uwierzytelniania w API. Ponieważ OAuth jest domyślną konfiguracją dla mastera, domyślnie używamy dostawcy tożsamości Allow All. Obecni są różni dostawcy tożsamości, których można skonfigurować pod adresem/etc/openshift/master/master-config.yaml.

W OAuth są obecne różne typy dostawców tożsamości.

  • Pozwól wszystkim
  • Zaprzeczać wszystkiemu
  • HTPasswd
  • LDAP
  • Uwierzytelnianie podstawowe

Pozwól wszystkim

apiVersion: v1
   kind: Pod
   metadata:
      name: redis-master
   spec:
      containers:
         image: dockerfile/redis
         name: master
      ports:
      - containerPort: 6379
         protocol: TCP
      oauthConfig:
      identityProviders:
      - name: my_allow_provider
         challenge: true
         login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

Zaprzeczać wszystkiemu

apiVersion: v1
kind: Pod
metadata:
   name: redis-master
spec:
   containers:
      image: dockerfile/redis
   name: master
   ports:
   - containerPort: 6379
      protocol: TCP
   oauthConfig:
   identityProviders:
   - name: my_allow_provider
      challenge: true
      login: true
   provider:
      apiVersion: v1
      kind: DenyAllPasswordIdentityProvider

HTPasswd

Aby używać HTPasswd, musimy najpierw ustawić narzędzia Httpd na maszynie głównej, a następnie skonfigurować je w taki sam sposób, jak to zrobiliśmy dla innych.

identityProviders:
   - name: my_htpasswd_provider
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider

Upoważnienie

Autoryzacja to funkcja mastera OpenShift, która służy do sprawdzania poprawności użytkownika. Oznacza to, że sprawdza użytkownika, który próbuje wykonać akcję, aby zobaczyć, czy użytkownik jest upoważniony do wykonania tej akcji w danym projekcie. Pomaga to administratorowi kontrolować dostęp do projektów.

Zasady autoryzacji są kontrolowane za pomocą -

  • Rules
  • Roles
  • Bindings

Ocena pozwolenia odbywa się za pomocą -

  • Identity
  • Action
  • Bindings

Korzystanie z zasad -

  • Polityka klastra
  • Polityka lokalna

OpenShift składa się z dwóch typów median służących do tworzenia i wdrażania aplikacji za pomocą interfejsu GUI lub CLI. W tym rozdziale będziemy używać CLI do tworzenia nowej aplikacji. Będziemy używać klienta OC do komunikacji ze środowiskiem OpenShift.

Tworzenie nowej aplikacji

W OpenShift istnieją trzy metody tworzenia nowej aplikacji.

  • Z kodu źródłowego
  • Z obrazu
  • Z szablonu

Z kodu źródłowego

Kiedy próbujemy stworzyć aplikację z kodu źródłowego, OpenShift szuka pliku Docker, który powinien znajdować się w repozytorium, który definiuje przepływ budowania aplikacji. Będziemy używać oc new-app do tworzenia aplikacji.

Pierwszą rzeczą, o której należy pamiętać podczas korzystania z repozytorium, jest to, że powinno wskazywać źródło w repozytorium, z którego OpenShift pobierze kod i zbuduje go.

Jeśli repozytorium zostanie sklonowane na komputerze Docker, na którym jest zainstalowany klient OC, a użytkownik znajduje się w tym samym katalogu, można je utworzyć za pomocą następującego polecenia.

$ oc new-app . <Hear. Denotes current working directory>

Poniżej znajduje się przykład próby zbudowania ze zdalnego repozytorium dla określonej gałęzi.

$ oc new-app https://github.com/openshift/Testing-deployment.git#test1

Tutaj test1 to gałąź, z której próbujemy utworzyć nową aplikację w OpenShift.

Określając plik Docker w repozytorium, musimy zdefiniować strategię kompilacji, jak pokazano poniżej.

$ oc new-app OpenShift/OpenShift-test~https://github.com/openshift/Testingdeployment.git

Z obrazu

Podczas tworzenia aplikacji przy użyciu obrazów obrazy są obecne na lokalnym serwerze Docker, w wewnętrznym hostowanym repozytorium platformy Docker lub w centrum Docker. Jedyną rzeczą, którą użytkownik musi się upewnić, jest to, że ma dostęp do pobierania obrazów z centrum bez żadnych problemów.

OpenShift ma możliwość określenia używanego źródła, czy jest to obraz Docker, czy strumień źródłowy. Jeśli jednak użytkownik sobie tego życzy, może wyraźnie określić, czy jest to strumień obrazu, czy obraz Dockera.

$ oc new-app - - docker-image tomcat

Korzystanie ze strumienia obrazów -

$ oc new-app tomcat:v1

Z szablonu

Szablony mogą służyć do tworzenia nowej aplikacji. Może to być już istniejący szablon lub tworzenie nowego szablonu.

Poniższy plik yaml jest w zasadzie szablonem, którego można użyć do wdrożenia.

apiVersion: v1
kind: Template
metadata:
   name: <Name of template>
   annotations:
      description: <Description of Tag>
      iconClass: "icon-redis"
      tags: <Tages of image>
objects:
   - apiVersion: v1
   kind: Pod
   metadata:
      name: <Object Specification>
spec:
   containers:
      image: <Image Name>
      name: master
      ports:
      - containerPort: <Container port number>
         protocol: <Protocol>
labels:
   redis: <Communication Type>

Opracuj i wdróż aplikację internetową

Tworzenie nowej aplikacji w OpenShift

Aby stworzyć nową aplikację w OpenShift, musimy napisać nowy kod aplikacji i zbudować go za pomocą poleceń kompilacji OpenShift OC. Jak już wspomniano, mamy wiele sposobów tworzenia nowego obrazu. Tutaj będziemy używać szablonu do budowy aplikacji. Ten szablon utworzy nową aplikację, gdy zostanie uruchomiony z poleceniem oc new-app.

Zostanie utworzony następujący szablon - Dwie aplikacje front-end i jedna baza danych. Wraz z tym utworzy dwie nowe usługi i te aplikacje zostaną wdrożone w klastrze OpenShift. Budując i wdrażając aplikację, na początku musimy utworzyć przestrzeń nazw w OpenShift i wdrożyć aplikację w tej przestrzeni nazw.

Create a new namespace

$ oc new-project openshift-test --display-name = "OpenShift 3 Sample" --
description = "This is an example project to demonstrate OpenShift v3"

Szablon

{
   "kind": "Template",
   "apiVersion": "v1",
   "metadata": {
      "name": "openshift-helloworld-sample",
      "creationTimestamp": null,
         "annotations": {
         "description": "This example shows how to create a simple openshift
         application in openshift origin v3",
         "iconClass": "icon-openshift",
         "tags": "instant-app,openshift,mysql"
      }
   }
},

Definicje obiektów

Secret definition in a template

"objects": [
{
   "kind": "Secret",
   "apiVersion": "v1",
   "metadata": {"name": "dbsecret"},
   "stringData" : {
      "mysql-user" : "${MYSQL_USER}",
      "mysql-password" : "${MYSQL_PASSWORD}"
   }
},

Service definition in a template

{
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {
      "name": "frontend",
      "creationTimestamp": null
   },
   "spec": {
      "ports": [
         {
            "name": "web",
            "protocol": "TCP",
            "port": 5432,
            "targetPort": 8080,
            "nodePort": 0
         }
      ],
      "selector": {"name": "frontend"},
      "type": "ClusterIP",
      "sessionAffinity": "None"
   },
   "status": {
      "loadBalancer": {}
   }
},

Route definition in a template

{
   "kind": "Route",
   "apiVersion": "v1",
   "metadata": {
      "name": "route-edge",
      "creationTimestamp": null,
      "annotations": {
         "template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
      }
   },
   "spec": {
      "host": "www.example.com",
      "to": {
         "kind": "Service",
         "name": "frontend"
      },
      "tls": {
         "termination": "edge"
      }
   },
   "status": {}
},
{ 
   "kind": "ImageStream",
   "apiVersion": "v1",
   "metadata": {
      "name": "origin-openshift-sample",
      "creationTimestamp": null
   },
   "spec": {},
   "status": {
      "dockerImageRepository": ""
   }
},
{ 
   "kind": "ImageStream",
   "apiVersion": "v1",
   "metadata": {
      "name": "openshift-22-ubuntu7",
      "creationTimestamp": null 
   },
   "spec": {
      "dockerImageRepository": "ubuntu/openshift-22-ubuntu7"
   },
   "status": {
      "dockerImageRepository": ""
   }
},

Build config definition in a template

{
   "kind": "BuildConfig",
   "apiVersion": "v1",
   "metadata": {
      "name": "openshift-sample-build",
      "creationTimestamp": null,
      "labels": {name": "openshift-sample-build"}
   },
   "spec": {
      "triggers": [
         { "type": "GitHub",
            "github": {
            "secret": "secret101" } 
         },
         {
            "type": "Generic",
            "generic": {
               "secret": "secret101",
               "allowEnv": true } 
         },
         { 
            "type": "ImageChange",
            "imageChange": {} 
         },
         { "type": "ConfigChange”}
      ],
      "source": {
         "type": "Git",
         "git": {
            "uri": https://github.com/openshift/openshift-hello-world.git } 
      },
      "strategy": {
         "type": "Docker",
         "dockerStrategy": {
            "from": {
               "kind": "ImageStreamTag",
               "name": "openshift-22-ubuntu7:latest” 
            },
            "env": [
               {
                  "name": "EXAMPLE",
                  "value": "sample-app"
               } 
            ]
         }
      },
      "output": {
         "to": {
            "kind": "ImageStreamTag",
            "name": "origin-openshift-sample:latest"
         }
      },
      "postCommit": {
         "args": ["bundle", "exec", "rake", "test"]
      },
      "status": {
         "lastVersion": 0
      }
   }
},

Deployment config in a template

"status": {
   "lastVersion": 0
}
{
   "kind": "DeploymentConfig",
   "apiVersion": "v1",
   "metadata": {
      "name": "frontend",
      "creationTimestamp": null
   }
}, 
"spec": {
   "strategy": {
      "type": "Rolling",
      "rollingParams": {
         "updatePeriodSeconds": 1,
         "intervalSeconds": 1,
         "timeoutSeconds": 120,
         "pre": {
            "failurePolicy": "Abort",
            "execNewPod": {
               "command": [
                  "/bin/true"
               ],
               "env": [
                  { 
                     "name": "CUSTOM_VAR1",
                     "value": "custom_value1"
                  }
               ]
            }
         }
      }
   }
}
"triggers": [
   {
      "type": "ImageChange",
      "imageChangeParams": {
         "automatic": true,
         "containerNames": [
            "openshift-helloworld"
         ],
         "from": {
            "kind": "ImageStreamTag",
            "name": "origin-openshift-sample:latest"
         }
      }
   },
   {
      "type": "ConfigChange"
   }
],
"replicas": 2,
"selector": {
   "name": "frontend"
},
"template": {
   "metadata": {
      "creationTimestamp": null,
      "labels": {
         "name": "frontend"
      }
   },
   "spec": {
      "containers": [
         {
            "name": "openshift-helloworld",
            "image": "origin-openshift-sample",
            "ports": [
               { 
                  "containerPort": 8080,
                  "protocol": "TCP” 
               }
            ],
            "env": [
               {
                  "name": "MYSQL_USER",
                  "valueFrom": {
                     "secretKeyRef" : {
                        "name" : "dbsecret",
                        "key" : "mysql-user"
                     }
                  }
               },
               {
                  "name": "MYSQL_PASSWORD",
                  "valueFrom": {
                     "secretKeyRef" : {
                        "name" : "dbsecret",
                        "key" : "mysql-password"
                     }
                  }
               },
               {
                  "name": "MYSQL_DATABASE",
                  "value": "${MYSQL_DATABASE}"
               }
            ],
            "resources": {},
            "terminationMessagePath": "/dev/termination-log",
            "imagePullPolicy": "IfNotPresent",
            "securityContext": {
               "capabilities": {},
               "privileged": false
            }
         }
      ],
      "restartPolicy": "Always",
      "dnsPolicy": "ClusterFirst"
   },
   "status": {}
},

Service definition in a template

{
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {
      "name": "database",
      "creationTimestamp": null 
   },
   "spec": {
   "ports": [
      {
         "name": "db",
         "protocol": "TCP",
         "port": 5434,
         "targetPort": 3306,
         "nodePort": 0
      } 
   ],
   "selector": {
      "name": "database 
   },
   "type": "ClusterIP",
   "sessionAffinity": "None" },
   "status": {
      "loadBalancer": {}
   }
},

Deployment config definition in a template

{
   "kind": "DeploymentConfig",
   "apiVersion": "v1",
   "metadata": {
      "name": "database",
      "creationTimestamp": null
   },
   "spec": {
      "strategy": {
         "type": "Recreate",
         "resources": {}
      },
      "triggers": [
         {
            "type": "ConfigChange"
         }
      ],
      "replicas": 1,
      "selector": {"name": "database"},
      "template": {
         "metadata": {
            "creationTimestamp": null,
            "labels": {"name": "database"}
         },
         "template": {
            "metadata": {
               "creationTimestamp": null,
               "labels": {
                  "name": "database"
               } 
            },
            "spec": {
               "containers": [
                  {
                     "name": "openshift-helloworld-database",
                     "image": "ubuntu/mysql-57-ubuntu7:latest",
                     "ports": [
                        {
                           "containerPort": 3306,
                           "protocol": "TCP" 
                        }
                     ],
                     "env": [
                        {
                           "name": "MYSQL_USER",
                           "valueFrom": {
                              "secretKeyRef" : {
                                 "name" : "dbsecret",
                                 "key" : "mysql-user"
                              }
                           }
                        },
                        {
                           "name": "MYSQL_PASSWORD",
                           "valueFrom": {
                              "secretKeyRef" : {
                                 "name" : "dbsecret",
                                 "key" : "mysql-password"
                              }
                           }
                        },
                        {
                           "name": "MYSQL_DATABASE",
                           "value": "${MYSQL_DATABASE}" 
                        } 
                     ],
                     "resources": {},
                     "volumeMounts": [
                        {
                           "name": "openshift-helloworld-data",
                           "mountPath": "/var/lib/mysql/data"
                        }
                     ],
                     "terminationMessagePath": "/dev/termination-log",
                     "imagePullPolicy": "Always",
                     "securityContext": {
                        "capabilities": {},
                        "privileged": false
                     } 
                  }
               ],
               "volumes": [
                  { 
                     "name": "openshift-helloworld-data",
                     "emptyDir": {"medium": ""} 
                  } 
               ],
               "restartPolicy": "Always",
               "dnsPolicy": "ClusterFirst” 
            } 
         }
      },
      "status": {} 
   },
   "parameters": [
      { 
         "name": "MYSQL_USER",
         "description": "database username",
         "generate": "expression",
         "from": "user[A-Z0-9]{3}",
         "required": true 
      },
      {
         "name": "MYSQL_PASSWORD",
         "description": "database password",
         "generate": "expression",
         "from": "[a-zA-Z0-9]{8}",
         "required": true
      }, 
      {
         "name": "MYSQL_DATABASE",
         "description": "database name",
         "value": "root",
         "required": true 
      } 
   ],
   "labels": {
      "template": "application-template-dockerbuild" 
   } 
}

Powyższy plik szablonu należy natychmiast skompilować. Musimy najpierw skopiować całą zawartość do jednego pliku i nazwać go jako plik yaml po zakończeniu.

Aby utworzyć aplikację, musimy uruchomić następujące polecenie.

$ oc new-app application-template-stibuild.json
--> Deploying template openshift-helloworld-sample for "application-template-stibuild.json"

   openshift-helloworld-sample
   ---------
   This example shows how to create a simple ruby application in openshift origin v3
   * With parameters:
      * MYSQL_USER = userPJJ # generated
      * MYSQL_PASSWORD = cJHNK3se # generated
      * MYSQL_DATABASE = root

--> Creating resources with label app = ruby-helloworld-sample ...
   service "frontend" created
   route "route-edge" created
   imagestream "origin-ruby-sample" created
   imagestream "ruby-22-centos7" created
   buildconfig "ruby-sample-build" created
   deploymentconfig "frontend" created
   service "database" created
   deploymentconfig "database" created
   
--> Success
   Build scheduled, use 'oc logs -f bc/ruby-sample-build' to track its progress.
   Run 'oc status' to view your app.

Jeśli chcemy monitorować kompilację, można to zrobić za pomocą -

$ oc get builds

NAME                        TYPE      FROM          STATUS     STARTED         DURATION
openshift-sample-build-1    Source   Git@bd94cbb    Running    7 seconds ago   7s

Możemy sprawdzić wdrożone aplikacje w OpenShift za pomocą -

$ oc get pods
NAME                            READY   STATUS      RESTARTS   AGE
database-1-le4wx                1/1     Running     0          1m
frontend-1-e572n                1/1     Running     0          27s
frontend-1-votq4                1/1     Running     0          31s
opeshift-sample-build-1-build   0/1     Completed   0          1m

Możemy sprawdzić, czy usługi aplikacji są tworzone zgodnie z definicją usługi za pomocą

$ oc get services
NAME        CLUSTER-IP      EXTERNAL-IP     PORT(S)      SELECTOR          AGE
database    172.30.80.39    <none>         5434/TCP     name=database      1m
frontend    172.30.17.4     <none>         5432/TCP     name=frontend      1m

W OpenShift mamy wiele metod automatyzacji potoku kompilacji. Aby to zrobić, musimy utworzyć zasób BuildConfig, aby opisać przepływ kompilacji. Przepływ w BuildConfig można porównać z definicją zadania w definicji zadania Jenkins. Tworząc przepływ kompilacji, musimy wybrać strategię kompilacji.

Plik BuildConfig

W OpenShift BuildConfig jest obiektem odpoczynku używanym do łączenia się z API, a następnie tworzenia nowej instancji.

kind: "BuildConfig"
apiVersion: "v1"
metadata:
   name: "<Name of build config file>"
spec:
   runPolicy: "Serial"
   triggers:
   -
      type: "GitHub"
      github:
         secret: "<Secrete file name>"
   - type: "Generic"
   generic:
      secret: "secret101"
   -
   type: "ImageChange"
   source:
      type: "<Source of code>"
      git:
   uri: "https://github.com/openshift/openshift-hello-world"
   dockerfile: "FROM openshift/openshift-22-centos7\nUSER example"
   strategy:
      type: "Source"
      
sourceStrategy:
   from:
      kind: "ImageStreamTag"
      name: "openshift-20-centos7:latest"
   output:
      to:
         kind: "ImageStreamTag"
         name: "origin-openshift-sample:latest"
   postCommit:
      script: "bundle exec rake test"

W OpenShift istnieją cztery typy strategii kompilacji.

  • Strategia od źródła do obrazu
  • Strategia Dockera
  • Strategia niestandardowa
  • Strategia rurociągów

Strategia od źródła do obrazu

Umożliwia tworzenie obrazów kontenerów zaczynając od kodu źródłowego. W tym przepływie rzeczywisty kod jest najpierw pobierany w kontenerze, a następnie kompilowany w nim. Skompilowany kod jest wdrażany w tym samym kontenerze, a obraz jest budowany na podstawie tego kodu.

strategy:
   type: "Source"
   sourceStrategy:
      from:
         kind: "ImageStreamTag"
         name: "builder-image:latest"
      forcePull: true

Istnieje wiele zasad strategii.

  • Forcepull
  • Kompilacje przyrostowe
  • Kompilacje zewnętrzne

Strategia Dockera

W tym przepływie OpenShift używa Dockerfile do kompilowania obrazu, a następnie przekazuje utworzone obrazy do rejestru Docker.

strategy:
   type: Docker
   dockerStrategy:
      from:
         kind: "ImageStreamTag"
         name: "ubuntu:latest"

Opcja pliku platformy Docker może być używana w wielu lokalizacjach, zaczynając od ścieżki pliku, bez pamięci podręcznej i wymuszonego ściągania.

  • Z obrazu
  • Ścieżka pliku Dockerfile
  • Brak pamięci podręcznej
  • Siła przyciągania

Strategia niestandardowa

Jest to jeden z różnych rodzajów strategii kompilacji, w których nie ma takiego przymusu, aby wynikiem kompilacji był obraz. Można to porównać do wolnej pracy Jenkinsa. Dzięki temu możemy tworzyć pakiety Jar, rpm i inne.

strategy:
   type: "Custom"
   customStrategy:
      from:
         kind: "DockerImage"
         name: "openshift/sti-image-builder"

Składa się z wielu strategii kompilacji.

  • Ujawnij gniazdo Dockera
  • Secrets
  • Siła przyciągania

Strategia rurociągów

Strategia potoków służy do tworzenia niestandardowych potoków kompilacji. Jest to zasadniczo używane do implementacji przepływu pracy w potoku. Ten przepływ kompilacji używa niestandardowego przepływu potoku kompilacji przy użyciu języka Groovy DSL. OpenShift utworzy zadanie potoku w Jenkins i wykona je. Ten przepływ potoku może być również używany w Jenkins. W tej strategii używamy Jenkinsfile i dodajemy go do definicji buildconfig.

Strategy:
   type: "JenkinsPipeline"
   jenkinsPipelineStrategy:
   jenkinsfile: "node('agent') {\nstage 'build'\nopenshiftBuild(buildConfig: 'OpenShift-build', showBuildLogs: 'true')\nstage 'deploy'\nopenshiftDeploy(deploymentConfig: 'backend')\n}"

Using build pipeline

kind: "BuildConfig"
apiVersion: "v1"
metadata:
   name: "test-pipeline"
spec:
   source:
      type: "Git"
      git:
         uri: "https://github.com/openshift/openshift-hello-world"
   strategy:
      type: "JenkinsPipeline"
      jenkinsPipelineStrategy:
         jenkinsfilePath: <file path repository>

OpenShift CLI służy do zarządzania aplikacjami OpenShift z wiersza poleceń. OpenShift CLI umożliwia zarządzanie pełnym cyklem życia aplikacji. Ogólnie rzecz biorąc, używalibyśmy OC, które jest klientem OpenShift do komunikacji z OpenShift.

Konfiguracja OpenShift CLI

Aby skonfigurować klienta OC w innym systemie operacyjnym, musimy przejść przez inną sekwencję kroków.

Klient OC dla Windows

Step 1 - Pobierz oc cli z poniższego linku https://github.com/openshift/origin/releases/tag/v3.6.0-alpha.2

Step 2 - Rozpakuj pakiet w docelowej ścieżce na komputerze.

Step 3 - Edytuj zmienną środowiskową ścieżki systemu.

C:\Users\xxxxxxxx\xxxxxxxx>echo %PATH%

C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\Program Files 
(x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files 
(x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;

C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\
v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files 
(x86)\ATI Technologies\ATI.ACE\C

ore-Static;C:\Program Files\Intel\Intel(R) Management Engine 
Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine 
Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;

Step 4 - Sprawdź poprawność konfiguracji OC w systemie Windows.

C:\openshift-origin-client-tools-v3.6.0-alpha.2-3c221d5-windows>oc version
oc v3.6.0-alpha.2+3c221d5
kubernetes v1.6.1+5115d708d7
features: Basic-Auth

Klient OC dla Mac OS X

Możemy pobrać pliki binarne instalacji Mac OS dla tej samej lokalizacji, co dla Windows, a później rozpakować je w lokalizacji i ustawić ścieżkę do pliku wykonywalnego w zmiennej środowiskowej PATH.

Alternatively

Możemy użyć Home brew i ustawić go za pomocą następującego polecenia.

$ brew install openshift-cli

Klient OC dla systemu Linux

Na tej samej stronie mamy plik tar do instalacji systemu Linux, którego można użyć do instalacji. Później można ustawić zmienną ścieżki wskazującą na tę konkretną lokalizację pliku wykonywalnego.

https://github.com/openshift/origin/releases/tag/v3.6.0-alpha.2

Rozpakuj plik tar, używając następującego polecenia.

$ tar –xf < path to the OC setup tar file >

Uruchom następujące polecenie, aby sprawdzić uwierzytelnianie.

C:\openshift-origin-client-tools-v3.6.0-alpha.2-3c221d5-windows>oc login
Server [https://localhost:8443]:

Pliki konfiguracyjne CLI

Plik konfiguracyjny OC CLI służy do zarządzania wieloma połączeniami z serwerami OpenShift i mechanizmem uwierzytelniania. Ten plik konfiguracyjny jest również używany do przechowywania wielu profili i zarządzania nimi oraz do przełączania się między nimi. Normalny plik konfiguracyjny wygląda następująco.

$ oc config view
apiVersion: v1
clusters:
   - cluster:
      server: https://vklnld908.int.example.com
   name: openshift
   
contexts:
- context:
   cluster: openshift
   namespace: testproject
   user: alice
   name: alice
current-context: alice
kind: Config
preferences: {}
users:
- name: vipin
   user:
      token: ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232

Konfigurowanie klienta CLI

Do ustawiania poświadczeń użytkownika

$ oc config set-credentials <user_nickname>
[--client-certificate = <path/to/certfile>] [--client-key=<path/to/keyfile>]
[--token = <bearer_token>] [--username = <basic_user>] [--password = <basic_password>]

Do ustawiania klastra

$ oc config set-cluster <cluster_nickname> [--server = <master_ip_or_fqdn>]
[--certificate-authority = <path/to/certificate/authority>]
[--api-version = <apiversion>] [--insecure-skip-tls-verify = true]

Przykład

$ oc config set-credentials vipin --token = ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232

Do ustawienia kontekstu

$ oc config set-context <context_nickname> [--cluster = <cluster_nickname>]
[--user = <user_nickname>] [--namespace = <namespace>]

Profile CLI

W jednym pliku konfiguracyjnym CLI możemy mieć wiele profili, przy czym każdy profil ma inną konfigurację serwera OpenShift, której później można użyć do przełączania między różnymi profilami CLI.

apiVersion: v1
clusters: --→ 1
- cluster:
   insecure-skip-tls-verify: true
   server: https://vklnld908.int.example.com:8443
   name: vklnld908.int.example.com:8443
- cluster:
   insecure-skip-tls-verify: true
   server: https://vklnld1446.int.example.com:8443
   name: vklnld1446.int.example.com:8443
contexts: ---→ 2
- context:
   cluster: vklnld908.int.example.com:8443
   namespace: openshift-project
   user: vipin/vklnld908.int.example.com:8443
   name: openshift-project/vklnld908.int.example.com:8443/vipin
- context:
   cluster: vklnld908.int.example.com:8443
   namespace: testing-project
   user: alim/vklnld908.int.example.com:8443
   name: testproject-project/openshift1/alim
current-context: testing-project/vklnld908.int.example.com:8443/vipin - 3
kind: Config
preferences: {}

users:
- name: vipin/vklnld908.int.example.com:8443
user: ---→ 4
   token: ZCJKML2365jhdfafsdj797GkjgjGKJKJGjkg232

W powyższej konfiguracji widzimy, że jest on podzielony na cztery główne sekcje, zaczynając od klastra, który definiuje dwie instancje maszyn głównych OpenShift. Druga sekcja kontekstu definiuje dwa konteksty zwane vipin i alim. Bieżący kontekst określa, który kontekst jest aktualnie używany. Można go zmienić na inny kontekst lub profil, jeśli zmienimy tutaj definicję. Na koniec definiujemy definicję użytkownika i jego token uwierzytelniający, którym w naszym przypadku jest vipin.

Jeśli chcemy sprawdzić aktualnie używany profil, można to zrobić za pomocą -

$ oc status oc status In project testing Project (testing-project) $ oc project
Using project "testing-project" from context named "testing-
project/vklnld908.int.example.com:8443/vipin" on server "https://vklnld908.int.example.com:8443".

Jeśli chcemy przełączyć się na inny CLI, można to zrobić z wiersza poleceń za pomocą następującego polecenia.

$ oc project openshift-project
Now using project "Openshift-project" on server "
https://vklnld908.int.example.com:8443".

Za pomocą powyższego polecenia możemy przełączać się między profilami. W dowolnym momencie, jeśli chcemy zobaczyć konfigurację, możemy użyć polecenia $ oc config view.

OpenShift CLI jest w stanie wykonywać wszystkie podstawowe i zaawansowane konfiguracje, zarządzanie, dodawanie i wdrażanie aplikacji.

Za pomocą poleceń OC możemy wykonywać różnego rodzaju operacje. Ten klient pomaga w projektowaniu, tworzeniu, wdrażaniu i uruchamianiu aplikacji na dowolnej platformie zgodnej z OpenShift lub Kubernetes. Zawiera również polecenia administracyjne służące do zarządzania klastrem za pomocą podkomendy „adm”.

Podstawowe polecenia

Poniższa tabela zawiera podstawowe polecenia OC.

Sr.No. Polecenia i opis
1

Types

Wprowadzenie do pojęć i typów

2

Login

Zaloguj się do serwera

3

new-project

Poproś o nowy projekt

4

new-app

Stwórz nową aplikację

5

Status

Pokaż przegląd bieżącego projektu

6

Project

Przejdź do innego projektu

7

Projects

Wyświetl istniejące projekty

8

Explain

Dokumentacja zasobów

9

Cluster

Uruchamianie i zatrzymywanie klastra OpenShift

Zaloguj sie

Zaloguj się do swojego serwera i zapisz login do późniejszego wykorzystania. Użytkownicy klienta po raz pierwszy powinni uruchomić to polecenie, aby połączyć się z serwerem, ustanowić uwierzytelnioną sesję i zapisać połączenie w pliku konfiguracyjnym. Domyślna konfiguracja zostanie zapisana w Twoim katalogu domowym w „.kube / config”.

Informacje wymagane do zalogowania, takie jak nazwa użytkownika i hasło, token sesji lub dane serwera, można podać za pomocą flag. Jeśli nie zostanie podany, polecenie wyświetli monit o wprowadzenie danych przez użytkownika w razie potrzeby.

Usage

oc login [URL] [options]

Example

# Log in interactively
oc login

# Log in to the given server with the given certificate authority file
oc login localhost:8443 --certificate-authority = /path/to/cert.crt

# Log in to the given server with the given credentials (will not prompt interactively)
oc login localhost:8443 --username = myuser --password=mypass

Opcje -

-p, --password = " - Hasło, pojawi się monit, jeśli nie zostanie podane

-u, --username = " - Nazwa użytkownika, jeśli nie zostanie podana, wyświetli się monit

--certificate-authority = "- Ścieżka do cert. plik dla urzędu certyfikacji

--insecure-skip-tls-verify = false- Jeśli prawda, certyfikat serwera nie będzie sprawdzany pod kątem ważności. Spowoduje to, że połączenia HTTPS będą niezabezpieczone

--token = " - Token okaziciela do uwierzytelniania na serwerze API

Aby uzyskać pełne szczegóły dotyczące dowolnego polecenia, użyj pliku oc <Command Name> --help Komenda.

Twórz i wdrażaj polecenia

Poniższa tabela zawiera listę poleceń kompilacji i wdrażania.

Sr.No. Polecenia i opis
1

Rollout

Zarządzaj wdrożeniem Kubernetes lub OpenShift

2

Deploy

Wyświetl, uruchom, anuluj lub ponów próbę wdrożenia

3

Rollback

Przywróć część aplikacji do poprzedniego stanu

4

new-build

Utwórz nową konfigurację kompilacji

5

start-build

Rozpocznij nową kompilację

6

cancel-build

Anuluj aktywne, oczekujące lub nowe kompilacje

7

import-image

Importuje obrazy z rejestru platformy Docker

8

Tag

Oznacz istniejące obrazy jako strumienie obrazów

Polecenia zarządzania aplikacjami

Poniższa tabela zawiera listę poleceń zarządzania aplikacjami.

Sr.No. Polecenia i opis
1

Get

Wyświetl jeden lub wiele zasobów

2

Describe

Pokaż szczegóły określonego zasobu lub grupy zasobów

3

Edit

Edytuj zasób na serwerze

4

Set

Polecenia pomagające ustawić określone funkcje na obiektach

5

Label

Zaktualizuj etykiety zasobu

6

Annotate

Zaktualizuj adnotacje w zasobie

7

Expose

Przedstaw replikowaną aplikację jako usługę lub trasę

8

Delete

Usuń jeden lub więcej zasobów

9

Scale

Zmień liczbę zasobników we wdrożeniu

10

Autoscale

Automatyczne skalowanie konfiguracji wdrożenia, wdrożenia, replikacji, kontrolera lub zestawu replik

11

Secrets

Zarządzaj sekretami

12

Serviceaccounts

Zarządzaj kontami usług w swoim projekcie

Rozwiązywanie problemów i polecenia debugowania

Poniższa tabela zawiera listę poleceń dotyczących rozwiązywania problemów i debugowania.

Sr.No. Polecenia i opis
1

logs

Wydrukuj dzienniki zasobu

2

Rsh

Rozpocznij sesję powłoki w kapsule

3

Rsync

Kopiuj pliki między lokalnym systemem plików a pod

4

port-forward

Przekaż jeden lub więcej portów lokalnych do poda

5

Debug

Uruchom nową instancję poda do debugowania

6

Exec

Wykonaj polecenie w kontenerze

7

Procy

Uruchom serwer proxy na serwerze Kubernetes API

9

Attach

Dołącz do działającego kontenera

10

Run

Uruchom określony obraz w klastrze

11

Cp

Kopiuj pliki i katalogi do iz kontenerów

Zaawansowane polecenia

Poniższa tabela zawiera listę zaawansowanych poleceń.

Sr.No. Polecenia i opis
1

adm

Narzędzia do zarządzania klastrem

2

create

Utwórz zasób według nazwy pliku lub standardowego wejścia

3

replace

Zastąp zasób nazwą pliku lub standardowym wejściem

4

apply

Zastosuj konfigurację do zasobu za pomocą nazwy pliku lub standardowego wejścia

5

patch

Zaktualizuj pole (a) zasobu za pomocą strategicznej poprawki scalającej

6

process

Przetwórz szablon na listę zasobów

7

export

Eksportuj zasoby, aby można je było wykorzystać w innym miejscu

8

extract

Wyodrębnij wpisy tajne lub mapy konfiguracji na dysk

9

idle

Bezczynne skalowalne zasoby

10

observe

Obserwuj zmiany w zasobach i reaguj na nie (eksperymentalnie)

11

policy

Zarządzaj polityką autoryzacji

12

auth

Sprawdź autoryzację

13

convert

Konwertuj pliki konfiguracyjne między różnymi wersjami interfejsu API

14

import

Polecenia importujące aplikacje

Polecenia ustawień

Poniższa tabela zawiera listę poleceń ustawień.

Sr.No. Polecenia i opis
1

Logout

Zakończ bieżącą sesję serwera

2

Config

Zmień pliki konfiguracyjne klienta

3

Whoami

Zwróć informacje o bieżącej sesji

4

Completion

Kod zakończenia powłoki wyjściowej dla określonej powłoki (bash lub zsh)

OpenShift wykorzystuje dwie metody instalacji do konfigurowania klastra OpenShift.

  • Szybka metoda instalacji
  • Zaawansowana metoda konfiguracji

Konfigurowanie klastra

Szybka metoda instalacji

Ta metoda służy do uruchamiania szybkiej konfiguracji konfiguracji nieosiągniętej klastra. Aby skorzystać z tej metody, musimy najpierw zainstalować instalator. Można to zrobić, uruchamiając następujące polecenie.

Interactive method

$ atomic-openshift-installer install

Jest to przydatne, gdy chce się uruchomić instalację interaktywną.

Unattended installation method

Ta metoda jest używana, gdy chce się ustawić nienadzorowany sposób instalacji, w którym użytkownik może zdefiniować plik konfiguracyjny yaml i umieścić go pod ~/.config/openshift/o nazwie installer.cfg.yml. Następnie można uruchomić następujące polecenie, aby zainstalować–u tag.

$ atomic-openshift-installer –u install

Domyślnie używa pliku konfiguracyjnego znajdującego się w ~/.config/openshift/. Z drugiej strony Ansible służy jako kopia zapasowa instalacji.

version: v2
variant: openshift-enterprise
variant_version: 3.1
ansible_log_path: /tmp/ansible.log

deployment:
   ansible_ssh_user: root
   hosts:
   - ip: 172.10.10.1
   hostname: vklnld908.int.example.com
   public_ip: 24.222.0.1
   public_hostname: master.example.com
   roles:
      - master
      - node
   containerized: true
   connect_to: 24.222.0.1
   
   - ip: 172.10.10.2
   hostname: vklnld1446.int.example.com
   public_ip: 24.222.0.2
   public_hostname: node1.example.com
   roles:
      - node
   connect_to: 10.0.0.2
   
   - ip: 172.10.10.3
   hostname: vklnld1447.int.example.com
   public_ip: 10..22.2.3
   public_hostname: node2.example.com
   roles:
      - node
   connect_to: 10.0.0.3

roles:
   master:
      <variable_name1>: "<value1>"
      <variable_name2>: "<value2>"
   node:
      <variable_name1>: "<value1>"

Tutaj mamy zmienną specyficzną dla roli, którą można zdefiniować, jeśli chce się ustawić określoną zmienną.

Po zakończeniu możemy zweryfikować instalację za pomocą następującego polecenia.

$ oc get nodes
NAME                    STATUS    AGE
master.example.com      Ready     10d
node1.example.com       Ready     10d
node2.example.com       Ready     10d

Zaawansowana instalacja

Zaawansowana instalacja jest całkowicie oparta na konfiguracji Ansible, w której dostępna jest pełna konfiguracja hosta i definicja zmiennych dotyczących konfiguracji mastera i węzła. Zawiera wszystkie szczegóły dotyczące konfiguracji.

Gdy mamy już konfigurację, a playbook jest gotowy, możemy po prostu uruchomić następujące polecenie, aby skonfigurować klaster.

$ ansible-playbook -i inventry/hosts ~/openshift-ansible/playbooks/byo/config.yml

Dodawanie hostów do klastra

Możemy dodać hosta do klastra za pomocą -

  • Narzędzie szybkiego instalatora
  • Zaawansowana metoda konfiguracji

Quick installation tooldziała zarówno w trybie interaktywnym, jak i nieinteraktywnym. Użyj następującego polecenia.

$ atomic-openshift-installer -u -c </path/to/file> scaleup

Format skalowania wyglądu pliku konfiguracyjnego aplikacji można wykorzystać do dodania zarówno głównego, jak i węzła.

Zaawansowana metoda konfiguracji

W tej metodzie aktualizujemy plik hosta Ansible, a następnie dodajemy nowe szczegóły węzła lub serwera w tym pliku. Plik konfiguracyjny wygląda następująco.

[OSEv3:children]
masters
nodes
new_nodes
new_master

W tym samym pliku hostów Ansible dodaj szczegóły zmiennej dotyczące nowego węzła, jak pokazano poniżej.

[new_nodes]
vklnld1448.int.example.com openshift_node_labels = "{'region': 'primary', 'zone': 'east'}"

Na koniec, używając zaktualizowanego pliku hosta, uruchom nową konfigurację i wywołaj plik konfiguracyjny, aby przeprowadzić konfigurację, używając następującego polecenia.

$ ansible-playbook -i /inventory/hosts /usr/share/ansible/openshift-ansible/playbooks/test/openshift-node/scaleup.yml

Zarządzanie dziennikami klastra

Dziennik klastra OpenShift to nic innego jak dzienniki, które są generowane z maszyn głównych i węzłów klastra. Mogą one zarządzać dowolnym rodzajem dziennika, począwszy od dziennika serwera, dziennika głównego, dziennika kontenera, dziennika podowego itp. Istnieje wiele technologii i aplikacji do zarządzania dziennikami kontenerów.

Niewiele z narzędzi jest wymienionych na liście, które można zaimplementować do zarządzania dziennikami.

  • Fluentd
  • ELK
  • Kabna
  • Nagios
  • Splunk

ELK stack- Ten stos jest przydatny podczas próby zebrania dzienników ze wszystkich węzłów i przedstawienia ich w usystematyzowanym formacie. Stos ELK jest podzielony głównie na trzy główne kategorie.

ElasticSearch - Odpowiedzialny głównie za zbieranie informacji ze wszystkich pojemników i umieszczanie ich w centralnej lokalizacji.

Fluentd - Służy do podawania zebranych kłód do silnika kontenera Flexiblesearch.

Kibana - Graficzny interfejs służący do prezentacji zebranych danych jako przydatnych informacji w interfejsie graficznym.

Jednym z kluczowych punktów, na które należy zwrócić uwagę, jest to, że po wdrożeniu tego systemu w klastrze rozpoczyna on zbieranie dzienników ze wszystkich węzłów.

Diagnostyka dziennika

OpenShift ma wbudowany oc adm dignosticspolecenie z OC, które może być użyte do analizy wielu sytuacji błędów. To narzędzie może być używane z poziomu głównego jako administrator klastra. To narzędzie jest bardzo pomocne w rozwiązywaniu problemów i eliminowaniu znanych problemów. Działa na głównym kliencie i węzłach.

Jeśli zostanie uruchomiony bez żadnych agrumentów lub flag, będzie szukał plików konfiguracyjnych klienta, serwera i węzłów i używał ich do diagnostyki. Diagnostykę można uruchomić indywidualnie, podając następujące argumenty -

  • AggregatedLogging
  • AnalyzeLogs
  • ClusterRegistry
  • ClusterRoleBindings
  • ClusterRoles
  • ClusterRouter
  • ConfigContexts
  • DiagnosticPod
  • MasterConfigCheck
  • MasterNode
  • MetricsApiProxy
  • NetworkCheck
  • NodeConfigCheck
  • NodeDefinitions
  • ServiceExternalIPs
  • UnitStatus

Można je po prostu uruchomić za pomocą następującego polecenia.

$ oc adm diagnostics <DiagnosticName>

Aktualizacja klastra

Aktualizacja klastra obejmuje aktualizację wielu rzeczy w klastrze i pobranie aktualizacji klastra o nowe komponenty i aktualizacje. Obejmuje to -

  • Aktualizacja głównych komponentów
  • Modernizacja komponentów węzła
  • Aktualizacja zasad
  • Modernizacja tras
  • Aktualizacja strumienia obrazu

Aby wykonać wszystkie te aktualizacje, musimy najpierw zainstalować szybkie instalatory lub narzędzia. W tym celu musimy zaktualizować następujące narzędzia -

  • atomic-openshift-utils
  • atomic-openshift-excluder
  • atomic-openshift-docker-excluder
  • pakiet etcd

Przed rozpoczęciem aktualizacji musimy wykonać kopię zapasową etcd na maszynie głównej, co można zrobić za pomocą następujących poleceń.

$ ETCD_DATA_DIR = /var/lib/origin/openshift.local.etcd
$ etcdctl backup \ --data-dir $ETCD_DATA_DIR \
   --backup-dir $ETCD_DATA_DIR.bak.<date>

Aktualizacja głównych komponentów

W OpenShift master, aktualizację rozpoczynamy od aktualizacji pliku etcd, a następnie przechodzimy do Dockera. Na koniec uruchamiamy automatyczny program wykonawczy, aby ustawić klaster w wymaganej pozycji. Jednak przed rozpoczęciem aktualizacji musimy najpierw aktywować atomowe pakiety openshift na każdym z masterów. Można to zrobić za pomocą następujących poleceń.

Step 1 - Usuń pakiety atomic-openshift

$ atomic-openshift-excluder unexclude

Step 2 - Uaktualnij etcd na wszystkich masterach.

$ yum update etcd

Step 3 - Uruchom ponownie usługę etcd i sprawdź, czy została pomyślnie uruchomiona.

$ systemctl restart etcd
$ journalctl -r -u etcd

Step 4 - Zaktualizuj pakiet Docker.

$ yum update docker

Step 5 - Uruchom ponownie usługę Docker i sprawdź, czy jest poprawnie uruchomiona.

$ systemctl restart docker $ journalctl -r -u docker

Step 6 - Po zakończeniu uruchom ponownie system za pomocą następujących poleceń.

$ systemctl reboot $ journalctl -r -u docker

Step 7 - Na koniec uruchom atomic-executer, aby przywrócić pakiety do listy wykluczeń yum.

$ atomic-openshift-excluder exclude

Nie ma takiego przymusu do aktualizacji polityki, wystarczy ją zaktualizować tylko wtedy, gdy jest to zalecane, co można sprawdzić za pomocą następującego polecenia.

$ oadm policy reconcile-cluster-roles

W większości przypadków nie musimy aktualizować definicji zasad.

Aktualizacja komponentów węzła

Po zakończeniu głównej aktualizacji możemy rozpocząć aktualizację węzłów. Należy pamiętać, że okres aktualizacji powinien być krótki, aby uniknąć wszelkiego rodzaju problemów w klastrze.

Step 1 - Usuń wszystkie atomowe pakiety OpenShift ze wszystkich węzłów, w których chcesz przeprowadzić aktualizację.

$ atomic-openshift-excluder unexclude

Step 2 - Następnie wyłącz planowanie węzłów przed aktualizacją.

$ oadm manage-node <node name> --schedulable = false

Step 3 - Wykonaj replikację całego węzła z bieżącego hosta na inny host.

$ oadm drain <node name> --force --delete-local-data --ignore-daemonsets

Step 4 - Uaktualnij konfigurację Dockera na hoście.

$ yum update docker

Step 5 - Uruchom ponownie usługę Docker, a następnie uruchom węzeł usługi Docker.

$systemctl restart docker $ systemctl restart atomic-openshift-node

Step 6 - Sprawdź, czy oba uruchomiły się poprawnie.

$ journalctl -r -u atomic-openshift-node

Step 7 - Po zakończeniu aktualizacji uruchom ponownie komputer węzła.

$ systemctl reboot
$ journalctl -r -u docker

Step 8 - Włącz ponownie planowanie w węzłach.

$ oadm manage-node <node> --schedulable.

Step 9 - Uruchom plik wykonawczy atomic-openshift, aby pobrać pakiet OpenShift z powrotem do węzła.

$ atomic-openshift-excluder exclude

Step 10 - Na koniec sprawdź, czy wszystkie węzły są dostępne.

$ oc get nodes

NAME                 STATUS   AGE
master.example.com   Ready    12d
node1.example.com    Ready    12d
node2.example.com    Ready    12d

Automatyczne skalowanie to funkcja w OpenShift, w której wdrożone aplikacje mogą skalować się i zlewać w miarę potrzeb, zgodnie z określonymi specyfikacjami. W aplikacji OpenShift autoskalowanie jest również nazywane autoskalowaniem podów. Istnieją dwatypes of application scaling następująco.

Skalowanie pionowe

Skalowanie w pionie polega na dodawaniu coraz większej mocy do pojedynczej maszyny, co oznacza dodawanie większej ilości procesora i dysku twardego. Jest to stara metoda OpenShift, która nie jest teraz obsługiwana przez wersje OpenShift.

Skalowanie poziome

Ten rodzaj skalowania jest przydatny, gdy istnieje potrzeba obsługi większej liczby żądań poprzez zwiększenie liczby maszyn.

W OpenShift jest two methods to enable the scaling feature.

  • Korzystanie z pliku konfiguracji wdrożenia
  • Podczas uruchamiania obrazu

Korzystanie z pliku konfiguracji wdrażania

W tej metodzie funkcja skalowania jest włączana za pośrednictwem deploymantowego pliku konfiguracyjnego yaml. W tym celu używane jest polecenie OC autoscale z minimalną i maksymalną liczbą replik, które muszą być uruchomione w dowolnym momencie w klastrze. Potrzebujemy definicji obiektu do stworzenia autoskalera. Poniżej znajduje się przykład pliku definicji autoskalera podów.

apiVersion: extensions/v1beta1
kind: HorizontalPodAutoscaler
metadata:
   name: database
spec:
   scaleRef:
      kind: DeploymentConfig
      name: database
      apiVersion: v1
      subresource: scale
   minReplicas: 1
   maxReplicas: 10
   cpuUtilization:
      targetPercentage: 80

Gdy mamy już plik na miejscu, musimy go zapisać w formacie yaml i uruchomić następujące polecenie w celu wdrożenia.

$ oc create –f <file name>.yaml

Podczas uruchamiania obrazu

Można również skalować automatycznie bez pliku yaml, korzystając z następującego polecenia oc autoscale polecenie w linii poleceń oc.

$ oc autoscale dc/database --min 1 --max 5 --cpu-percent = 75
deploymentconfig "database" autoscaled

To polecenie wygeneruje również podobny rodzaj pliku, który można później wykorzystać jako odniesienie.

Strategie wdrażania w OpenShift

Strategia wdrażania w OpenShift definiuje przepływ wdrażania za pomocą różnych dostępnych metod. W OpenShift następujące plikiimportant types of deployment strategies.

  • Strategia krocząca
  • Odtwórz strategię
  • Strategia niestandardowa

Poniżej znajduje się przykład pliku konfiguracji wdrożenia, który jest używany głównie do wdrażania na węzłach OpenShift.

kind: "DeploymentConfig"
apiVersion: "v1"
metadata:
   name: "database"
spec:
   template:
      metadata:
         labels:
            name: "Database1"
spec:
   containers:
      - name: "vipinopenshifttest"
         image: "openshift/mongoDB"
         ports:
            - containerPort: 8080
               protocol: "TCP"
replicas: 5
selector:
   name: "database"
triggers:
- type: "ConfigChange"
- type: "ImageChange"
   imageChangeParams:
      automatic: true
      containerNames:
         - "vipinopenshifttest"
      from:
         kind: "ImageStreamTag"
         name: "mongoDB:latest"
   strategy:
      type: "Rolling"

W powyższym pliku Deploymentconfig mamy strategię Rolling.

Do wdrożenia możemy użyć następującego polecenia OC.

$ oc deploy <deployment_config> --latest

Strategia krocząca

Strategia krocząca jest używana do aktualizacji kroczących lub wdrażania. Ten proces obsługuje również punkty zaczepienia cyklu życia, które służą do wstrzykiwania kodu do dowolnego procesu wdrażania.

strategy:
   type: Rolling
   rollingParams:
      timeoutSeconds: <time in seconds>
      maxSurge: "<definition in %>"
      maxUnavailable: "<Defintion in %>"
      pre: {}
      post: {}

Odtwórz strategię

Ta strategia wdrażania ma kilka podstawowych cech strategii wdrażania kroczącego, a także obsługuje hak cyklu życia.

strategy:
   type: Recreate
   recreateParams:
      pre: {}
      mid: {}
      post: {}

Strategia niestandardowa

Jest to bardzo pomocne, gdy ktoś chce zapewnić własny proces lub przepływ wdrażania. Wszystkie dostosowania można wykonać zgodnie z wymaganiami.

strategy:
   type: Custom
   customParams:
      image: organization/mongoDB
      command: [ "ls -l", "$HOME" ]
      environment:
         - name: VipinOpenshiftteat
         value: Dev1

W tym rozdziale zajmiemy się takimi tematami, jak zarządzanie węzłem, konfigurowanie konta usługi itp.

Konfiguracja nadrzędna i węzłowa

W OpenShift musimy użyć polecenia start wraz z OC, aby uruchomić nowy serwer. Podczas uruchamiania nowego mastera musimy użyć mastera wraz z poleceniem start, natomiast podczas uruchamiania nowego węzła musimy użyć node wraz z poleceniem start. Aby to zrobić, musimy utworzyć pliki konfiguracyjne zarówno dla mastera, jak i dla węzłów. Możemy utworzyć podstawowy plik konfiguracyjny dla mastera i węzła za pomocą następującego polecenia.

Dla głównego pliku konfiguracyjnego

$ openshift start master --write-config = /openshift.local.config/master

Plik konfiguracyjny węzła

$ oadm create-node-config --node-dir = /openshift.local.config/node-<node_hostname> --node = <node_hostname> --hostnames = <hostname>,<ip_address>

Po uruchomieniu następujących poleceń otrzymamy podstawowe pliki konfiguracyjne, których można użyć jako punktu wyjścia do konfiguracji. Później możemy mieć ten sam plik do uruchamiania nowych serwerów.

apiLevels:
- v1beta3
- v1
apiVersion: v1
assetConfig:
   logoutURL: ""
   masterPublicURL: https://172.10.12.1:7449
   publicURL: https://172.10.2.2:7449/console/
      servingInfo:
         bindAddress: 0.0.0.0:7449
         certFile: master.server.crt
         clientCA: ""
keyFile: master.server.key
   maxRequestsInFlight: 0
   requestTimeoutSeconds: 0
controllers: '*'
corsAllowedOrigins:
- 172.10.2.2:7449
- 127.0.0.1
- localhost
dnsConfig:
   bindAddress: 0.0.0.0:53
etcdClientInfo:
   ca: ca.crt
   certFile: master.etcd-client.crt
   keyFile: master.etcd-client.key
   urls:
   - https://10.0.2.15:4001
etcdConfig:
   address: 10.0.2.15:4001
   peerAddress: 10.0.2.15:7001
   peerServingInfo:
      bindAddress: 0.0.0.0:7001
      certFile: etcd.server.crt
      clientCA: ca.crt
      keyFile: etcd.server.key
   servingInfo:
      bindAddress: 0.0.0.0:4001
      certFile: etcd.server.crt
      clientCA: ca.crt
      keyFile: etcd.server.key
   storageDirectory: /root/openshift.local.etcd
etcdStorageConfig:
   kubernetesStoragePrefix: kubernetes.io
   kubernetesStorageVersion: v1
   openShiftStoragePrefix: openshift.io
   openShiftStorageVersion: v1
imageConfig:
   format: openshift/origin-${component}:${version}
   latest: false
kind: MasterConfig
kubeletClientInfo:
   ca: ca.crt
   certFile: master.kubelet-client.crt
   keyFile: master.kubelet-client.key
   port: 10250
kubernetesMasterConfig:
   apiLevels:
   - v1beta3
   - v1
   apiServerArguments: null
   controllerArguments: null
   masterCount: 1
   masterIP: 10.0.2.15
   podEvictionTimeout: 5m
   schedulerConfigFile: ""
   servicesNodePortRange: 30000-32767
   servicesSubnet: 172.30.0.0/16
   staticNodeNames: []
masterClients:
   externalKubernetesKubeConfig: ""
   openshiftLoopbackKubeConfig: openshift-master.kubeconfig
masterPublicURL: https://172.10.2.2:7449
networkConfig:
   clusterNetworkCIDR: 10.1.0.0/16
   hostSubnetLength: 8
   networkPluginName: ""
   serviceNetworkCIDR: 172.30.0.0/16
oauthConfig:
   assetPublicURL: https://172.10.2.2:7449/console/
   grantConfig:
      method: auto
   identityProviders:
   - challenge: true
   login: true
   name: anypassword
   provider:
      apiVersion: v1
      kind: AllowAllPasswordIdentityProvider
   masterPublicURL: https://172.10.2.2:7449/
   masterURL: https://172.10.2.2:7449/
   sessionConfig:
      sessionMaxAgeSeconds: 300
      sessionName: ssn
      sessionSecretsFile: ""
   tokenConfig:
      accessTokenMaxAgeSeconds: 86400
      authorizeTokenMaxAgeSeconds: 300
policyConfig:
   bootstrapPolicyFile: policy.json
   openshiftInfrastructureNamespace: openshift-infra
   openshiftSharedResourcesNamespace: openshift
projectConfig:
   defaultNodeSelector: ""
   projectRequestMessage: ""
   projectRequestTemplate: ""
   securityAllocator:
      mcsAllocatorRange: s0:/2
      mcsLabelsPerProject: 5
      uidAllocatorRange: 1000000000-1999999999/10000
routingConfig:
   subdomain: router.default.svc.cluster.local
serviceAccountConfig:
   managedNames:
   - default
   - builder
   - deployer
   
masterCA: ca.crt
   privateKeyFile: serviceaccounts.private.key
   privateKeyFile: serviceaccounts.private.key
   publicKeyFiles:
   - serviceaccounts.public.key
servingInfo:
   bindAddress: 0.0.0.0:8443
   certFile: master.server.crt
   clientCA: ca.crt
   keyFile: master.server.key
   maxRequestsInFlight: 0
   requestTimeoutSeconds: 3600

Pliki konfiguracyjne węzła

allowDisabledDocker: true
apiVersion: v1
dnsDomain: cluster.local
dnsIP: 172.10.2.2
dockerConfig:
   execHandlerName: native
imageConfig:
   format: openshift/origin-${component}:${version}
   latest: false
kind: NodeConfig
masterKubeConfig: node.kubeconfig
networkConfig:
   mtu: 1450
   networkPluginName: ""
nodeIP: ""
nodeName: node1.example.com

podManifestConfig:
   path: "/path/to/pod-manifest-file"
   fileCheckIntervalSeconds: 30
servingInfo:
   bindAddress: 0.0.0.0:10250
   certFile: server.crt
   clientCA: node-client-ca.crt
   keyFile: server.key
volumeDirectory: /root/openshift.local.volumes

Tak wyglądają pliki konfiguracyjne węzła. Gdy mamy już te pliki konfiguracyjne, możemy uruchomić następujące polecenie, aby utworzyć serwer główny i węzłowy.

$ openshift start --master-config = /openshift.local.config/master/master-
config.yaml --node-config = /openshift.local.config/node-<node_hostname>/node-
config.yaml

Zarządzanie węzłami

W OpenShift mamy narzędzie wiersza poleceń OC, które jest najczęściej używane do wykonywania wszystkich operacji w OpenShift. Do zarządzania węzłami możemy użyć następujących poleceń.

Aby wyświetlić węzeł

$ oc get nodes
NAME                             LABELS
node1.example.com     kubernetes.io/hostname = vklnld1446.int.example.com
node2.example.com     kubernetes.io/hostname = vklnld1447.int.example.com

Opisywanie szczegółów dotyczących węzła

$ oc describe node <node name>

Usuwanie węzła

$ oc delete node <node name>

Wyświetlanie podów w węźle

$ oadm manage-node <node1> <node2> --list-pods [--pod-selector=<pod_selector>] [-o json|yaml]

Ocenianie podów w węźle

$ oadm manage-node <node1> <node2> --evacuate --dry-run [--pod-selector=<pod_selector>]

Uwierzytelnianie konfiguracji

W OpenShift master jest wbudowany serwer OAuth, który może służyć do zarządzania uwierzytelnianiem. Wszyscy użytkownicy OpenShift otrzymują token z tego serwera, który pomaga im komunikować się z OpenShift API.

W OpenShift istnieją różne rodzaje poziomów uwierzytelniania, które można skonfigurować wraz z głównym plikiem konfiguracyjnym.

  • Pozwól wszystkim
  • Zaprzeczać wszystkiemu
  • HTPasswd
  • LDAP
  • Uwierzytelnianie podstawowe
  • Nagłówek żądania

Definiując konfigurację główną, możemy zdefiniować politykę identyfikacji, w której możemy zdefiniować typ polityki, której chcemy używać.

Pozwól wszystkim

Pozwól wszystkim

oauthConfig:
   ...
   identityProviders:
   - name: Allow_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

Zaprzeczać wszystkiemu

Spowoduje to odmowę dostępu do wszystkich nazw użytkowników i haseł.

oauthConfig:
   ...
   identityProviders:
   - name: deny_Authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: DenyAllPasswordIdentityProvider

HTPasswd

HTPasswd służy do sprawdzania nazwy użytkownika i hasła w odniesieniu do zaszyfrowanego hasła do pliku.

Aby wygenerować zaszyfrowany plik, wykonaj następujące polecenie.

$ htpasswd </path/to/users.htpasswd> <user_name>

Korzystanie z zaszyfrowanego pliku.

oauthConfig:
   ...
   identityProviders:
   - name: htpasswd_authontication
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider
         file: /path/to/users.htpasswd

Dostawca tożsamości LDAP

Służy do uwierzytelniania LDAP, w którym serwer LDAP odgrywa kluczową rolę w uwierzytelnianiu.

oauthConfig:
   ...
   identityProviders:
   - name: "ldap_authontication"
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: LDAPPasswordIdentityProvider
         attributes:
            id:
            - dn
            email:
            - mail
            name:
            - cn
            preferredUsername:
            - uid
         bindDN: ""
         bindPassword: ""
         ca: my-ldap-ca-bundle.crt
         insecure: false
         url: "ldap://ldap.example.com/ou=users,dc=acme,dc=com?uid"

Uwierzytelnianie podstawowe

Jest to używane, gdy weryfikacja nazwy użytkownika i hasła jest wykonywana w odniesieniu do uwierzytelniania między serwerami. Uwierzytelnienie jest chronione w podstawowym adresie URL i jest prezentowane w formacie JSON.

oauthConfig:
   ...
   identityProviders:
   - name: my_remote_basic_auth_provider
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: BasicAuthPasswordIdentityProvider
         url: https://www.vklnld908.int.example.com/remote-idp
         ca: /path/to/ca.file
         certFile: /path/to/client.crt
         keyFile: /path/to/client.key

Konfiguracja konta usługi

Konta usług zapewniają elastyczny sposób uzyskiwania dostępu do OpenShift API, ujawniając nazwę użytkownika i hasło w celu uwierzytelnienia.

Włączanie konta usługi

Konto usługi używa pary kluczy publicznego i prywatnego do uwierzytelniania. Uwierzytelnianie w interfejsie API odbywa się za pomocą klucza prywatnego i weryfikuje go z kluczem publicznym.

ServiceAccountConfig:
   ...
   masterCA: ca.crt
   privateKeyFile: serviceaccounts.private.key
   publicKeyFiles:
   - serviceaccounts.public.key
   - ...

Tworzenie konta usługi

Użyj następującego polecenia, aby utworzyć konto usługi

$ Openshift cli create service account <name of server account>

Praca z proxy HTTP

W większości środowisk produkcyjnych bezpośredni dostęp do Internetu jest ograniczony. Nie są one ujawniane w Internecie lub przez serwer proxy HTTP lub HTTPS. W środowisku OpenShift ta definicja maszyny proxy jest ustawiana jako zmienna środowiskowa.

Można to zrobić, dodając definicję proxy do plików głównych i węzłów znajdujących się w /etc/sysconfig. Jest to podobne, jak w przypadku każdej innej aplikacji.

Mistrzowska maszyna

/ etc / sysconfig / openshift-master

HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com

Maszyna węzłowa

/ etc / sysconfig / openshift-node

HTTP_PROXY=http://USERNAME:[email protected]:8080/
HTTPS_PROXY=https://USERNAME:[email protected]:8080/
NO_PROXY=master.vklnld908.int.example.com

Po zakończeniu musimy zrestartować maszyny główne i węzłowe.

Dla Docker Pull

/ etc / sysconfig / docker

HTTP_PROXY = http://USERNAME:[email protected]:8080/
HTTPS_PROXY = https://USERNAME:[email protected]:8080/
NO_PROXY = master.vklnld1446.int.example.com

Aby uruchomić kapsułę w środowisku proxy, można to zrobić za pomocą -

containers:
- env:
   - name: "HTTP_PROXY"
      value: "http://USER:PASSWORD@:10.0.1.1:8080"

Polecenie OC environment może być użyte do zaktualizowania istniejącego env.

Pamięć OpenShift z NFS

W OpenShift koncepcja trwałego woluminu i trwałego oświadczenia woluminu tworzy trwały magazyn. Jest to jedna z kluczowych koncepcji, w której tworzony jest pierwszy trwały wolumin, a później ten sam wolumin jest zajmowany. W tym celu musimy mieć wystarczającą pojemność i miejsce na dysku na podstawowym sprzęcie.

apiVersion: v1
kind: PersistentVolume
metadata:
   name: storage-unit1
spec:
   capacity:
      storage: 10Gi
   accessModes:
   - ReadWriteOnce
   nfs:
      path: /opt
      server: 10.12.2.2
   persistentVolumeReclaimPolicy: Recycle

Następnie za pomocą polecenia OC create utwórz trwały wolumin.

$ oc create -f storage-unit1.yaml

persistentvolume " storage-unit1 " created

Odbieranie utworzonego wolumenu.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
   name: Storage-clame1
spec:
   accessModes:
      - ReadWriteOnce
   resources:
      requests:
         storage: 5Gi

Utwórz roszczenie.

$ oc create -f Storage-claim1.yaml
persistentvolume " Storage-clame1 " created

Zarządzanie użytkownikami i rolami

Administracja użytkownikami i rolami służy do zarządzania użytkownikami, ich dostępem i kontrolą w różnych projektach.

Tworzenie użytkownika

Do tworzenia nowych użytkowników w OpenShift można użyć predefiniowanych szablonów.

kind: "Template"
apiVersion: "v1"
parameters:
   - name: vipin
   required: true
objects:
   - kind: "User"
   apiVersion: "v1"
   metadata:
   name: "${email}" - kind: "Identity" apiVersion: "v1" metadata: name: "vipin:${email}"
   providerName: "SAML"
   providerUserName: "${email}" - kind: "UserIdentityMapping" apiVersion: "v1" identity: name: "vipin:${email}"
user:
   name: "${email}"

Użyj oc create –f <nazwa pliku>, aby utworzyć użytkowników.

$ oc create –f vipin.yaml

Użyj następującego polecenia, aby usunąć użytkownika w OpenShift.

$ oc delete user <user name>

Ograniczanie dostępu użytkowników

ResourceQuotas i LimitRanges służą do ograniczania poziomów dostępu użytkowników. Służą do ograniczania zasobników i kontenerów w klastrze.

apiVersion: v1
kind: ResourceQuota
metadata:
   name: resources-utilization
spec:
   hard:
      pods: "10"

Tworzenie oferty przy użyciu powyższej konfiguracji

$ oc create -f resource-quota.yaml –n –Openshift-sample

Opisywanie oferty zasobów

$ oc describe quota resource-quota  -n  Openshift-sample
Name:              resource-quota
Namespace:                              Openshift-sample
Resource           Used                  Hard
--------           ----                  ----
pods                3                    10

Definiowanie limitów kontenerów może posłużyć do ograniczenia zasobów, które będą używane przez wdrożone kontenery. Służą do definiowania maksymalnych i minimalnych ograniczeń niektórych obiektów.

Ograniczenia projektu użytkownika

Jest to zasadniczo używane do liczby projektów, które użytkownik może mieć w dowolnym momencie. Zasadniczo odbywa się to poprzez zdefiniowanie poziomów użytkowników w kategoriach brązu, srebra i złota.

Najpierw musimy zdefiniować obiekt, który ma wartość tego, ile projektów może mieć kategoria brązowa, srebrna i złota. Należy to zrobić w pliku master-confif.yaml.

admissionConfig:
   pluginConfig:
      ProjectRequestLimit:
         configuration:
            apiVersion: v1
            kind: ProjectRequestLimitConfig
            limits:
            - selector:
               level: platinum
            - selector:
               level: gold
            maxProjects: 15
            - selector:
               level: silver
            maxProjects: 10
            - selector:
               level: bronze
            maxProjects: 5

Zrestartuj serwer główny.

Przypisanie użytkownika do określonego poziomu.

$ oc label user vipin level = gold

W razie potrzeby przeniesienie użytkownika z etykiety.

$ oc label user <user_name> level-

Dodawanie ról do użytkownika.

$ oadm policy add-role-to-user 
      
        <user_name> 
      

Usunięcie roli użytkownika.

$ oadm policy remove-role-from-user 
      
        <user_name> 
      

Dodanie roli klastra do użytkownika.

$ oadm policy add-cluster-role-to-user 
      
        <user_name> 
      

Usuwanie roli klastra od użytkownika.

$ oadm policy remove-cluster-role-from-user 
      
        <user_name> 
      

Dodawanie roli do grupy.

$ oadm policy add-role-to-user 
      
        <user_name> 
      

Usuwanie roli z grupy.

$ oadm policy remove-cluster-role-from-user 
      
        <user_name> 
      

Dodawanie roli klastra do grupy.

$ oadm policy add-cluster-role-to-group 
      
        <groupname> 
      

Usuwanie roli klastra z grupy.

$ oadm policy remove-cluster-role-from-group <role> <groupname>

Użytkownik do administrowania klastrem

Jest to jedna z najpotężniejszych ról, w której użytkownik ma możliwość zarządzania całym klastrem, począwszy od jego utworzenia aż do jego usunięcia.

$ oadm policy add-role-to-user admin <user_name> -n <project_name>

Użytkownik z najwyższą mocą

$ oadm policy add-cluster-role-to-user cluster-admin <user_name>

OpenShift jest oparty na platformach Docker i Kubernetes. Wszystkie kontenery są zbudowane na klastrze Docker, który jest w zasadzie usługą Kubernetes na komputerach z systemem Linux, przy użyciu funkcji orkiestracji Kubernetes.

W tym procesie budujemy Kubernetes master, który kontroluje wszystkie węzły i wdraża kontenery we wszystkich węzłach. Główną funkcją Kubernetes jest sterowanie klastrem OpenShift i przepływem wdrażania przy użyciu innego rodzaju pliku konfiguracyjnego. Podobnie jak w Kubernetes, używamy kubctl w taki sam sposób, w jaki używamy narzędzia wiersza poleceń OC do budowania i wdrażania kontenerów w węzłach klastra.

Poniżej przedstawiono różne rodzaje plików konfiguracyjnych używanych do tworzenia różnego rodzaju obiektów w klastrze.

  • Images
  • POD
  • Service
  • Kontroler replikacji
  • Zestaw replik
  • Deployment

Obrazy

Obrazy Kubernetes (Docker) są kluczowymi elementami składowymi infrastruktury kontenerowej. Obecnie Kubernetes obsługuje tylko plikiDockerobrazy. Każdy kontener w kapsule ma w sobie uruchomiony obraz Dockera.

apiVersion: v1
kind: pod
metadata:
   name: Tesing_for_Image_pull -----------> 1
   spec:
   containers:
- name: neo4j-server ------------------------> 2
image: <Name of the Docker image>----------> 3
imagePullPolicy: Always ------------->4
command: [“echo”, “SUCCESS”] -------------------> 5

STRĄK

Pod to kolekcja kontenerów i ich magazynu wewnątrz węzła klastra Kubernetes. Możliwe jest utworzenie kapsuły z wieloma kontenerami w środku. Poniżej znajduje się przykład przechowywania kontenera bazy danych i kontenera interfejsu internetowego w tym samym pod.

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
      image: tomcat: 8.0
      ports:
- containerPort: 7500
imagePullPolicy: Always

Usługa

Usługę można zdefiniować jako logiczny zestaw zasobników. Można go zdefiniować jako abstrakcję na szczycie kapsuły, która zapewnia pojedynczy adres IP i nazwę DNS, za pomocą której można uzyskać dostęp do zasobników. Dzięki usłudze bardzo łatwo jest zarządzać konfiguracją równoważenia obciążenia. Ułatwia skalowanie POD-ów.

apiVersion: v1
kind: Service
metadata:
   name: Tutorial_point_service
spec:
   ports:
   - port: 8080
      targetPort: 31999

Kontroler replikacji

Kontroler replikacji to jedna z kluczowych funkcji Kubernetes, która jest odpowiedzialna za zarządzanie cyklem życia poda. Jest odpowiedzialny za upewnienie się, że określona liczba replik pod jest uruchomiona w dowolnym momencie.

apiVersion: v1
kind: ReplicationController
metadata:
   name: Tomcat-ReplicationController
spec:
   replicas: 3
   template:
   metadata:
      name: Tomcat-ReplicationController
   labels:
      app: App
      component: neo4j
   spec:
      containers:
      - name: Tomcat
      image: tomcat: 8.0
      ports:
      - containerPort: 7474

Zestaw replik

Zestaw replik zapewnia, ile replik ma być uruchomionych. Można to traktować jako zamiennik kontrolera replikacji.

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
   name: Tomcat-ReplicaSet
spec:
   replicas: 3
   selector:
      matchLables:
      tier: Backend
   matchExpression:
      - { key: tier, operation: In, values: [Backend]}
   
   app: App
   component: neo4j
spec:
   containers:
   - name: Tomcat-
image: tomcat: 8.0
   ports:
containerPort: 7474

Rozlokowanie

Wdrożenia to uaktualnione i wyższe wersje kontrolera replikacji. Zarządzają wdrażaniem zestawów replik, które są również ulepszoną wersją kontrolera replikacji. Mają możliwość aktualizowania zestawu replik, a także przywracania poprzedniej wersji.

apiVersion: extensions/v1beta1 --------------------->1
kind: Deployment --------------------------> 2
metadata:
   name: Tomcat-ReplicaSet
spec:
   replicas: 3
   template:
      metadata:
lables:
   app: Tomcat-ReplicaSet
   tier: Backend
spec:
   containers:
name: Tomcat-
   image: tomcat: 8.0
   ports:
   - containerPort: 7474

Wszystkie pliki konfiguracyjne mogą służyć do tworzenia odpowiednich obiektów Kubernetes.

$ Kubectl create –f <file name>.yaml

Poniższych poleceń można użyć, aby poznać szczegóły i opis obiektów Kubernetes.

For POD

$ Kubectl get pod <pod name> $ kubectl delete pod <pod name>
$ kubectl describe pod <pod name>

For Replication Controller

$ Kubectl get rc <rc name>
$ kubectl delete rc <rc name> $ kubectl describe rc <rc name>

For Service

$ Kubectl get svc <svc name> $ kubectl delete svc <svc name>
$ kubectl describe svc <svc name>

Aby uzyskać więcej informacji na temat pracy z Dockerem i Kubernetesem, odwiedź nasz samouczek Kubernetes, korzystając z następującego łącza kubernetes .

Bezpieczeństwo OpenShift to głównie połączenie dwóch komponentów, które głównie obsługują ograniczenia bezpieczeństwa.

  • Ograniczenia kontekstu bezpieczeństwa (SCC)
  • Konto usługi

Ograniczenia kontekstu bezpieczeństwa (SCC)

Zasadniczo jest używany do ograniczenia kapsuły, co oznacza, że ​​definiuje ograniczenia dla kapsuły, takie jak czynności, które może wykonywać i do czego ma dostęp w klastrze.

OpenShift zapewnia zestaw predefiniowanych SCC, które mogą być używane, modyfikowane i rozszerzane przez administratora.

$ oc get scc
NAME              PRIV   CAPS  HOSTDIR  SELINUX    RUNASUSER         FSGROUP   SUPGROUP  PRIORITY
anyuid            false   []   false    MustRunAs  RunAsAny          RunAsAny  RunAsAny  10
hostaccess        false   []   true     MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  <none>
hostmount-anyuid  false   []   true     MustRunAs  RunAsAny          RunAsAny  RunAsAny  <none>
nonroot           false   []   false    MustRunAs  MustRunAsNonRoot  RunAsAny  RunAsAny  <none>
privileged        true    []   true     RunAsAny   RunAsAny          RunAsAny  RunAsAny  <none>
restricted        false   []   false    MustRunAs  MustRunAsRange    RunAsAny  RunAsAny  <none>

Jeśli ktoś chce użyć dowolnego wstępnie zdefiniowanego scc, można to zrobić po prostu dodając użytkownika lub grupę do grupy scc.

$ oadm policy add-user-to-scc <scc_name> <user_name> $ oadm policy add-group-to-scc <scc_name> <group_name>

Konto usługi

Konta usług są zasadniczo używane do kontrolowania dostępu do głównego interfejsu API OpenShift, który jest wywoływany, gdy polecenie lub żądanie jest uruchamiane z dowolnej maszyny głównej lub węzła.

Za każdym razem, gdy aplikacja lub proces wymaga możliwości, która nie jest przyznawana przez ograniczony SCC, będziesz musiał utworzyć określone konto usługi i dodać je do odpowiedniego SCC. Jeśli jednak SCC nie spełnia twoich wymagań, lepiej jest utworzyć nowy SCC specyficzny dla twoich wymagań, niż używać tego, który jest najlepiej dopasowany. Na koniec ustaw go dla konfiguracji wdrożenia.

$ oc create serviceaccount Cadmin $ oc adm policy add-scc-to-user vipin -z Cadmin

Bezpieczeństwo kontenerów

W OpenShift bezpieczeństwo kontenerów opiera się na koncepcji tego, jak bezpieczna jest platforma kontenerowa i gdzie są uruchomione kontenery. Jest wiele rzeczy, które pojawiają się, kiedy mówimy o bezpieczeństwie kontenerów io tym, czym należy się zająć.

Image Provenance - Wdrożono bezpieczny system etykietowania, który dokładnie i w sposób niepodważalny identyfikuje, skąd pochodzą pojemniki używane w środowisku produkcyjnym.

Security Scanning - Skaner obrazów automatycznie sprawdza wszystkie obrazy pod kątem znanych luk w zabezpieczeniach.

Auditing - Środowisko produkcyjne jest regularnie kontrolowane, aby upewnić się, że wszystkie kontenery są oparte na aktualnych kontenerach, a hosty i kontenery są bezpiecznie skonfigurowane.

Isolation and Least Privilege- Kontenery działają przy minimalnych zasobach i uprawnieniach potrzebnych do skutecznego działania. Nie są w stanie nadmiernie ingerować w hosta lub inne pojemniki.

Runtime Threat Detection - Funkcja, która wykrywa aktywne zagrożenia dla aplikacji w kontenerach w czasie wykonywania i automatycznie na nie reaguje.

Access Controls - Moduły bezpieczeństwa Linuksa, takie jak AppArmor lub SELinux, służą do egzekwowania kontroli dostępu.

Istnieje kilka kluczowych metod archiwizowania zabezpieczeń kontenerów.

  • Kontrolowanie dostępu przez OAuth
  • Za pomocą samoobsługowej konsoli internetowej
  • Certyfikaty platformy

Kontrolowanie dostępu przez OAuth

W tej metodzie uwierzytelnianie do kontroli dostępu do API jest archiwizowane, uzyskując bezpieczny token do uwierzytelniania za pośrednictwem serwerów OAuth, który jest wbudowany w maszynę główną OpenShift. Jako administrator masz możliwość modyfikowania konfiguracji serwera OAuth.

Więcej informacji na temat konfiguracji serwera OAuth można znaleźć w rozdziale 5 tego samouczka.

Za pośrednictwem samoobsługowej konsoli internetowej

Ta funkcja bezpieczeństwa konsoli internetowej jest wbudowana w konsolę internetową OpenShift. Ta konsola zapewnia, że ​​wszystkie współpracujące ze sobą zespoły nie mają dostępu do innych środowisk bez uwierzytelnienia. Master multi-telnet w OpenShift ma następujące funkcje bezpieczeństwa -

  • Warstwa TCL jest włączona
  • Używa certyfikatu x.509 do uwierzytelniania
  • Zabezpiecza konfigurację etcd na maszynie głównej

Za pomocą certyfikatów platformy

W tej metodzie certyfikaty dla każdego hosta są konfigurowane podczas instalacji za pośrednictwem Ansible. Ponieważ wykorzystuje protokół komunikacyjny HTTPS poprzez Rest API, potrzebujemy bezpiecznego połączenia TCL z różnymi komponentami i obiektami. Są to wstępnie zdefiniowane certyfikaty, ale można nawet mieć niestandardowy certyfikat zainstalowany w klastrze master w celu uzyskania dostępu. Podczas początkowej konfiguracji certyfikatu głównego można skonfigurować niestandardowe certyfikaty, zastępując istniejące certyfikaty za pomocąopenshift_master_overwrite_named_certificates parametr.

Example

openshift_master_named_certificates = [{"certfile": "/path/on/host/to/master.crt", 
"keyfile": "/path/on/host/to/master.key", 
"cafile": "/path/on/host/to/mastercert.crt"}]

Aby uzyskać więcej informacji na temat generowania certyfikatów niestandardowych, odwiedź poniższy link -

https://www.linux.com/learn/creating-self-signed-ssl-certificates-apache-linux

Bezpieczeństwo sieci

W OpenShift do komunikacji używana jest sieć definiowana programowo (SDN). Sieciowa przestrzeń nazw jest używana dla każdego poda w klastrze, przy czym każdy pod otrzymuje własny adres IP i zakres portów, aby uzyskać na nim ruch sieciowy. W ten sposób można izolować strąki, z powodu których nie może się komunikować z zasobnikami w innym projekcie.

Izolowanie projektu

Może to zrobić administrator klastra, korzystając z następującego polecenia oadm command z CLI.

$ oadm pod-network isolate-projects <project name 1> <project name 2>

Oznacza to, że projekty zdefiniowane powyżej nie mogą komunikować się z innymi projektami w klastrze.

Bezpieczeństwo wolumenu

Bezpieczeństwo wolumenu wyraźnie oznacza zabezpieczenie PV i PVC projektów w klastrze OpenShift. Istnieją głównie cztery sekcje kontrolujące dostęp do woluminów w OpenShift.

  • Grupy dodatkowe
  • fsGroup
  • runAsUser
  • seLinuxOptions

Grupy dodatkowe - grupy dodatkowe to zwykłe grupy systemu Linux. Gdy proces działa w systemie, działa z identyfikatorem użytkownika i identyfikatorem grupy. Te grupy służą do kontrolowania dostępu do pamięci współużytkowanej.

Sprawdź podłączenie NFS za pomocą następującego polecenia.

# showmount -e <nfs-server-ip-or-hostname>
Export list for f21-nfs.vm:
/opt/nfs *

Sprawdź szczegóły NFS na serwerze montowania, używając następującego polecenia.

# cat /etc/exports
/opt/nfs *(rw,sync,no_root_squash)
...
# ls -lZ /opt/nfs -d
drwxrws---. nfsnobody 2325 unconfined_u:object_r:usr_t:s0 /opt/nfs
# id nfsnobody
uid = 65534(nfsnobody) gid = 454265(nfsnobody) groups = 454265(nfsnobody)

Plik / opt / nfs / export jest dostępny przez UID454265 i grupę 2325.

apiVersion: v1
kind: Pod
...
spec:
   containers:
   - name: ...
      volumeMounts:
      - name: nfs
         mountPath: /usr/share/...
   securityContext:
      supplementalGroups: [2325]
   volumes:
   - name: nfs
      nfs:
      server: <nfs_server_ip_or_host>
      path: /opt/nfs

fsGroup

fsGroup oznacza grupę systemu plików, która jest używana do dodawania dodatkowych grup kontenerów. Identyfikator grupy suplementów jest używany do przechowywania współdzielonego, a fsGroup jest używany do przechowywania blokowego.

kind: Pod
spec:
   containers:
   - name: ...
   securityContext:
      fsGroup: 2325

runAsUser

runAsUser używa identyfikatora użytkownika do komunikacji. Służy do definiowania obrazu kontenera w definicji poda. W razie potrzeby we wszystkich kontenerach można użyć jednego identyfikatora użytkownika.

Podczas uruchamiania kontenera zdefiniowany identyfikator jest dopasowywany do identyfikatora właściciela podczas eksportu. Jeśli określony identyfikator jest zdefiniowany na zewnątrz, staje się globalny dla wszystkich kontenerów w pod. Jeśli jest zdefiniowany z określonym kapsułą, staje się specyficzny dla pojedynczego kontenera.

spec:
   containers:
   - name: ...
      securityContext:
         runAsUser: 454265