Melhor resposta
OpenStack é infraestrutura como uma nuvem de serviço (IaaS). Ele fornece aos usuários uma interface para iniciar sistemas de cpu / memória / disco / rede específicos usando uma imagem baseada em um determinado sistema operacional (+ outras funcionalidades). O usuário final pode decidir como usar o sistema após o Openstack criar um sistema / vm. Ele / ela pode instalar algum aplicativo de sua escolha etc e executar sua carga de trabalho. O OpenStack oferece suporte a vários hipervisores de virtualização.
OpenShift é uma plataforma como serviço (PaaS) na nuvem. Ele oferece aos usuários uma interface para selecionar uma plataforma de aplicativo como jboss / python e executar diretamente sua carga de trabalho com o código / configuração específica do aplicativo a ser executado. Isso é implementado usando contêiner / pods. Pode-se usar o registro da Red Hat para contêineres testados / certificados ou usar docker register ou qualquer outro registro de terceiros também.
Resposta
Não há uma maneira de comparar porque eles são principalmente coisas diferentes. Dito isso, primeiro tentarei definir a necessidade de cada um deles e vinculá-los.
Vamos começar com o fim da pilha. Você precisa de infraestrutura para executar seus servidores. Com o que você poderia ir? Você pode usar um provedor de VPS como o DigitalOcean ou usar o AWS.
E se, por algum motivo não técnico, você não puder usar o AWS? Por exemplo, há uma conformidade legal que afirma que os dados que armazeno e os servidores que executo estão na mesma geografia dos clientes que atendo, e a AWS não tem uma região para os mesmos?
Este é onde o OpenStack entra. É uma plataforma para gerenciar sua infraestrutura. Pense nisso como uma implementação de código aberto da AWS que você pode executar em data centers bare metal.
A seguir, vamos subir na pilha. Queremos uma maneira eficiente de embalar e enviar nosso aplicativo. Considere um exemplo do mundo real onde você deseja mover uma quantidade fixa de carros, carvão e algodão do ponto A para o ponto B. Nós simplesmente não empilhamos todos eles no navio e o enviamos! Usamos containers. Um contêiner é uma unidade padronizada que fornece isolamento e embalagem adequados de suas mercadorias para que possam ser movimentadas com eficiência.
Fonte: Foto de contêineres em um navio de carga por Axel Ahoi (@axelahoi) em Unsplash
Docker é o software equivalente a um contêiner físico. Ele fornece isolamento e empacotamento para seus aplicativos. Você pode escalá-los facilmente. Existem muitas tecnologias de conteinerização, mas Docker é a dominante.
Você percebe que o Docker oferece muitas vantagens e começa a usá-lo mais. Você “contentoriza” seus aplicativos e os envia para a produção. Logo, você se depara com um novo problema. Como gerenciar todos esses containers de forma eficiente? Como posso orquestrar meus contêineres?
Fonte : Foto de ensaio da orquestra por Manuel Nägeli (@gwundrig) no Unsplash
Por que os containers precisam de orquestração em primeiro lugar? Provavelmente, você está lendo esta resposta em seu computador desktop, que executa um sistema operacional. Quando você abre o navegador, o sistema operacional aloca recursos como memória e capacidade de computação para o processo do navegador. Depois de um tempo, você muda as guias do navegador e, um momento depois, abre um novo programa. O sistema operacional faz muito trabalho árduo nos bastidores para que todos os seus processos recebam uma parte justa dos recursos de computação de que precisam. Precisamos de algo como um sistema operacional no nível de contêineres. Esta é a função exata que o Kubernetes desempenha.
Damos ao Kubernetes um conjunto de recursos de computação (chamados de nós) e carga de trabalho, como “Ei, crie e me dê 3 contêineres para executar este aplicativo PHP ”, e o Kubernetes se propõe a criar os referidos contêineres sobre meus recursos de computação existentes. Existem também outras soluções de orquestração de contêineres, como Docker swarm e Mesos.
O Kubernetes é para seu cluster o que um kernel do Linux é para seu sistema operacional. Assim como o kernel gerencia apenas os processos em seu sistema operacional, o Kubernetes gerencia apenas os contêineres. Para executar um sistema operacional completo, você precisa de muito mais, como usuários, permissões, drivers de dispositivo e outras coisas. Na mesma linha, o Kubernetes por si só tem utilidade limitada. Ele pode fornecer contêineres para você, se você fornecer uma especificação ou uma carga de trabalho. Como você cria seu contêiner antes de entregá-lo ao Kubernetes? Como você pode acionar automaticamente um novo provisionamento do Kubernetes depois de enviar o novo código? Existem muitas soluções criadas com base no Kubernetes para fazer isso. Você pode otimizá-los e conectá-los para atender às suas necessidades ou pode usar o OpenShift .
Fonte: Presente, arco, fita e foto HD de Natal de Ben White (@benwhitephotography) no Unsplash
OpenShift é uma distribuição do Kubernetes que combina todas essas guloseimas com o Kubernetes básico de uma forma organizada. O OpenShift é para o Kubernetes o que o Ubuntu é para o kernel do Linux. Não é uma “bifurcação” do Kubernetes, mas sim constrói sobre ele.
Se você quiser se aprofundar no que o OpenShift constrói sobre o Kubernetes, pode verificar minha postagem no tópico, OpenShift vs Kubernetes – Craft of Coding .