2020年9月15日火曜日

Metrics for EKF(Docker編)

1)kibanaにログイン

2)今回、DockerのMetricsを収集したいので"Docker metrics"を選択





























3)今回、Mac上で、以下の設定を行ってみる




































4)以下のように、各種Dockerのメトリクスが収集されていることが把握できる。








2020年9月10日木曜日

docker-compose for EFK

 docker-composeでEFK(elasticsearch/fluentd/kibana)の作成してみる

参照先:
https://github.com/digihide/efk_for_docker-compose.git

EFK ログ収集(お試し:wordpress編)

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のログ画面を確認してみる




Credentials store error: StoreError('Credentials store docker-credential-desktop exited with "error getting credentials (docker-compose by docker desktop)

 docker desktop上で、docker-composeコマンドを実行すると
以下のエラーが出るので、対処方法を記載する

1)以下のコマンドを実施する
security unlock-keychain

2)PCのセキュリティパスワードを入力する



2020年9月7日月曜日

sudoユーザで、kubectlコマンドが実施できない件



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を実施出来ることを確認できる



2020年9月6日日曜日

k8s / Fluentd / Elasticsearch /Kibana

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




以降、作成したコンテナからログが転送できるか検証を行う






2020年9月5日土曜日

kubectlコマンド一覧(メモ):k8s

参照先:
https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/

kubectl get top(メトリクス収集:k8s)

k8sのメトリクス収集方法として、kubectl get topコマンドを行う前に
以下の導入が必要となる。

1)以下のソースコードをダウンロードする
wget https://github.com/kubernetes-incubator/metrics-server/archive/v0.3.3.tar.gz
tar xzf v0.3.3.tar.gz

2)編集を行う
vi metrics-server-0.3.3/deploy/1.8+/metrics-server-deployment.yaml

3)デプロイを行う
kubectl apply -f metrics-server-0.3.3/deploy/1.8+/


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

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.2
        imagePullPolicy: Always
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
--------------------------------------------------------

3)デプロイを行う
kubectl apply -f metrics-server-0.3.3/deploy/1.8+/


4)実際にworkerのリソースを確認してみる




5)podのメトリクスを確認してみる


2020年9月4日金曜日

k8sのインストール方法(bu raspberry pi)

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

htopの参照方法

 







◆CPU

緑:通常の優先度の処理の使用量
赤:カーネルの使用量


◆メモリ

緑:使用中メモリ
青:バッファ(処理速度差緩衝用メモリ)
黄:キャッシュ(使用頻度の高いデータ)

raspberry pi by helm

参照先:
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 by windows

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


念のため、導入されているのか確認してみる



2020年9月1日火曜日

nodeの状態がNot readyの件

 1)追加したnode2のステータスがNotReadyになっている。



2)node2にて、状態の確認を行なってみると、ネットワークのエラーが表示されている



3)masterにて、flannelの導入を行なっていなかったので導入を行う。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml




4)再度、マスターにて、確認を行うとReadyになっていることが把握できる。



5)念のため、Flannelの状態も確認してみる。(問題なく、稼働しているようだ!)







php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...