
Menu
- INSTALLATION OS
- CONFIGURATION SERVEUR
- CONFIGURATION DNS
- INSTALLATION DOCKER
- INSTALLATION BREEZE
- INTERFACE WEB
- CONTRÔLE
- DASHBOARD
- INSTALLATION TRAEFIK
- INSTALLATION HELM
- INSTALLATION Let’s Encrypt
- INSTALLATION Weave Scope
- DEBUG
Pour réaliser l'installation je me base sur une application Breeze.
- Breeze (Lien https://github.com/wise2c-devops/breeze/)
1. INSTALLATION OS
- sur tout les serveurs
- Démarrer le serveur
- boot sur cd ou ISO
- Sélectionner "Install Centos 7"
- Sélectionner en francais > Cliquer sur "Poursuivre"
- Sélectionner des logiciels > "Serveur d'infrastructure" sans aucune option
- Sélectionner de la sécurité > Désactivé SELINUX
- Sélectionner hôte et réseau > Choisir le nom de l'hôte
> Configurer le réseau
> Bien l'activer au démarrage
- Sélectionner de la destination > Choisir le volume disque
> Sélectionner le mode manuel
> faire en automatique
> revenir sur le partionnement et diminuer la partition /HOME
> Créer la partition /var/lib/docker la plus grosse possible
- Lancer l'installation
- Choisir le mot de passe ROOT
- A la fin reboot de la machine
Voici un tableau récapitulatif de l'infrastructure avec les fonctions et les adresses IP
| VIP | kubernetes | kubernetes.exemple.local | 192.168.1.100 |
| deploy | deploy.exemple.local | 192.168.1.236 | |
| harbor | harbor.exemple.local | 192.168.1.62 | |
| kmaster01 | kmaster01.exemple.local | 192.168.1.57 | |
| kmaster02 | kmaster02.exemple.local | 192.168.1.167 | |
| kmaster03 | kmaster03.exemple.local | 192.168.1.120 | |
| knode01 | knode01.exemple.local | 192.168.1.37 | |
| knode02 | knode02.exemple.local | 192.168.1.14 | |
| knode03 | knode03.exemple.local | 192.168.1.38 | |
| NAS | nas.exemple.local | 192.168.1.11 |
sur tout les serveurs
Nous contrôlons la configuration réseau et le nom d'hôte
yum install epel-release nfs-utils ntp ca-certificates python-pip net-snmp yum-utils -y
yum install nrpe nagios-plugins-users nagios-plugins-load nagios-plugins-swap nagios-plugins-disk nagios-plugins-procs -y
yum install fusioninventory-agent fusioninventory-agent-task-inventory -y
yum update -y && yum upgrade -y
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
systemctl stop firewall
ntpdc -l
Domain = exemple.local
Nous lançons le service en mode automatique pour chaque redémarrage
com2sec readonly default EN-TETE-PRIVEE
#com2sec readwrite default EN-TETE-PUBLIC
#group MyRWGroup usm readwrite
group ROGroup v1 readonly
informsink 10.59.1.11 EN-TETE-PRIVEE
# incl/excl subtree mask
view all included .1 80
view system included .iso.org.dod.internet.mgmt.mib-2.system
view system included .1.3.6.1.4.1.2021.11
view System included .1.3.6.1.2.1.1
view System included .1.3.6.1.2.1.25.1.1
####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:
# context sec.model sec.level match read write notif
access MyROSystem "" any noauth exact system none none
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
access ROGroup "" v1 noauth exact all none none
# -----------------------------------------------------------------------------
syslocation France (configure /etc/snmp/snmpd.local.conf)
syscontact Root <[email protected]> (configure /etc/snmp/snmpd.local.conf)
# Check the / partition and make sure it contains at least 10 megs.
disk / 10000
# MUCH more can be done with the snmpd.conf than is shown as an
# example here.
exec .1.3.6.1.4.1.2021.54 hdNum /usr/local/bin/snmpdiskio hdNum
exec .1.3.6.1.4.1.2021.55 hdIndex /usr/local/bin/snmpdiskio hdIndex
exec .1.3.6.1.4.1.2021.56 hdDescr /usr/local/bin/snmpdiskio hdDescr
exec .1.3.6.1.4.1.2021.57 hdInBlocks /usr/local/bin/snmpdiskio hdInBlocks
exec .1.3.6.1.4.1.2021.58 hdOutBlocks /usr/local/bin/snmpdiskio hdOutBlocks
Voici la ligne modifier
server = http://glpi.exemple.local/plugins/fusioninventory/
Nous créons le fichier pour rajouter des commande NRPE futur
Voici les lignes à rajouter
# COMMAND DEFINITIONS
# Syntax:
# command[]=
#
command[users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
command[load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
command[swap]=/usr/lib64/nagios/plugins/check_swap -w 20% -c 10%
command[root_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p / -m
command[usr_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /usr -m
command[var_disk]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /var -m
command[zombie_procs]=/usr/lib64/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[total_procs]=/usr/lib64/nagios/plugins/check_procs -w 190 -c 200
command[proc_named]=/usr/lib64/nagios/plugins/check_procs -w 1: -c 1:2 -C named
command[proc_crond]=/usr/lib64/nagios/plugins/check_procs -w 1: -c 1:5 -C crond
command[proc_syslogd]=/usr/lib64/nagios/plugins/check_procs -w 1: -c 1:2 -C syslog-ng
command[proc_rsyslogd]=/usr/lib64/nagios/plugins/check_procs -w 1: -c 1:2 -C rsyslogd
command[check_yum]=/usr/lib64/nagios/plugins/check_yum.py
Voici la ligne à modifier
systemctl restart snmpd && systemctl enable snmpd
systemctl restart nrpe && systemctl enable nrpe
systemctl restart fusioninventory-agent && systemctl enable fusioninventory-agent
sur le serveur DNS externe
Avoir créer les enregistrements DNS sur le serveur en powershell.
Add-DnsServerResourceRecordA -Name "deploy" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.236
Add-DnsServerResourceRecordA -Name "harbor" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.62
Add-DnsServerResourceRecordA -Name "kmaster01" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.57
Add-DnsServerResourceRecordA -Name "kmaster02" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.167
Add-DnsServerResourceRecordA -Name "kmaster03" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.120
Add-DnsServerResourceRecordA -Name "knode01" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.37
Add-DnsServerResourceRecordA -Name "knode02" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.14
Add-DnsServerResourceRecordA -Name "knode03" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.38
Add-DnsServerResourceRecordCName -Name "traefik-ui" -HostNameAlias kubernetes.exemple.local -ZoneName exemple.local
sur le serveur DEPLOY
Nous installons docker
curl -# -LO "https://releases.rancher.com/install-docker/18.06.sh"
chmod +x 18.06.sh && ./18.06.sh
curl -# -LO "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose
chmod +x docker-compose-Linux-x86_64
cp /opt/tools/docker-compose-install/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
sur le serveur DEPLOY
Création de la clé de sécurité
La déployé sur tout les serveurs
ssh-copy-id kmaster02
ssh-copy-id kmaster03
ssh-copy-id harbor
ssh-copy-id knode01
ssh-copy-id knode02
ssh-copy-id knode03

Nous créons le répertoire pour les sources
Téléchargement du fichier d'installation
nous lancons l'installations de Breeze
Nous pouvons enfin aller sur l'interface graphique
ou
6. INTERFACE WEB
Nous arrivons sur la page principal

Passer en Anglais

On valide en cliquant sur le bouton bleue

Nous pouvons commencer nous cliquons sur Start

Pour créer le cluster nous cliqosn sur le +

Nous lui donnons un nom et une description et nous validons sur Ok

Nous cliquons sur le cluster que nous venons de créer

Nous devons commencer par saisir l'ensemble des serveurs qui vont nous être utile

Nous obtenons une liste commence ci-dessous

Nous pouvons lancer l'installation en cliquant sur "Next step"
Nous devons saisir la fonction pour chaque d'entre eux.

la version de docker

Le paramétrage pour Harbor

Le paramétrage pour le loadbalancer (VIP)

Le paramétrage pour l'ETCD

Le paramétrage pour Kubernetes

Je ne procéde pas à l'installation de Prometheus car il n'a jamais fonctionné pour moi
Nous pouvons lancer l'installation en cliquant sur "Next step"

Lancer l'installation

Une fois terminé cliquer de "DONE"

Nous pouvons que l'installation c'est bien passé.

7. Controle
Nous pouvons controler que l'ensemble de l'installation est correcte avec les commande suivant





8. DASHBOARD
Pour obtenir le port du dashboard
ou
Pour obtenir le Token
9. INSTALLATION TRAEFIK
seulement sur kmaster01
Nous créons le répertoire pour les sources
apiVersion: v1
kind: Namespace
metadata:
name: traefik
labels:
name: traefik
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: traefik-ingress-controller
rules:
- apiGroups:
- ""
resources:
- pods
- services
- endpoints
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- ingresses
verbs:
- get
- list
- watch
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-ingress-controller
namespace: traefik
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: traefik-ingress-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: traefik-ingress-controller
subjects:
- kind: ServiceAccount
name: traefik-ingress-controller
namespace: traefik
---
apiVersion: v1
kind: ConfigMap
metadata:
name: traefik-conf
namespace: traefik
data:
traefik.toml: |
defaultEntryPoints = ["http","https"]
[web]
address = ":8080"
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: traefik-ingress-controller
namespace: traefik
labels:
k8s-app: traefik-ingress-lb
kubernetes.io/cluster-service: "true"
spec:
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
hostNetwork: true
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- image: traefik
name: traefik-ingress-lb
imagePullPolicy: Always
volumeMounts:
- mountPath: /config
name: traefik-config
args:
- --kubernetes
- --logLevel=INFO
- --configfile=/config/traefik.toml
volumes:
- name: traefik-config
configMap:
name: traefik-conf
---
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: traefik
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- port: 80
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: traefik
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: traefik-ui.exemple.local
http:
paths:
- backend:
serviceName: traefik-web-ui
servicePort: 80
---
10. INSTALL HELM
Nous créons le répertoire pour les sources
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: ""
---
Nous créons le répertoire pour les sources
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: [email protected]
privateKeySecretRef:
name: letsencrypt-prod
http01: {}
---
Nous créons le répertoire pour les sources
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: weavescope-ingress
namespace: weave
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: weavescope.exemple.local
http:
paths:
- path: /
backend:
serviceName: weave-scope-app
servicePort: app
---
13. DEBUG
Voici quelque commande utile
rm -rf /var/cache/yum
rm -rf /var/tmp/yum-*
package-cleanup --quiet --leaves --exclude-bin
package-cleanup --oldkernels --count=2
rm -rf /root/.composer/cache
rm -rf /home/*/.composer/cache
find -regex ".*/core\.[0-9]+$" -delete
kubectl get nodes
kubectl cordon knode02
kubectl uncordon knode02
kubectl drain knode02
kubectl get pods --all-namespaces
kubectl get nodes | grep '^.*notReay.*$' | awk '{print $1}' | xargs kubectl describe node
journalctl -u kubelet
