高可用性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:すべてのエラーについては、すぐに非公開で書いたほうがいいでしょう。