Giter Club home page Giter Club logo

workshop-openshift's Introduction

Introdução

O que é isso?

Esse material é usado para capacitação e transferência de conhecimento de clientes e parceiros da Red Hat Brasil em OpenShift, aplicável tanto ao Red Hat OpenShift Container Platform (enterprise) quanto ao OpenShift Origin (community).

O que são v3.x e v4.x?

Esse repositório inclui material para workshops em diferentes versões do Red Hat OpenShift, que foram construidas de forma completamente distintas. Essas versões são mantidas em branches diferentes neste repositório. Em resumo, temos:

A branch develop contém o conteúdo em desenvolvimento. A branch master deveria refletir a última versão estável, que atualmente é a v3.11, mas estamos com preguiça para rebase com conflitos (será resolvido no lançamento do v4.2).

Por que dessa forma?

Inspirados na cultura open-source, acreditamos que, ao disponibilizar o material de forma aberta, podemos evoluir o workshop de forma colaborativa e alinhado com as necessidades dos nossos clientes, parceiros e a comunidade.

Este trabalho está licenciado sob a Licença Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional Creative Commons (CC BY-NC-SA 4.0).

Como usar?

Não existe uma maneira certa ou errada de usar o conteúdo deste material. Você poderia segur como um roteiro independente, usando a sua máquina particular como ambiente de experimentações, ou você pode se reunir com colegas e compartilhar a experiência.

Se você tiver interesse de participar de um workshop com o time Red Hat Brasil, entre em contato com o seu time de contas/parceiro!

Para conseguir aproveitar o material, nossa recomendação é:

  • Reserve entre 4-8 horas para discussão dos assuntos e execução das atividades.
  • Acesso à Internet é indispensável.
  • Caso opte por usar uma VM local recomendamos que os participantes utilizem um PC capaz de rodar máquinas virtuais:
    • Processador dual-core de 2GHz
    • 8GB de memória RAM
    • 40GB de disco livre
    • Virtualizador (QEMU/KVM, Oracle VirtualBox, VMware Workstation)

Por onde começar?

Esse material é dividido em 2 partes:

Posso contribuir?

Aceitamos contribuições de todas as formas! Você pode fazer uso da funcionalidade de "Issues" direto do repositório fonte no Github. Uma outra alternativa é através das funcionalidades de colaboração do próprio GitBook. Fique a vontade de usar qualquer um dos dois!

workshop-openshift's People

Contributors

davivcgarcia avatar gitbook-bot avatar luszczynski avatar masales avatar rafaeltuelho avatar sylviot avatar tavaresrodrigo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

workshop-openshift's Issues

Capítulo sobre OpenShift básico

Tópicos:

  • Definição do que é o OpenShift
  • Componentes e arquitetura básica
  • Instaladores (IPI vs UPI)
  • CodeReady Container (CRC)
  • Uso das interfaces web console, oc

[2.1.16 - Idle] Idle não funciona

Descobri porque o idle não está funcionando corretamente. O pod entra em idle, mas não sai quando clicamos no link da aplicação.

adicionar breve explicação do oc cluster up

O aluno precisa entender a diferença entre o CDK/Minishift/oc cluster up e o OCP....

algo do tipo:

"o comando "oc cluster up" é um utilitário que permite subir uma espécie "cluster all in one" usando apenas Containers ao invés de Hosts (VM) reais. Como vimos no workshop o Opeshift é composto por vários componentes. Um cluster real de produção utiliza vários Nodes (hosts) pra montar o cluster... No caso do OC ele usa apenas containers pra faciliar e prover uma experiência inicial ao Dev..."

Capítulo sobre Linux containers

Tópicos:

  • Conceito de containers, imagens e registros
  • Uso do podman, buildah e skopeo no RHEL 8
  • Uso de registros remotos, como Red Hat Quay e Docker Hub

Extras:

  • Script de provisionamento de máquinas dos alunos RHEL 8 (complementar ao RHPDS)

Problema no Lab 1.1 Configuracao certificado ssl registry docker

Ao tentar adicionar o pacote do passo 1.1 (lab docker) tenho o seguinte erro:

[root@localhost ~]# yum install http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
Loaded plugins: fastestmirror
python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm                                                                                      |  41 kB  00:00:00     
Examining /var/tmp/yum-root-fRHU6x/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm: python-rhsm-certificates-1.19.10-1.el7_4.x86_64
Cannot install package python-rhsm-certificates-1.19.10-1.el7_4.x86_64. It is obsoleted by installed package subscription-manager-rhsm-certificates-1.24.13-3.el7.centos.x86_64
Error: Nothing to do

Tentei instalar o pacote equivalente, porem o problema de ssl continua quando executo o docker pull do repo da red hat:

[root@localhost ~]# docker pull registry.access.redhat.com/rhel-atomic
Using default tag: latest
Trying to pull repository registry.access.redhat.com/rhel-atomic ... 
open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

Configurar Integração Contínua

História de Usuário:
Eu, no papel de colaborador, gostaria de validar se o formato Markdown esteja válido, para garantir que o material está alinhado com as boas práticas.

Tarefas:

  • Escolher qual Markdown linter será usado.
  • Configurar GitHub Actions workflow para rodar o linter.

Colocar instruções para criar rotas

em alguns casos (oc new-app) a rota é criada automaticamente e em alguns não é criada. Creio que devamos adicionar um oc expose explicito após o oc new-app

[2.1.1 - Acesso ao ambiente] Throubleshooting

Adicionar o seguinte comando para limpeza total do ambiente em casos de necessidade de reinstalação do oc cluster up

for m in $(mount | grep openshift | awk '{print $3}'); do umount $m; done

Lab Binary deployment precisa importar o Image Stream do EAP

   oc create -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/eap/eap71-image-stream.json
   
   oc create -f https://raw.githubusercontent.com/jboss-openshift/application-templates/master/secrets/eap7-app-secret.json
   
   oc new-build --image-stream=jboss-eap71-openshift:latest --binary=true --name=binary-deployment
   oc get bc

Capítulo sobre Developer Experience (DevX)

Tópicos:

  • Automação de Builds (Source-to-Image, BuildConfig, Developer Catalog)
  • Automação de Deploy (Deployment/DeploymentConfig)
  • Exposição de serviços (Ingress/Route, Service)
  • Estratégias de release (rolling, recreate)
  • Manipulação de parâmetros externos (ConfigMaps, Secrets)

[2.2.1 Canary Release] Alteração do comando oc new-app

Nos comandos que seguem logo após o texto "Crie uma nova app usando a versão do Branch 3.0 que acabamos de criar usando o comando", alterar o comando oc new-app conforme abaixo:

oc new-app --name=workshop-ocp-v3 https://github.com/<username>/workshop-openshift.git#v3.0
 --strategy=source

Remover TODOS

Tá feio esses TODOs no meio do workshop...

Sugiro substituir por issue aqui no gitbhub e aplicar label de Enhacement

Criar lab de CronJob

Luciano fez para algum cliente um exemplo de cronjob.

1 - Cria alpine com curl

FROM alpine
RUN apk add --no-cache curl
ENTRYPOINT ["/usr/bin/curl"]

2 - publica no docker.io

3 - Cria cronjob com a imagem

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjobcurl
spec:
  schedule: "*/1 * * * *"  
  jobTemplate:             
    spec:
      template:
        metadata:
          labels:          
            parent: "cronjobcurl"
        spec:
          containers:
          - name: curljob
            image: docker.io/lasher/alpinecurl
            command: ["curl",  "-v", "http://phpapp:8080"]
          restartPolicy: OnFailure

Sugiro utilizar isso como base para uma criação do lab de cronjob

novos cenários para a parte 1 - Docker

Penso em adicionar os seguintes cenários na parte 1 de linux containers:

cat /etc/redhat-release

uname -a

docker version
docker images

docker run -d busybox /bin/sh -c "while true; do echo 'i love linux containers'; sleep 5s; done"
docker ps
docker logs -f <containerId>
docker stop <containerId>
docker ps -a
docker start <containerId>
docker ps -a
docker inspect <containerId> | more

docker run -ti --rm --name my_container ubuntu:14.04 /bin/bash

	lsb_release -a
	cat /etc/debian_version
	ip a
	top
	df -h
	touch /DEMO.txt
	exit

docker run -ti --rm --name my_container ubuntu:14.04 /bin/bash
	ls -la /
	cat /DEMO.txt
	touch /DEMO.txt

docker commit -m "persistindo mudança no disco do container" my_container ubuntu:alterado

docker run -ti --rm --name my_container ubuntu:alterado /bin/bash
	ls -la /
	cat /DEMO.txt

docker run -ti --rm --name my_java -v /tmp/share:/tmp/share ubuntu:14.04 /bin/bash

docker stats

docker top <container_name>

docker ps

Atualmente estamos usando um container centos em cima de uma vm centos.... Mostrar outra distro em cima de um centos é mais interessante.

Adicionar um tópico de referencias adicionais para continuar os estudos

copiado do último workshop realizado em Aracaju-SE:

#Red Hat Test Drive em Aracaju-SE

##Pra quem quiser aprofundar em Kubernetes

   * \url{https://github.com/kelseyhightower/kubernetes-the-hard-way}
\url{https://blog.openshift.com/getting-any-docker-image-running-in-your-own-openshift-cluster/}


#Slides Red Hat


   * \url{http://bit.ly/rh-ocp-msa-slides}
##**Links e referências:**
    
\url{https://www.opencontainers.org/}
\url{https://hub.docker.com}
Why you’re going to FAIL running Java   \url{https://docs.google.com/presentation/d/1SSf5BX22TwAMwCgGtjKdACvvztXlXEW9XG3OttNsfGg/edit#slide=id.g1e56d4b0f2\_0\_260}
Jenkins Pipeline: \url{https://jenkins.io/doc/book/pipeline/}
Os slides da apresentação estão disponíveis no Google Drive: \url{http://bit.ly/rh-ocp-msa-slides}

##Continuando os Estudos:
    
    Segue um tutorial online produzido pelo time do Openshift para facilitar a iniciação de Desenvolvedores na plataforma de Containers da Red Hat:

\url{https://learn.openshift.com/}

Outros recursos para o time de Dev:

Openshift no seu laptop: Red Hat Container Development KIT (CDK)
o CDK é um ambiente Openshift com Docker em sua estação de trabalho local para começar a desenvolver serviços utilizando containers Docker orquestrados pelo Openshift.

Baixe os eBooks gratuitos sobre Microservices criados pela Red Hat
\url{https://developers.redhat.com/promotions/microservices-for-java-developers/}
\url{https://developers.redhat.com/promotions/migrating-to-microservice-databases/}

Blog developers.redhat.com

Guia 12factor (\url{https://12factor.net/pt\_br/)} - boas práticas para "containerização" de Aplicações

##Treinamentos online e gratuitos disponibilizados pela Red Hat:

An overview of deploying applications and containers: \url{https://www.redhat.com/en/services/training/do080-deploying-containerized-applications-technical-overview?sc\_cid=70160000000q57bAAA}

Identify the proper frameworks and tools to build your microservices architecture: \url{https://www.redhat.com/en/services/training/do092-developing-cloud-native-applications-microservices-architectures}

Learn the basics of Ansible automation and configuration management, and more: \url{https://www.redhat.com/en/services/training/do007-ansible-essentials-simplicity-automation-technical-overview}

Certificação: \url{https://www.redhat.com/en/services/training/ex283-red-hat-certified-enterprise-microservices-developer-exam}

**Repasse aos demais interessados!!!**

Test Drive de um dia

A ideia dessa issue, é discutir como podemos simplificar o test drive para que seja executado somente em um único dia. Acho que o primeiro passo é ver qual lab tem dependencias com outros labs.

[2.2.1 Canary Release] Trocar as referencia de php para ocp

Durante alterações que foram feitas no lap há um tempo atrás, ficaram algumas referencias ao recurso antigo chamado workshop-php. Todos os labs usam workshop-ocp. Então seria necessário trocar tudo que é php por ocp.
Um ctrl f na página já mostra que tem muita referencia ao php. Além disso, precisamos trocar os gifs. Mas acredito que essa última parte das imagens pode ser feito depois

[2.1.12 - Pipeline] Colocar um exemplo mais completo de pipeline

Além do exemplo de pipeline que já existe, acho que seria interessante adicionar um outro exemplo com promoção de ambientes no mesmo lab. Esse exemplo mais completo pode ser opcional.

Exemplo:

node('maven') {
	def app = 'app'
	def cliente = 'cliente'
	def gitUrl = 'http://gogs-ci-cd.apps.example.com/gogsadmin/' + cliente + '.git'

    stage 'Build image and deploy to dev'
    echo 'Building docker image'
    buildApp(app + '-dev', gitUrl, app)

    stage 'Deploy to QA'
    echo 'Deploying to QA'
    deploy(app + '-dev', app + '-qa', app)

    stage 'Wait for approval'
    input 'Aprove to production?'

    stage 'Deploy to Prod'
    deploy(app + '-dev', app, app)
}

def buildApp(String project, String gitUrl, String app){
    projectSet(project)

    sh "oc new-build php:7.1~${gitUrl} --name=${app} -n ${project}"
    sh "oc logs -f bc/${app} -n ${project}"
    sh "oc new-app ${app} -n ${project}"
    sh "oc expose service ${app} -n ${project} || echo 'Service already exposed'"
    sh "sleep 10"
}

def projectSet(String project) {
	sh "oc login --insecure-skip-tls-verify=true -u myuser -p mypass https://ocp-master.example.com:8443"
    sh "oc new-project ${project} || echo 'Project exists'"
    sh "oc project ${project}"
}

def deploy(String origProject, String project, String app){
    projectSet(project)
    sh "oc policy add-role-to-user system:image-puller system:serviceaccount:${project}:default -n ${origProject}"
    sh "oc tag ${origProject}/${app}:latest ${project}/${app}:latest"
    appDeploy(app, project)
}

def appDeploy(String app, String project){
    sh "oc new-app ${app} -l app=${app} -n ${project} || echo 'Aplication already Exists'"
    sh "oc expose service ${app} -n ${project} || echo 'Service already exposed'"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.