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