kubespray経由でkubernetesをインストールします(ローカルストレージ、Elasticsearch + Fluentd + Kibana、prometheusをインストールします)

高可用性Kubernetesクラスターを上げて、脳を爆発させない方法は? もちろん、Kubesprayを使用してください。







Kubesprayは、Kubernetesコンテナを使用してオーケストレーションシステムをインストールおよび構成するためのAnsibleロールのセットです。







Kubernetesは、Linuxコンテナクラスタを単一システムとして管理するために設計されたオープンソースプロジェクトです。 Kubernetesは、多数のホストでコンテナーを管理および実行し、多数のコンテナーを共同ホストおよび複製します。







注意、カットの下で4つのelasticsearchスクリーンショットと9つのprometheusスクリーンショット!







準備する



8 GBのメモリを備えた3つのCentos 7ノードがあります。

16GBのより良い使用

各ノードで、次を実行します。

必要なサイズのディスクを接続します。







エラスティックの場合、30GB(data.persistence.size)より大きい3 PVと4GB(master.persistence.size)より大きい2 PVが必要です。







これを行うには、各ノードで、必要なサイズの2つのディスクを作成します。

ディスクサイズはデータの数に依存します-実験的に確認する必要があります。







Disk /dev/vdb: 21.5 GB Disk /dev/vdc: 53.7 GB
      
      





fdiskを通じて、各1セクションに作成します







/ mnt / disksに、新しいディスクの名前でフォルダーを作成します







 mkdir -p /mnt/disks/vdb1 mkdir -p /mnt/disks/vdc1
      
      





これらのドライブにFSを作成します







 mkfs.xfs -f /dev/vdb1 mkfs.xfs -f /dev/vdc1
      
      





このフォルダーにディスクをマウントします







 mount /dev/vdb1 /mnt/disks/vdb1 mount /dev/vdc1 /mnt/disks/vdc1
      
      





確認する







 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)
      
      





すべてのノードでファイアウォールをオフにします(これは松葉杖だと思いますが、これまでのところ)







 systemctl stop firewalld iptables -F
      
      





kubesprayをダウンロードして、kubernetesのインストールを実行します



 git clone https://github.com/kubernetes-incubator/kubespray.git cd kubespray git tags -   git checkout ' tag' sudo pip install -r requirements.txt
      
      





inventory / sample / hosts.iniを次の形式にします(ノードの名前を独自のものに置き換えます)







 [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
      
      





ファイルinventory / 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
      
      





inventory / sample / group_vars / k8s-cluster.ymlをファイルの最後に追加します







 docker_dns_servers_strict: no #   'no',   DNS   3
      
      





インストールを開始します

インストールする前に、kubesprayのドキュメントhttps://github.com/kubernetes-incubator/kubesprayをお読みください

ansible-playbook -u 'ノードにsudoを持っているユーザー' -i inventory / sample / hosts.ini cluster.yml -b







StorageClassを確認する







 kubectl get storageclass NAME PROVISIONER AGE local-storage kubernetes.io/no-provisioner 18m
      
      





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
      
      





ヘルムの初期化







 helm init --service-account tiller
      
      





elasticsearchのインストールを開始します



 helm install stable/elasticsearch --namespace logging --name elasticsearch --set data.persistence.storageClass=local-storage,master.persistence.storageClass=local-storage
      
      





elasticsearchがインストールされるまで5分間待ちます。







kibanaとfluentdを接続するサービスを見つけました。 通常、名前にelasticsearch-clientが含まれます







 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
      
      





fluentd-elasticsearchのインストール時にelasticsearch-clientという名前が指定されます







 helm install stable/fluentd-elasticsearch --namespace logging --set elasticsearch.host=elasticsearch-client
      
      





Elasticsearch-Clientという名前は、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
      
      





すべてのポッドのステータスがrunningになっているようです







 kubectl get pod --namespace=logging
      
      





エラーがある場合、ログを調べます。







 kubectl logs - --namespace logging
      
      





DNSまたは/ etc / hostsファイルに追加します







 IP-- kibana.mydomain.io IP-- kibana.mydomain.io IP-- kibana.mydomain.io
      
      





注:外部Elasticsearchにログを送信する場合は、elasticsearch.host = dns-name-of-your-external-elasticsearchでインストールを開始する必要があります







kibana.mydomain.ioに移動します

インデックスパターンをクリックします













下のインデックスと一致するように名前のインデックスを入力します













@タイムスタンプを選択













EFKが機能する













kube-prometheusのインストールを開始します



プロメテウス演算子をダウンロード







 git clone https://github.com/coreos/prometheus-operator.git
      
      





kube-prometheusフォルダーに移動します







 cd prometheus-operator/contrib/kube-prometheus
      
      





サイトの指示に従ってインストールを開始します







 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
      
      





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
      
      





イングレスリソースを作成する







 kubectl create -f ingress-grafana-prometheus.yml
      
      





DNSまたは/ etc / hostsファイルに追加します







 IP-- grafana.mydomain.io IP-- grafana.mydomain.io IP-- grafana.mydomain.io
      
      





grafana.mydomain.ioに移動します。 標準のユーザー名/パスワードを入力:admin / admin

スクリーンショットのプロメテウス:





























































PS:すべてのエラーについては、すぐに非公開で書いたほうがいいでしょう。








All Articles