Installer kubernetes via kubespray (stockage local, installer Elasticsearch + Fluentd + Kibana, prometheus)

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é.

Source: https://habr.com/ru/post/fr426959/


All Articles