Comment créer un cluster Kubernetes haute disponibilité et ne pas exploser le cerveau? Utilisez Kubespray, bien sûr.
Kubespray est un ensemble de rôles Ansible pour installer et configurer un système d'orchestration avec des conteneurs Kubernetes.
Kubernetes est un projet open source conçu pour gérer le cluster de conteneurs Linux comme un système unique. Kubernetes gère et exécute des conteneurs sur un grand nombre d'hôtes, ainsi que co-héberge et réplique un grand nombre de conteneurs.
Attention, sous le chat 4 captures d'écran d'elasticsearch et 9 captures d'écran de prometheus!
La préparation
Il y a 3 nœuds Centos 7 avec 8 Go de mémoire.
Mieux utiliser 16 Go
Sur chaque nœud, procédez comme suit.
Nous connectons des disques dont nous avons besoin.
Pour les élastiques, vous avez besoin de 3 PV de plus de 30 Go (data.persistence.size) et de 2 PV de plus de 4 Go (master.persistence.size).
Pour ce faire, créez sur chaque nœud 2 disques de la taille dont vous avez besoin.
La taille des disques dépend du nombre de vos données - vous devez vérifier expérimentalement.
Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB 
Grâce à fdisk, nous créons sur chaque 1 section
Dans / mnt / disks, créez un dossier avec le nom de notre nouveau disque
 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1 
Créer FS sur ces disques
 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1 
Montez les disques dans ce dossier
 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1 
Vérifier
 mount | grep mnt /dev/vdb1 on /mnt/disks/vdb1 type xfs (rw,relatime,attr2,inode64,noquota) /dev/vdc1 on /mnt/disks/vdc1 type xfs (rw,relatime,attr2,inode64,noquota) 
Désactivez le pare-feu sur tous les nœuds (je pense que c'est une béquille, mais jusqu'à présent)
 systemctl stop firewalld iptables -F 
Téléchargez kubespray et exécutez l'installation de kubernetes
 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt 
Nous apportons l'inventaire / échantillon / hosts.ini au formulaire suivant (remplacez les noms des nœuds par les vôtres)
 [k8s-cluster:children] kube-master kube-node [all] test-tools-kuber-apatsev-1 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-2 ansible_host=ip-- ip=ip-- test-tools-kuber-apatsev-3 ansible_host=ip-- ip=ip-- [kube-master] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [kube-node] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [etcd] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 [calico-rr] [vault] test-tools-kuber-apatsev-1 test-tools-kuber-apatsev-2 test-tools-kuber-apatsev-3 
Modifiez les valeurs ci-dessous dans l'inventaire de fichiers / sample / group_vars / k8s-cluster / addons.yml
 helm_enabled: true #  helm   local_volume_provisioner_enabled: true #  local volume provisioner ingress_nginx_enabled: true #  ingress controller 
Ajoutez inventaire / échantillon / group_vars / k8s-cluster.yml à la fin du fichier
 docker_dns_servers_strict: no #   'no',   DNS   3 
Nous commençons l'installation
Avant l'installation, lisez la documentation de kubespray https://github.com/kubernetes-incubator/kubespray
ansible-playbook -u 'utilisateur qui a sudo sur les nœuds' -i inventaire / échantillon / hosts.ini cluster.yml -b
Vérification de StorageClass
 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m 
Vérification PV
 kubectl get pv local-pv-26b51a64 49Gi RWO Delete Available local-storage 11m local-pv-5bec36e4 19Gi RWO Delete Available local-storage 14m local-pv-81c889eb 49Gi RWO Delete Available local-storage 13m local-pv-aa880f42 19Gi RWO Delete Available local-storage 10m local-pv-b6ffa66b 19Gi RWO Delete Available local-storage 11m local-pv-d465b035 49Gi RWO Delete Available local-storage 10m 
Initialiser le casque
 helm init --service-account tiller 
Nous commençons l'installation d'Elasticsearch
 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage 
Attendez 5 minutes pour qu'elasticsearch s'installe.
Nous trouvons le service qui reliera kibana et fluentd. A généralement elasticsearch-client dans son nom
 kubectl get services --namespace logging | grep elasticsearch elasticsearch-client ClusterIP 10.233.60.173 <none> 9200/TCP 19s elasticsearch-discovery ClusterIP None <none> 9300/TCP 19s 
Le nom elasticsearch-client est spécifié lors de l'installation de fluentd-elasticsearch
 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client 
Le nom elasticsearch-client est spécifié lors de l'installation de kibana
 helm install --namespace logging --set ingress.enabled=true,ingress.hosts[0]=kibana.mydomain.io --set env.ELASTICSEARCH_URL=http://elasticsearch-client:9200 stable/kibana 
Nous regardons que tous les pods ont le statut en cours d'exécution
 kubectl get pod --namespace=logging 
S'il y a une erreur, nous regardons les journaux.
 kubectl logs - --namespace logging 
Ajouter au DNS ou au fichier / etc / hosts
 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io 
Remarque: si vous souhaitez envoyer des journaux à Elasticsearch externe, vous devez démarrer l'installation avec elasticsearch.host = nom-DNS-de-votre-elasticsearch externe
Allez sur kibana.mydomain.io
Cliquez sur Modèle d'index

Entrez l'index du nom afin qu'il corresponde à l'index ci-dessous

sélectionnez @ timestamp

Et ici EFK fonctionne

Nous commençons l'installation de kube-prometheus
Télécharger prometheus-operator
 git clone https://github.com/coreos/prometheus-operator.git 
Accédez au dossier kube-prometheus
 cd prometheus-operator/contrib/kube-prometheus 
Nous commençons l'installation selon les instructions sur le site
 kubectl create -f manifests/ || true until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; do date; sleep 1; echo ""; done until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/ 2>/dev/null || true 
Créez le fichier ingress-grafana-prometheus.yml
 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: test namespace: monitoring spec: rules: - host: grafana.mydomain.io http: paths: - backend: serviceName: grafana servicePort: 3000 
Créer une ressource d'entrée
 kubectl create -f ingress-grafana-prometheus.yml 
ajouter au DNS ou au fichier / etc / hosts
 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io 
Accédez à grafana.mydomain.io. Entrez le nom d'utilisateur / mot de passe standard: admin / admin
Captures d'écran prometheus:









PS: il vaut mieux écrire sur toutes les erreurs immédiatement en privé.