Installer OpenShift dans un container avec Weave Footloose

Dans ce tutoriel, nous allons installer OpenShift dans un conteneur en utilisant un outil appelé footloose par Weaveworks. Footloose est un outil construit par Weaveworks qui construit et exécute un conteneur avec systemd installé. Il peut être créé d'une manière similaire à une machine virtuelle mais plus facilement.
J'ai écrit ce tutoriel parce que je voulais un environnement léger pour tester OpenShift Origin 3.10. Minishift est une autre distribution pour les tests, qui vous permet également d'exécuter OpenShift localement, mais dans une machine virtuelle beaucoup plus lourde.
OpenShift : Le monde du « Container-as-a-service » (CaaS)
OpenShift propose pour sa part une approche « Container-as-a-service ». L’intérêt des plateformes de conteneurs est d’éviter l’interférence de services, en utilisant l’isolation proposée par ces technologies.

OpenShift est une plateforme de conteneurs d’applications open source, principalement basée sur Docker et orchestrée à l’aide de la gestion des clusters de conteneurs Kubernetes, qui est en charge du démarrage et du « scaling » des conteneurs.OpenShift propose également des objets de configuration plus poussés comme :
- Construire des images
- Intégrer un registre privé paramétrable pour séparer les images par projet
- Proposer une interface utilisable par un « non-administrateur »
- Proposer des routeurs vers les applications
- Gérer les droits, restriction, authentification, etc…
- Et bien d’autres...
De nouvelles fonctionnalités améliorent ou accélèrent une stratégie DevTestOps :
- la gestion d’environnements cloisonnés (Dev/Test/Pré-Prod/Prod) & provisioningle
- templating d’applications pour démarrer plusieurs applications (reliées entre elles ou non) en passant par un formulaire afin de configurer différentes options. Par exemple, le nom des services, les ressources à allouer, l’authentification, la localisation des sources, etc…
Installer Footloose
Vous pouvez utiliser une machine Linux ou un hôte MacOS pour ce didacticiel. ARM et Raspberry Pi ne sont pas pris en charge.
Suivez les instructions sur le site officiel: https://github.com/weaveworks/footloose
Créer une config :
cluster:
name: cluster
privateKey: cluster-key
machines:
- count: 1
spec:
image: quay.io/footloose/centos7:0.3.0
name: os%d
privileged: true
portMappings:
- containerPort: 22
- containerPort: 8443
hostPort: 8443
- containerPort: 53
hostPort: 53
- containerPort: 443
hostPort: 443
- containerPort: 80
hostPort: 80
volumes:
- type: volume
destination: /var/lib/docker
Notez les ports supplémentaires 8443 et 53 utilisés par OpenShift Origin, puis 80 et 443 sont destinés à exposer vos projets. Si vous avez déjà des services liés à 80/443, vous pouvez commenter ces lignes.
Démarrez le conteneur CentOS :
footloose create
Démarrer un root shell :
footloose ssh root@os0
Configurer Docker
- Installer et démarrer Docker mise à jour :
yum check-update ; \
curl -fsSL https://get.docker.com/ | sh
- Ajouter un registre non-sécurisé
Trouvez le sous-réseau:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 92550 bytes 135424927 (129.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43641 bytes 2425139 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- Créer
/etc/docker/daemon.json
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": [
"172.17.0.0/16"
]
}
EOF
- Maintenant enable/start Docker
systemctl daemon-reload \
&& systemctl enable docker \
&& systemctl start docker
Installer OpenShift
Chopez les outils OpenShift
- Trouvez la dernière URL sur: https://www.okd.io/download.html
wget https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz \
&& tar -xvf openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz \
&& rm -rf openshift-origin-client-tools-v3.11.0-0cbc58b-linux-64bit.tar.gz \
&& mv open* openshift
- Rendre
oc
disponible viaPATH
export PATH=$PATH:`pwd`/openshift
- Authentification sur le hub Docker
docker login
- Installer OpenShift
oc cluster up --skip-registry-check=true
Cela prendra quelques minutes.
Si vous voyez une erreur/un délai d'expiration sur run_self_hosted.go: 181] En attendant que le kube-apiserver soit prêt, exécutez à nouveau la commande jusqu'à ce qu'elle passe.
Si cela ne fonctionne toujours pas comme pour moi, j'obtient ce message sur le terminal de mon Mac dans la VM CentOS Footloose :
Getting a Docker client ...
Checking if image openshift/origin-control-plane:v3.11 is available ...
Pulling image openshift/origin-control-plane:v3.11
Pulled 1/5 layers, 21% complete
Pulled 2/5 layers, 45% complete
Pulled 2/5 layers, 53% complete
Pulled 2/5 layers, 61% complete
Pulled 3/5 layers, 76% complete
Pulled 3/5 layers, 85% complete
Pulled 3/5 layers, 90% complete
Pulled 4/5 layers, 93% complete
Pulled 4/5 layers, 99% complete
Pulled 5/5 layers, 100% complete
Extracting
Image pull complete
Pulling image openshift/origin-cli:v3.11
Image pull complete
Pulling image openshift/origin-node:v3.11
Pulled 5/6 layers, 84% complete
Pulled 5/6 layers, 92% complete
Pulled 5/6 layers, 97% complete
Pulled 6/6 layers, 100% complete
Extracting
Image pull complete
Creating shared mount directory on the remote host ...
Determining server IP ...
Checking if OpenShift is already running ...
Checking for supported Docker version (=>1.22) ...
Checking if required ports are available ...
Checking if OpenShift client is configured properly ...
Checking if image openshift/origin-control-plane:v3.11 is available ...
Starting OpenShift using openshift/origin-control-plane:v3.11 ...
I0111 16:27:39.942105 412 config.go:40] Running "create-master-config"
I0111 16:27:43.148996 412 config.go:46] Running "create-node-config"
I0111 16:27:44.578463 412 flags.go:30] Running "create-kubelet-flags"
I0111 16:27:45.241205 412 run_kubelet.go:49] Running "start-kubelet"
I0111 16:27:45.487324 412 run_self_hosted.go:181] Waiting for the kube-apiserver to be ready ...
I0111 16:29:04.439770 412 interface.go:26] Installing "kube-proxy" ...
I0111 16:29:04.439833 412 interface.go:26] Installing "kube-dns" ...
I0111 16:29:04.439864 412 interface.go:26] Installing "openshift-service-cert-signer-operator" ...
I0111 16:29:04.439889 412 interface.go:26] Installing "openshift-apiserver" ...
I0111 16:29:04.439939 412 apply_template.go:81] Installing "kube-proxy"
I0111 16:29:04.440007 412 apply_template.go:81] Installing "openshift-apiserver"
I0111 16:29:04.440187 412 apply_template.go:81] Installing "kube-dns"
I0111 16:29:04.440388 412 apply_template.go:81] Installing "openshift-service-cert-signer-operator"
I0111 16:29:08.752025 412 interface.go:41] Finished installing "kube-proxy" "kube-dns" "openshift-service-cert-signer-operator" "openshift-apiserver"
Error: timed out waiting for the condition
"Error : timed out waiting for the condition" - voici comment résoudre le problème.
Sur Github la solution est trouvée en appliquant cette modification :
Configure the Docker daemon with an insecure registry parameter of 172.30.0.0/16
or edit the /etc/docker/daemon.json
file and add the following:{ "insecure-registries": [ "172.30.0.0/16" ] }
After editing the config, reload systemd and restart the Docker daemon.
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
Soit en français, éditer le fichier /etc/docker/daemon.json
vu tout à l'heure, et au lieu de :
"172.17.0.0/16"
Ajoutez plutôt :
"172.30.0.0/16"
Puis redémarrer Docker.
Une fois terminé, vous verrez :
Login to server ...
Creating initial project "myproject" ...
Server Information ...
OpenShift server started.
The server is accessible via web console at:
https://127.0.0.1:8443
You are logged in as:
User: developer
Password: <any value>
To login as administrator:
oc login -u system:admin
Si docker ps :
[root@os0 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3b41ddb0a15 openshift/origin-hyperkube "hyperkube kube-sche…" 2 minutes ago Up 2 minutes k8s_scheduler_kube-scheduler-localhost_kube-system_4ef8f106363f096042914d25f095c7f5_2
25953cd85cba openshift/origin-hyperkube "hyperkube kube-cont…" 3 minutes ago Up 3 minutes k8s_controllers_kube-controller-manager-localhost_kube-system_9d8ef32be31e9a6172eb7ab20224f293_3
60fba272b485 openshift/origin-service-serving-cert-signer "service-serving-cer…" 5 minutes ago Up 5 minutes k8s_operator_openshift-service-cert-signer-operator-6d477f986b-jh5zl_openshift-core-operators_a13c5355-348f-11ea-8ebc-0242f2ba64cf_2
2847a872d436 openshift/origin-hypershift "hypershift openshif…" 6 minutes ago Up 5 minutes k8s_c_openshift-controller-manager-m7lzd_openshift-controller-manager_2b551c5c-3492-11ea-96b4-0242f2ba64cf_1
62d6e7a03854 openshift/origin-hypershift "hypershift experime…" 6 minutes ago Up 5 minutes k8s_operator_openshift-web-console-operator-664b974ff5-n72vz_openshift-core-operators_37e7992c-3492-11ea-96b4-0242f2ba64cf_1
13b045796f81 openshift/origin-docker-registry "/bin/sh -c '/usr/bi…" 19 hours ago Up 19 hours k8s_registry_docker-registry-1-9dxql_default_45a12835-3492-11ea-96b4-0242f2ba64cf_0
d8b08806f503 be30b6cce5fa "/usr/bin/origin-web…" 19 hours ago Up 19 hours k8s_webconsole_webconsole-8496965cf8-c8qdg_openshift-web-console_675c23e0-3492-11ea-96b4-0242f2ba64cf_0
e2838f46994e openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_webconsole-8496965cf8-c8qdg_openshift-web-console_675c23e0-3492-11ea-96b4-0242f2ba64cf_0
c66e1cba73fb openshift/origin-haproxy-router "/usr/bin/openshift-…" 19 hours ago Up 19 hours k8s_router_router-1-nq4jm_default_425e7513-3492-11ea-96b4-0242f2ba64cf_0
76ce0bb11664 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_docker-registry-1-9dxql_default_45a12835-3492-11ea-96b4-0242f2ba64cf_0
c36e55b2e29b openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_router-1-nq4jm_default_425e7513-3492-11ea-96b4-0242f2ba64cf_0
9f801747c522 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_openshift-web-console-operator-664b974ff5-n72vz_openshift-core-operators_37e7992c-3492-11ea-96b4-0242f2ba64cf_0
ea69cbe90cd4 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_openshift-controller-manager-m7lzd_openshift-controller-manager_2b551c5c-3492-11ea-96b4-0242f2ba64cf_0
d7be7d977db8 openshift/origin-control-plane "openshift start net…" 19 hours ago Up 19 hours k8s_kube-dns_kube-dns-bvrhs_kube-dns_a14b1137-348f-11ea-8ebc-0242f2ba64cf_1
a0cf3571910b openshift/origin-hypershift "hypershift openshif…" 19 hours ago Up 19 hours k8s_apiserver_openshift-apiserver-rbvcn_openshift-apiserver_a152308e-348f-11ea-8ebc-0242f2ba64cf_1
cc4b59c0d0e1 47dadf9d43b6 "service-serving-cer…" 19 hours ago Up 19 hours k8s_service-serving-cert-signer-controller_service-serving-cert-signer-668c45d5f-ksk7k_openshift-service-cert-signer_1cfecdbf-3490-11ea-8ebc-0242f2ba64cf_1
f18449730d6c openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_openshift-service-cert-signer-operator-6d477f986b-jh5zl_openshift-core-operators_a13c5355-348f-11ea-8ebc-0242f2ba64cf_1
944cfc78057e openshift/origin-control-plane "openshift start net…" 19 hours ago Up 19 hours k8s_kube-proxy_kube-proxy-pzcft_kube-proxy_a145ac27-348f-11ea-8ebc-0242f2ba64cf_1
fe80d4f25359 47dadf9d43b6 "service-serving-cer…" 19 hours ago Up 19 hours k8s_apiservice-cabundle-injector-controller_apiservice-cabundle-injector-8ffbbb6dc-86qc6_openshift-service-cert-signer_1e4b4396-3490-11ea-8ebc-0242f2ba64cf_1
bceaa2ebbb28 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_service-serving-cert-signer-668c45d5f-ksk7k_openshift-service-cert-signer_1cfecdbf-3490-11ea-8ebc-0242f2ba64cf_1
80f2dcfc3c22 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_kube-dns-bvrhs_kube-dns_a14b1137-348f-11ea-8ebc-0242f2ba64cf_1
f613158cb93a openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_openshift-apiserver-rbvcn_openshift-apiserver_a152308e-348f-11ea-8ebc-0242f2ba64cf_1
3c6d5cc20d7f openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_apiservice-cabundle-injector-8ffbbb6dc-86qc6_openshift-service-cert-signer_1e4b4396-3490-11ea-8ebc-0242f2ba64cf_1
2ef6385a7a42 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_kube-proxy-pzcft_kube-proxy_a145ac27-348f-11ea-8ebc-0242f2ba64cf_1
d901e42f4dd7 openshift/origin-control-plane "/bin/bash -c '#!/bi…" 19 hours ago Up 19 hours k8s_etcd_master-etcd-localhost_kube-system_ba9cb7def03e8999d29d4865e7f5f36d_1
6a7718df851f openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_kube-scheduler-localhost_kube-system_4ef8f106363f096042914d25f095c7f5_1
b0ff3d0d89d7 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_kube-controller-manager-localhost_kube-system_9d8ef32be31e9a6172eb7ab20224f293_1
e79bcce794b4 openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_master-etcd-localhost_kube-system_ba9cb7def03e8999d29d4865e7f5f36d_1
5f130f40975a openshift/origin-pod:v3.11 "/usr/bin/pod" 19 hours ago Up 19 hours k8s_POD_master-api-localhost_kube-system_8cda1a8c2c68f3ba79679f97a0b11d4f_1
2a6926abd5e5 openshift/origin-node:v3.11 "hyperkube kubelet -…" 19 hours ago Up 19 hours origin
Vous pouvez maintenant installer l'outil oc sur votre machine hôte ou accéder au portail via https://127.0.0.1:8443 sur l'hôte.

Testez votre cluster OpenShift
Installons une image Docker compatible K8s évidemment. OpenShift est en fait une distribution de Kubernetes, donc avec quelques tests et ajustements, tout devrait fonctionner presque immédiatement.
Démarrez un projet :
[root@os0 ~]# oc new-project my-project
Now using project "my-project" on server "https://127.0.0.1:8443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app centos/ruby-25-centos7~https://github.com/sclorg/ruby-ex.git
to build a new example application in Ruby.
Vous pouvez essayer de créer un nouveau projet, en exécutant
oc new-project <nomprojet>
Pour créer un nouveau projet appelé myproject, exécutez la commande:
oc new-project myproject
Vous devriez voir un résultat similaire à:
Now using project "myproject" on server "https://openshift:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app django-psql-example
to build a new example application in Python. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Basculez vers la console et connectez-vous à la console Web OpenShift en utilisant les mêmes informations d'identification que vous avez utilisées ci-dessus.

Cliquez sur monprojet et vous devriez alors être sur la page Présentation du projet. Sélectionnez la perspective Développeur pour le projet au lieu de la perspective Administrateur dans le menu de gauche. Si nécessaire, cliquez sur l'icône du menu hamburger en haut à gauche de la console Web pour afficher le menu de gauche.
Étant donné que le projet est actuellement vide, aucune charge de travail ne doit être trouvée et différentes options vous seront présentées pour déployer une application.

Dans la vue Topologie, sélectionnez Image conteneur. Cela devrait présenter la possibilité de déployer une image en effectuant une recherche de l'image sur un registre d'images.

Pour cet exemple, l'image d'application que nous allons déployer est hébergée sur le Docker Hub Registry. Dans le champ Nom de l'image, entrez: openshiftkatacoda/blog-django-py Appuyez sur Entrée ou cliquez sur la loupe à droite du champ. Cela devrait déclencher une requête pour extraire les détails de l'image du Docker Hub Registry, y compris des informations sur la dernière mise à jour de l'image, la taille de l'image et le nombre de couches.
À partir du nom de l'image, les champs Nom de l'application et Nom du déploiement seront automatiquement remplis. Le nom de déploiement est utilisé dans OpenShift pour identifier les ressources créées lors du déploiement de l'application. Cela inclura le nom de service interne utilisé par d'autres applications du même projet pour communiquer avec lui, ainsi que le nom d'hôte par défaut de l'application lorsqu'elle est exposée en externe au cluster via une route. Le champ Nom de l'application est utilisé pour regrouper plusieurs déploiements sous le même nom dans le cadre d'une application globale.
Dans cet exemple, laissez les deux champs comme valeurs par défaut. Pour votre propre application, vous pourriez envisager de les remplacer par quelque chose de plus approprié. Au bas de cette page, vous verrez que la case à cocher pour créer un itinéraire vers l'application est cochée. Cela indique que l'application recevra automatiquement une URL publique pour y accéder. Si vous ne souhaitez pas que le déploiement soit accessible en dehors du cluster, ou s'il ne s'agit pas d'un service Web, vous devez désélectionner l'option. Lorsque vous êtes prêt, cliquez en bas de la page sur Créer. Cela vous ramènera à la vue Topologie, mais cette fois, vous verrez une représentation du déploiement, plutôt que les options de déploiement d'une application.

Pour explorer et obtenir plus de détails sur le déploiement, cliquez au milieu de l'anneau. Cela entraînera un panneau coulissant du côté droit donnant accès à la fois à un aperçu:

Dans la vue d'ensemble du déploiement, vous pouvez ajuster le nombre de répliques ou de pods en cliquant sur les flèches haut et bas à droite de l'anneau. L'URL publique pour accéder à l'application se trouve sous Ressources. Si vous fermez le panneau, vous pouvez également accéder à l'application via son URL publique, en cliquant sur l'icône de raccourci URL sur la visualisation du déploiement.

Et voilà !