1)kibanaにログイン
2)今回、DockerのMetricsを収集したいので"Docker metrics"を選択
1)kibanaにログイン
2)今回、DockerのMetricsを収集したいので"Docker metrics"を選択
docker-composeでEFK(elasticsearch/fluentd/kibana)の作成してみる
参照先:
https://github.com/digihide/efk_for_docker-compose.git
1)wordpress用のdocker-composeにfluentdの設定を記載する
=============================-
version: '3.7'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
ports:
- "4306:3306"
logging:
driver: "fluentd"
options:
fluentd-address: 192.168.0.102:24224
tag: fluent
wordpress:
image: wordpress:php7.3-fpm
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
- ./conf.d/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./wordpress:/var/www/html
logging:
driver: "fluentd"
options:
fluentd-address: 192.168.0.102:24224
tag: fluent
nginx:
image: nginx:stable
ports:
- "8000:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
- ./wordpress:/var/www/html
restart: always
environment:
CLIENT_MAX_BODY_SIZE: 300M
logging:
driver: "fluentd"
options:
fluentd-address: 192.168.0.102:24224
tag: fluent
======================================
2)実施にwordpressにて、書き込みを行って後に
Kibanaのログ画面を確認してみる
docker desktop上で、docker-composeコマンドを実行すると
以下のエラーが出るので、対処方法を記載する
1)以下のコマンドを実施する
security unlock-keychain
2)PCのセキュリティパスワードを入力する
1)sudo権限でkubectlコマンドを実施すると、以下のメッセージが 出て実施不可となる
2)sudoユーザで、以下を実施する。
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
3)kubectlを実施出来ることを確認できる
k8sにて、Fluentd / Elasticsearch /Kibanaの導入方法について記載する
参照:
https://mherman.org/blog/logging-in-kubernetes-with-elasticsearch-Kibana-fluentd/
1)namespaceを作成します。
kubectl create namespace logging
■Elasticsearch
1)elasticsearchのyamlを作成する。
vi elastic.yaml
======================
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
spec:
selector:
matchLabels:
component: elasticsearch
template:
metadata:
labels:
component: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.4
env:
- name: discovery.type
value: single-node
ports:
- containerPort: 9200
name: http
protocol: TCP
resources:
limits:
cpu: 500m
memory: 4Gi
requests:
cpu: 500m
memory: 4Gi
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
service: elasticsearch
spec:
type: NodePort
selector:
component: elasticsearch
ports:
- port: 9200
targetPort: 9200
============================
2)デプロイを行う
kubectl create -f kibana.yaml -n logging
3)pod及びserviceの作成状況を確認する。
4)接続チェックを行ってみる。
■Kibana
1)kibanaの作成を行ってみる。
vi kibana.yaml
========================
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
spec:
selector:
matchLabels:
run: kibana
template:
metadata:
labels:
run: kibana
spec:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:6.5.4
env:
- name: ELASTICSEARCH_URL
value: http://elasticsearch:9200
- name: XPACK_SECURITY_ENABLED
value: "true"
ports:
- containerPort: 5601
name: http
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: kibana
labels:
service: kibana
spec:
type: NodePort
selector:
run: kibana
ports:
- port: 5601
targetPort: 5601
===========================
2)kibanaのデプロイを行う。
kubectl create -f kibana.yaml -n logging
3)kibanaのpod及びserviceの作成状況の確認する
4)ブラウザにて、接続を行ってみる。
http://0.0.0.0:32712
■Fluentd
1)fluentdの作成を行う。
vi fluentd-rbac.yaml
========================
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: fluentd
namespace: kube-system
rules:
- apiGroups:
- ""
resources:
- pods
- namespaces
verbs:
- get
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: fluentd
roleRef:
kind: ClusterRole
name: fluentd
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: fluentd
namespace: kube-system
============================
2)デプロイを行う。
kubectl create -f fluentd-rbac.yaml
3)fluentdのdeamonsetの作成を行う。
vi fluentd-daemonset.yaml
=============================
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
k8s-app: fluentd-logging
template:
metadata:
labels:
k8s-app: fluentd-logging
spec:
serviceAccount: fluentd
serviceAccountName: fluentd
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1.3-debian-elasticsearch
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.logging"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
- name: FLUENT_ELASTICSEARCH_SCHEME
value: "http"
- name: FLUENT_UID
value: "0"
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
====================================
4)デプロイを行う。
kubectl create -f fluentd-daemonset.yaml
以降、作成したコンテナからログが転送できるか検証を行う
k8sのメトリクス収集方法として、kubectl get topコマンドを行う前に
以下の導入が必要となる。
vi metrics-server-0.3.3/deploy/1.8+/metrics-server-deployment.yaml
①②以下のコマンドで、対応しているapiのバージョンを確認する
kubectl api-versions | grep apps
③以下の編集を行う。(赤文字変更箇所)
metrics-server-0.3.3/deploy/1.8+/metrics-server-deployment.yaml
1)docker k8s(今回、ver1.18.6を指定したインストール方法)を行う
--- kuberneteのインストール方法 ---
# swap off
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove
sudo apt-get purge -y --auto-remove dphys-swapfile
sudo rm -fr /var/swap
sudo swapoff -a
# docker install
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get -y update
sudo apt-get install -y docker-ce
# k8s install
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list
sudo apt-get update -y
sudo apt-get install -qy kubelet=1.18.6-00 kubectl=1.18.6-00 kubeadm=1.18.6-00
sudo apt-mark hold kubelet kubectl kubeadm
# upgrade
sudo apt upgrade -y
# reset
sudo kubeadm reset
---- ここまで -----
2)以下からmaster側の初期化を行う
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3)network(flannel)の導入を行う。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4)master側でkubeadm initを実施時に表示されたkubeadm join xxxxxxの内容をworker側で行う
例:
sudo kubeadm join 192.168.13.1:6443 --token yxxpjz.mxaw9w3q3st8vvpd --discovery-token-ca-cert-hash sha256:c217f2bed58632db7fc741af9aba7ba53326f692a8ac3705b08c6f61fe1bde
参照先:
https://helm.sh/ja/docs/intro/using_helm/
1)インストールを行う。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
2)導入後、レポジトリ検索ができなかったので、以下の方法で
レポジトリの追加を行う。
helm repo add stable https://kubernetes-charts.storage.googleapis.com
3)例として、wordpressのレポジトリを検索してみる
helm search repo wordpress
4)実際にwordpressのインストールを行う
helm install wordpress stable/wordpress
helmとは、k8s上でyamlを作成する必要がなく
簡単にパッケージ感覚でインストールをしてくれるツールになる。
前提:
docker desktop(wsl2)
参照先:
https://helm.sh/ja/docs/intro/using_helm/
1)helmのインストールを実施
choco install kubernetes-helm
2)helm導入後に以下のコマンドで、パッケージの検索が可能
helm search wordpress
3)実際にwordpressを導入してみる
例:helm install [任意の名前] [パッケージ名]
helm install wordpress stable/wordpress
念のため、導入されているのか確認してみる
1)追加したnode2のステータスがNotReadyになっている。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
4)再度、マスターにて、確認を行うとReadyになっていることが把握できる。
5)念のため、Flannelの状態も確認してみる。(問題なく、稼働しているようだ!)
# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...