OpenShift - Conceito Básico
Antes de começar com a configuração e implementação reais dos aplicativos, precisamos entender alguns termos e conceitos básicos usados no OpenShift V3.
Recipientes e imagens
Imagens
Esses são os blocos de construção básicos do OpenShift, que são formados por imagens Docker. Em cada pod do OpenShift, o cluster tem suas próprias imagens em execução dentro dele. Quando configuramos um pod, temos um campo que será agrupado a partir do registro. Este arquivo de configuração puxará a imagem e a implantará no nó do cluster.
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
Para extrair e criar uma imagem dele, execute o seguinte comando. OC é o cliente para se comunicar com o ambiente OpenShift após o login.
$ oc create –f Tesing_for_Image_pull
Recipiente
Isso é criado quando a imagem Docker é implantada no cluster OpenShift. Ao definir qualquer configuração, definimos a seção do contêiner no arquivo de configuração. Um contêiner pode ter várias imagens em execução dentro e todos os contêineres em execução no nó do cluster são gerenciados pelo 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
A seguir estão as especificações para definir um contêiner com várias imagens em execução dentro dele.
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
Na configuração acima, definimos um pod de vários contêineres com duas imagens de Tomcat e MongoDB dentro dele.
Pods e serviços
Pods
O pod pode ser definido como uma coleção de contêineres e seu armazenamento dentro de um nó do cluster OpenShift (Kubernetes). Em geral, temos dois tipos de pod, começando de um pod de contêiner único a pod de vários contêineres.
Single Container Pod - Eles podem ser facilmente criados com o comando OC ou por um arquivo yml de configuração básica.
$ oc run <name of pod> --image = <name of the image from registry>
Crie-o com um arquivo yaml simples da seguinte maneira.
apiVersion: v1
kind: Pod
metadata:
name: apache
spec:
containers:
- name: apache
image: apache: 8.0
ports:
- containerPort: 7500
imagePullPolicy: Always
Depois que o arquivo acima for criado, ele gerará um pod com o seguinte comando.
$ oc create –f apache.yml
Multi-Container Pod- Os pods de vários contêineres são aqueles nos quais temos mais de um contêiner em execução. Eles são criados usando arquivos yaml da seguinte maneira.
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
Depois de criar esses arquivos, podemos simplesmente usar o mesmo método acima para criar um contêiner.
Service- Como temos um conjunto de containers rodando dentro de um pod, da mesma forma temos um serviço que pode ser definido como um conjunto lógico de pods. É uma camada abstrata no topo do pod, que fornece um único IP e nome DNS por meio do qual os pods podem ser acessados. O serviço ajuda a gerenciar a configuração de balanceamento de carga e escalonar o pod com muita facilidade. No OpenShift, um serviço é um objeto REST cuja deificação pode ser postada no apiService no mestre OpenShift para criar uma nova instância.
apiVersion: v1
kind: Service
metadata:
name: Tutorial_point_service
spec:
ports:
- port: 8080
targetPort: 31999
Builds e streams
Builds
No OpenShift, construir é um processo de transformar imagens em contêineres. É o processamento que converte o código-fonte em uma imagem. Este processo de construção funciona em uma estratégia pré-definida de construção de código-fonte para imagem.
A construção processa várias estratégias e fontes.
Construir estratégias
Source to Image- Esta é basicamente uma ferramenta que auxilia na construção de imagens reproduzíveis. Essas imagens estão sempre em um estágio pronto para execução usando o comando Docker run.
Docker Build - Este é o processo no qual as imagens são construídas usando o arquivo Docker, executando um comando simples de construção do Docker.
Custom Build - Estas são as compilações que são usadas para criar imagens base do Docker.
Fontes de compilação
Git- Esta fonte é usada quando o repositório git é usado para construir imagens. O Dockerfile é opcional. As configurações do código-fonte se parecem com o seguinte.
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 - O Dockerfile é usado como uma entrada no arquivo de configuração.
source:
type: "Dockerfile"
dockerfile: "FROM ubuntu: latest
RUN yum install -y httpd"
Image Streams- Os fluxos de imagem são criados após puxar as imagens. A vantagem de um fluxo de imagem é que ele procura por atualizações na nova versão de uma imagem. Isso é usado para comparar qualquer número de imagens de contêiner formatadas do Docker identificadas por tags.
Os fluxos de imagens podem executar uma ação automaticamente quando uma nova imagem é criada. Todas as compilações e implantações podem observar a ação da imagem e executar uma ação de acordo. A seguir, definimos como construir um fluxo.
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
Rotas e modelos
Rotas
No OpenShift, o roteamento é um método de expor o serviço ao mundo externo, criando e configurando um nome de host acessível externamente. Rotas e terminais são usados para expor o serviço ao mundo externo, de onde o usuário pode usar a conectividade de nome (DNS) para acessar o aplicativo definido.
No OpenShift, as rotas são criadas usando roteadores que são implantados pelo administrador do OpenShift no cluster. Os roteadores são usados para vincular as portas HTTP (80) e https (443) a aplicativos externos.
A seguir estão os diferentes tipos de protocolo suportados por rotas -
- HTTP
- HTTPS
- TSL e web socket
Ao configurar o serviço, os seletores são usados para configurar o serviço e localizar o ponto de extremidade usando esse serviço. A seguir está um exemplo de como criamos um serviço e o roteamento para esse serviço usando um protocolo apropriado.
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {"name": "Openshift-Rservice"},
"spec": {
"selector": {"name":"RService-openshift"},
"ports": [
{
"protocol": "TCP",
"port": 8888,
"targetPort": 8080
}
]
}
}
Em seguida, execute o seguinte comando e o serviço é criado.
$ oc create -f ~/training/content/Openshift-Rservice.json
É assim que o serviço fica após a criação.
$ 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.
Crie um roteamento para serviço usando o código a seguir.
{
"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"}
}
}
Quando o comando OC é usado para criar uma rota, uma nova instância do recurso de rota é criada.
Modelos
Os modelos são definidos como um objeto padrão no OpenShift que pode ser usado várias vezes. É parametrizado com uma lista de espaços reservados que são usados para criar vários objetos. Isso pode ser usado para criar qualquer coisa, desde um pod até uma rede, para o qual os usuários têm autorização para criar. Uma lista de objetos pode ser criada, se o modelo da interface CLI ou GUI na imagem for carregado para o diretório do projeto.
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>
Autenticação e autorização
Autenticação
No OpenShift, enquanto configura a estrutura mestre e cliente, o mestre surge com um recurso embutido do servidor OAuth. O servidor OAuth é usado para gerar tokens, que são usados para autenticação na API. Como o OAuth vem como uma configuração padrão para mestre, temos o provedor de identidade Permitir tudo usado por padrão. Diferentes provedores de identidade estão presentes, os quais podem ser configurados em/etc/openshift/master/master-config.yaml.
Existem diferentes tipos de provedores de identidade presentes no OAuth.
- Permitir todos
- Negar tudo
- HTPasswd
- LDAP
- Autenticação Básica
Permitir todos
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
Negar tudo
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
Para usar o HTPasswd, precisamos primeiro configurar as ferramentas Httpd na máquina mestre e então configurá-lo da mesma forma que fizemos para os outros.
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
Autorização
A autorização é um recurso do mestre OpenShift, que é usado para validar para validar um usuário. Isso significa que ele verifica o usuário que está tentando executar uma ação para ver se o usuário está autorizado a executar essa ação em um determinado projeto. Isso ajuda o administrador a controlar o acesso aos projetos.
As políticas de autorização são controladas usando -
- Rules
- Roles
- Bindings
A avaliação da autorização é feita usando -
- Identity
- Action
- Bindings
Usando políticas -
- Política de cluster
- Política local