# 🇫🇷 Code Ready Containers - 1er contact
Aujourd'hui, je vous explique comment je vais tester et utiliser Code Ready Containers. Par la suite je vais l'appeler CRC.
CRC est le successeur de MiniShift, il vous permet d'avoir sur votre machine un mono-cluster OpenShift v 4.x
pour vous familiariser avec la plateforme.
- ⚠️ Attention, vous avez besoin d'une machine plutôt "costaude" pour le faire tourner (surtout si vous faites tourner d'autres applications en même temps): 4 virtual CPUs (vCPUs), 8 GB de RAM et 35 GB de place disque
- Pour le moment je vais tester directement sur un Mac "sur vitaminé", plus tard je le ferais sur un NUC.
- CRC exécute OpenShift dans une VM
- je vais créer une seconde VM pour passer les commandes à mon cluster OpenShift comme si je l'appelais d'une machine distante (mais vous pouvez très bien le faire en local)
# Installation
L'équipe CRC a fait du très bon boulot, le setup est plutôt facile à dérouler et vous obtenez assez rapidement un cluster fonctionnel sur votre machine.
La procédure d'installation est ici: GETTING STARTED WITH RED HAT CODEREADY CONTAINERS (opens new window)
# Tips si problème au démarrage
Pour le moment je fais mes tests sur un Mac. Une fois CRC installé, pour le démarrer il faut lancer la commande crc start
. J'ai eu un message qui m'expliquait qu'il y avait un problème réseau, j'ai résolu mon problème de la façon suivante:
- j'ai lancé un
ping api.crc.testing
et j'ai obtenu l'IP de la VM CRC (dans mon cas192.168.64.2
) - ensuite j'ai ajouté ceci dans mon fichier
hosts
:
192.168.64.2 api.crc.testing oauth-openshift.apps-crc.testing console-openshift-console.apps-crc.testing
- puis j'ai relancé mon cluster et tout allait beaucoup mieux
# Lancement
C'est simple, il suffit d'utiliser la commance crc start
, et de patientez (vous lancez quand même un cluster OpenShift, pas une webapp NodeJS)
La sortie dans votre terminal devrait ressembler à ceci:
INFO Checking if running as non-root
INFO Checking if oc binary is cached
INFO Checking if HyperKit is installed
INFO Checking if crc-driver-hyperkit is installed
INFO Checking file permissions for /etc/resolver/testing
INFO Checking file permissions for /etc/hosts
INFO Starting CodeReady Containers VM for OpenShift 4.2.8...
INFO Verifying validity of the cluster certificates ...
INFO Network restart not needed
INFO Check internal and public DNS query ...
INFO Starting OpenShift cluster ... [waiting 3m]
INFO
INFO To access the cluster, first set up your environment by following 'crc oc-env' instructions
INFO Then you can access it by running 'oc login -u developer -p developer https://api.crc.testing:6443'
INFO To login as an admin, username is 'kubeadmin' and password is UMeRe-hBQAi-JJ4Bi-8ynRD
INFO
INFO You can now run 'crc console' and use these credentials to access the OpenShift web console
Donc c'est sympa, on vous explique comment vous connecter, on vous donne les credentials, etc... et on vous explique comment paramétrer votre poste pour pouvoir utiliser la CLI oc
.
Dans mon cas je vais faire un petit peu autrement, je vais me créer une VM (j'utilise Vagrant et VirtualBox, mais vous pouvez très bien faire autrement) pour simuler l'utilisation de la CLI oc
à partir d'une machine distante.
# Préparation de la VM "Cliente"
# Création de la VM
J'ai tout d'abord créé un dossier sandbox-vm-tests
(mais appelez le comme vous voulez) et dans ce dossier j'ai créé un sous-dossier projects
qui me permettra d'échanger des données entre ma VM et mon MAC (la machine hôte).
Ensuite dans sandbox-vm-tests
j'ai créé un fichier Vagrantfile
avec le contenu suivant:
SANDBOX_NAME="sandbox-vm-tests"
OPENSHIFT_IP="192.168.64.2"
OPENSHIFT_DOMAIN="api.crc.testing oauth-openshift.apps-crc.testing console-openshift-console.apps-crc.testing"
BOX_IMAGE = "bento/ubuntu-18.04"
Vagrant.configure("2") do |config|
config.vm.box = BOX_IMAGE
ENV['LC_ALL']="en_US.UTF-8"
config.vm.define "#{SANDBOX_NAME}" do |node|
node.vm.synced_folder "./projects", "/home/vagrant/projects", id:"projects"
node.vm.hostname = "#{SANDBOX_NAME}"
node.vm.provider "virtualbox" do |vb|
vb.memory = 512
vb.cpus = 1
vb.name = "#{SANDBOX_NAME}"
end
node.vm.provision "hosts-file", privileged: true, type: "shell" , inline: <<-SHELL
# Add entries to hosts file:
echo "" >> /etc/hosts
echo '#{OPENSHIFT_IP} #{OPENSHIFT_DOMAIN}' >> /etc/hosts
echo "" >> /etc/hosts
SHELL
end
end
⚠️ Les parties importantes sont:
OPENSHIFT_IP="192.168.64.2"
soyez sûrs de mettre la bone IP
echo '#{OPENSHIFT_IP} #{OPENSHIFT_DOMAIN}' >> /etc/hosts
c'est ce qui permettra à votre VM de "voir" votre cluster sur le réseau
node.vm.synced_folder "./projects", "/home/vagrant/projects", id:"projects"
cela permet de créer un dossier
projects
partagé entre la VM et la machine hôte
Pour lancer la construction de la VM, dans le dossier sandbox-vm-tests
, lancer la commande vagrant up
et attendez un petit peu. Au bout de quelques minutes vous avez une VM toute neuve et opérationnelle
# Installation de la CLI dans la VM
remarque: j'aurais pu scripter cette partie dans le Vagrantfile
Connectez vous en SSH à votre VM (vagrant ssh
) et tapez les commandes suivantes:
curl -o oc.tar.gz https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/linux/oc.tar.gz
tar -xf oc.tar.gz
sudo mv oc /usr/local/bin/oc
rm oc.tar.gz
Maintenant nous allons nous connecter à notre cluster (toujours à partir de la VM):
oc login -u developer -p developer https://api.crc.testing:6443
Vous devriez obtenir ce message:
The server uses a certificate signed by an unknown authority.
You can bypass the certificate check, but any data you send to the server could be intercepted by others.
Use insecure connections? (y/n):
Repondez y
et validez, et vous allez obtenir un Login successful.
👏 🎉
# Déployer sa première webapp
# Créer l'application
Dans le dossier projects
créez un sous dossier hello-world
qui contiendra notre webapp (faites le à partir de la machine hôte, ce sera plus simple). Notre application sera composée des fichiers suivants (c'est une application nodejs toute simple):
.
├── index.js
└── package.json
Le contenu de package.json
est le suivant:
{
"name": "hello-world",
"main": "index.js",
"scripts": {
"start": "node index.js"
}
}
Le contenu de index.js
est le suivant:
const http = require('http')
const port = 8080
let index_page = `
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Hello World!</title>
</head>
<body>
<h1>
👋 Hello World 🌍
</h1>
</body>
</html>
`
const requestHandler = (request, response) => {
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
response.end(index_page)
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
if (err) {
return console.log('😡 something bad happened', err)
}
console.log(`🌍 server is listening on ${port}`)
})
⚠️ Sauvegardez tout, et "retournez" dans votre VM en SSH.
# Déploiement
Pour créer/déployer une application dans OpenShift, vous devez d'abord créer un projet dans OpenShift. Donc nous allons créer un projet my-project
qui pourra "héberger" nos webapps.
cd projects/hello-world
oc login -u developer -p developer https://api.crc.testing:6443
oc new-project my-project
Vous deriez avoir le message suivant:
Now using project "my-project" on server "https://api.crc.testing:6443".
pour se "positionner" sur un projet existant, il suffit d'utiliser la commande
oc project nom-du-projet
Et maintenant, utilisez les commandes suivantes pour déployer votre webapp à partir de votre code source:
export APP_NAME="hello-world"
oc new-app . --name=$APP_NAME
oc start-build $APP_NAME --from-dir=. --follow
oc expose service $APP_NAME
Patientez un peu ... Une fois que vous obtenez le message route.route.openshift.io/hello-world exposed
, tapez la commande suivante: oc get routes $APP_NAME
, et vous allez obtenir ceci:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
hello-world hello-world-my-project.apps-crc.testing hello-world 8080-tcp None
Ce qui signifie que vous pouvez maintenant atteindre votre webapp avec cette url http://hello-world-my-project.apps-crc.testing/ (opens new window)
Ce n'est pas plus compliqué que ça. Encore 👏 à l'équipe de Code Ready Containers!
La suite de ce blog post expliquera comment redéployer "à la main", mais aussi avec GitLab CI. Et je bloguerais à chaque fois que j'avancerais un peu plus dans ma découverte de Code Ready Containers.
Bonne journée à tous 🙂
Last Articles
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇬🇧 Every GitLab Page deserves a real CI/CD | 2020-07-23 | GitLab CI
- 🇫🇷 Lit-Element, commencer doucement | 2020-07-20 | WebComponent
- 🇬🇧 Build quickly and host easily your Docker images with GitLab and GitLab CI | 2020-06-02 | GitLab CI
- 🇬🇧 Deploy quickly on Clever Cloud with GitLab CI | 2020-05-31 | GitLab CI
- 🇫🇷 Borg Collective, mes jouets pour apprendre Knative | 2020-05-30 | Knative
- 🇬🇧 Borg Collective, Toys to learn Knative | 2020-05-30 | Knative
- 🇫🇷 M5Stack, une petit device IOT bien sympathique, programmable en Python | 2020-05-09 | IOT
- 🇫🇷 Knative, l'outil qui rend Kubernetes sympathique | 2020-05-02 | kubernetes