Menu
1. INSTALLATION OS
2. CONFIGURATION SERVEUR
3. CONFIGURATION DNS
4. INSTALLATION DOCKER
5. INSTALLATION BREEZE
6. INTERFACE WEB
7. CONTROLE
8. DASHBOARD
9. INSTALLATION TRAEFIK
10. INSTALL HELM
11. INSTALL Let’s Encrypt
12. INSTALL Weave Scope
13. DEBUG
Pour é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 |
2. CONFIGURATION SERVEUR
sur tout les serveurs
Nous controlons la configuration réseau et le nom d’hôte
nmtui
Mise à jours global et installation de nouvelle application
yum update -y && yum upgrade -y
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
Nous désactivons le selinux
setenforce 0
sed -i –follow-symlinks ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux
Pour de la pré-production nous desactivons le firewall
systemctl disable firewalld
systemctl stop firewall
Nous lancons le service en mode automatique pour chaque redémarrage
systemctl start ntpd && systemctl enable ntpd
Nous controlons la synchronisation horaire
ntpq -p
ntpdc -l
Nous redémrrons le serveur
reboot
Nous éditons le fichier de configuration pour le NFS
nano /etc/idmapd.conf
Voici la ligne à modifier
Domain = exemple.localNous lancons le service en mode automatique pour chaque redémarrage
systemctl enable rpcbind && systemctl start rpcbind
Nous créons le dossier
mkdir -p /opt/tools
Nous montons le lecteur distant
mount 192.168.1.11:/docker/tools /opt/tools
Nous éditons le fichier de partition
nano /etc/fstab
Voici la ligne à rajouter
120.4.1.151:/docker/tools /opt/tools nfs defaults,_netdev 0 0Nous faisons une copie de la configuration par default
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
Nous en créons un nouveau
nano /etc/snmp/snmpd.conf
Voici les lignes à rajouter
#com2sec paranoid default EN-TETE-PUBLIC
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(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 hdOutBlocksNous modifions le fichier pour l'inventaire
nano /etc/fusioninventory/agent.cfg
Voici la ligne modifier
server = http://glpi.exemple.local/plugins/fusioninventory/Nous créons le fichier pour rajouter des commande NRPE futur
nano /etc/nrpe.d/centreon.cfg
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.pyNous modifions le fichier de configuration NRPE
nano /etc/nagios/nrpe.cfg
Voici la ligne à modifier
allowed_hosts=127.0.0.1,::1,centreon,centreon.exemple.localNous lancons le service en mode automatique pour chaque redémarrage
systemctl daemon-reload
systemctl restart snmpd && systemctl enable snmpd
systemctl restart nrpe && systemctl enable nrpe
systemctl restart fusioninventory-agent && systemctl enable fusioninventory-agent3. CONFIGURATION DNS
sur le serveur DNS externe
Avoir créer les enregistrements dns sur le serveur en powershell.
Add-DnsServerResourceRecordA -Name "kubernetes" -ZoneName exemple.local -AllowUpdateAny -IPv4Address 192.168.1.100
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.38Add-DnsServerResourceRecordCName -Name "traefik-ui" -HostNameAlias kubernetes.exemple.local -ZoneName exemple.local
4. INSTALLATION DOCKER
sur le serveur DEPLOY
Nous installons docker
mkdir -p /opt/tools/docker-install/ && cd /opt/tools/docker-install/
curl -# -LO "https://releases.rancher.com/install-docker/18.06.sh"
chmod +x 18.06.sh && ./18.06.shMise en place du droit pour ROOT
sudo usermod -aG docker root
Nous lancons le service en mode automatique pour chaque redémarrage
systemctl start docker && systemctl enable docker
Nous installons docker-compose
mkdir -p /opt/tools/docker-compose-install/ && cd /opt/tools/docker-compose-install/
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-compose5. INSTALLATION BREEZE
sur le serveur DEPLOY
Création de la clé de sécurité
ssh-keygen
La déployé sur tout les serveurs
ssh-copy-id kmaster01
ssh-copy-id kmaster02
ssh-copy-id kmaster03
ssh-copy-id harbor
ssh-copy-id knode01
ssh-copy-id knode02
ssh-copy-id knode03Nous créons le répertoire pour les sources
mkdir -p /opt/tools/breeze/ && cd /opt/tools/breeze/
Téléchargement du fichier d'installation
curl -# -LO "https://raw.githubusercontent.com/wise2c-devops/breeze/master/docker-compose.yml" -o docker-compose.yml
nous lancons l'installations de Breeze
docker-compose up -d
Nous pouvons enfin aller sur l'interface graphique
http://deploy.exemple.local:88
ou
http://192.168.1.236:886. INTERFACE WEB
Nous arrivons sur la page principal
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.
Le paramétrage pour le loadbalancer (VIP)
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"
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
kubectl get node
kubectl get cs
kubectl get csr
kubectl get nodes -o wide
kubectl -n kube-system get pods
8. DASHBOARD
Pour obtenir le port du dashboard
kubectl -n kube-system edit service kubernetes-dashboard
http://kubernetes.exemple.local:30300
ou
http://192.168.1.100:30300Pour obtenir le Token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiO.....
9. INSTALLATION TRAEFIK
seulement sur kmaster01
Nous créons le répertoire pour les sources
mkdir -p /opt/tools/traefik/ && cd /opt/tools/traefik/
Nous créons le fichier installation
nano traefik-install.yaml
Voici les lignes à rajouter
---
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
---Nous exécutons le fichier d'installation
kubectl create -f traefik-install.yaml
Nous pouvons aller sur l'interface
http://traefik-ui.exemple.local10. INSTALL HELM
Nous créons le répertoire pour les sources
mkdir /opt/tools/helm/ && cd /opt/tools/helm/
Nous téléchargons la source
curl -# -LO "https://storage.googleapis.com/kubernetes-helm/helm-v2.13.0-linux-amd64.tar.gz"
Nous la décompressons
tar zxvf helm-v2.13.0-linux-amd64.tar.gz
nous la déplacons
mv linux-amd64/helm /usr/local/bin/helm
nous initialisation
helm init
Nous mettons à jour
helm repo update
Nous mettons en route la repo de notre application
helm repo add --username k8s --password k8s@Harbor authentic https://harbor.exemple.local/chartrepo/application--ca-file /opt/certificats/ca.crt --cert-file /opt/certificats/server.crt --key-file /opt/certificats/server.key
Nous
kubectl -n kube-system create sa tiller
Nous créons clusterrolebinding
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
Nous créons serviceaccount
kubectl create serviceaccount tiller --namespace kube-system
Nous créons le fichier installation
nano tiller-clusterrolebinding.yaml
Voici les lignes à rajouter
---
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 exécutons le fichier d'installation
kubectl create -f tiller-clusterrolebinding.yaml
Nous mettons en route le service
helm init --service-account tiller --upgrade
11. INSTALL Let’s Encrypt
Nous créons le répertoire pour les sources
mkdir -p /opt/tools/letsencrypt/ && cd /opt/tools/letsencrypt/
helm install --name cert-manager --namespace kube-system --set ingressShim.defaultIssuerName=letsencrypt-prod --set ingressShim.defaultIssuerKind=ClusterIssuer stable/cert-manager --version v0.5.2
Nous créons le fichier installation
nano letsencrypt-staging-cluster-issuer.yaml
Voici les lignes à rajouter
---
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: administrateur@fichorga.fr
privateKeySecretRef:
name: letsencrypt-prod
http01: {}
---Nous exécutons le fichier d'installation
kubectl apply -f letsencrypt-staging-cluster-issuer.yaml
12. INSTALL Weave Scope
Nous créons le répertoire pour les sources
mkdir -p /opt/tools/weavescope/ && cd /opt/tools/weavescope/
Nous téléchargons la source
curl -# -LO "https://cloud.weave.works/launch/k8s/weavescope.yaml"
Nous lancons l'installation
kubectl create -f "weavescope.yaml"
Nous pouvons controler que tout est bien en place
kubectl get pods -n weave
Nous créons le fichier installation
nano ingress-weavescope.yaml
Voici les lignes à rajouter
---
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
---Nous exécutons le fichier d'installation
kubectl create -f ingress-weavescope.yaml
Nous pouvons voir l'ensemble des process qui tourne
http://weavescope.exemple.local13. DEBUG
Voici quelque commande utile
find /var -name "*.log" \( \( -size +50M -mtime +7 \) -o -mtime +30 \) -exec truncate {} --size 0 \;
yum clean all
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]+$" -deletekubectl 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 nodejournalctl -u kubelet