これは?
Kubernetes試してみたい!ということで、GKEやAmazon ECSを使うのも良いのですが、そこそこお値段が・・ ということで、格安VPSを使ってKubernetesを試してみます。
ほかの選択肢
正直なところ純粋にKubernetesを動かす場合はGKEやAmazonECSを使うほうがおすすめです。が、まぁせっかくやってみたので知識の共有ということで記事にしました。
ローカルで試す場合はminikubeがおすすめです
さて、ここまで読んでまだ格安VPSでKubernetesを試してみたい方は、 続きをご覧ください。
※※追記:Kubernetes1.9でのやり方をまとめなおしましたので、下の記事を参照してください※※
※※追記:以下は古い手順です※※
海外VPS
僕が使っているのは海外VPSのvultr。と言ってもTokyoリージョンにもマシンを払い出せます。
紹介コードを介すると僕が幸せになるのでお願いします
↓↓↓↓↓↓↓↓こちらから登録! ↓↓↓↓↓↓↓↓
さて、vultrでマシンを作るところは省略。
OSはubuntuでメモリ1GB 1CPU Coreのマシンを作る。 これでだいたい月$5のプランのようだ。
swapをつくる
swapができないと確実にメモリが足りなくなるので設定します。(このプランでは根本的にメモリが足りないという話はとりあえず無視する)
# dd if=/dev/zero of=/swapfile count=2048 bs=1M # chmod 600 /swapfile # mkswap /swapfile # swapon /swapfile
参考 https://www.vultr.com/docs/setup-swap-file-on-linux
注意
kubeadmでクラスタを作る
kubeadmというツールを使うと、kubernetesクラスタを簡単にお試しできる環境を構築できます。
ざっと図にすると下図のように、kubernetesの稼働に必要なコンポーネントを一気にセットアップしてくれます。あくまでお試し、なのでセキュリティ上はよろしくないところや、etcdが1台のみという全く冗長性のない構成のクラスタであるという点には注意が必要です。
必要なパッケージをインストールします。
# apt-get update && apt-get install -y apt-transport-https # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - # cat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF # apt-get update # apt-get install -y docker.io # apt-get install -y kubelet kubeadm kubectl kubernetes-cni
# kubeadm init (略 結構待つ) (1台で全部やりたいので、workerにもPodを配置するように設定) # kubectl taint nodes --all dedicated- (ネットワークの設定) # kubectl create -f https://git.io/weave-kube (kube-dnsが動かないので無理やり設定を変える) # kubectl edit deployment kube-dns --namespace=kube-system (viが起動するのでResourceの制限をすべて消したうえで保存する) # kubectl get pods --namespace=kube-system (すべてのpodがRunningになるまで待つ)
http://VPSのIPアドレス:31982
これでアクセスできる。(31982は環境によって違うはずです)
ちなみに、これなんの認証もないので、インターネット上の誰でも見える状態になっています。kubernetes-dashboardからは任意のコンテナを実行させたりできるので、これは非常に危険です。確認が終わったら、すぐにkubernetes-dashboardは消すか、外から直接アクセスできないようにすることをお勧めします。
手元のマシンからkubectlを実行する
いちいちVPSにログインしてkubectlを実行するのもだるい。
先ほどセットアップしたVPSのv /etc/kubernetes/admin.conf というファイルに必要な情報が入っているので、SCPなどで手元に持ってくる。
手元のマシンにkubectlのインストール
手元のマシンの環境に合ったkubectlをインストール(といってもバイナリを落としてくるだけ)
OSごとに違うのでやり方は下記を参考
手元のマシンでkubectl proxyを実行
$ kubectl --kubeconfig=admin.conf proxy --port=8080
手元のマシンでkubectl を実行
$ kubectl get pods
メトリクスを収集する
prometheusを束ねるserviceを作成 $ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/service.yml prometheusを作成 $ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/deployment.yml prometheusの設定を作成 $ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/configmap.yml
http://VPSのIPアドレス:30090
CPUやメモリの様子が見たいのでnode-exporterを入れる
なんかグラフっぽいものを見ることもできます。
気になるメモリは?
"node_memory_MemFree" がそれっぽいですね。
メトリクスを可視化する
Kubernetes のメトリクスを Prometheus を使って監視する - Qiita
メトリクスを監視するというタイトルで記事を書き始めましたが, メトリクスを収集するところまでで終わってしまいました. 次は今回収集したメトリクスをどのように可視化するかについてまとめたいと思います.
次回作に期待・・となっている
しかしリポジトリを見るとすでに用意してあるではないか!
$ kubectl create -f https://github.com/kkohtaka/kubernetes-metrics/raw/master/grafana/deployment.yml $ kubectl create -f https://github.com/kkohtaka/kubernetes-metrics/raw/master/grafana/service.yml
http://VPSのIPアドレス:30000
それっぽい画面が出ました!
graphanaは可視化専用ツールなので、先ほどのprometheusをgraphanaに登録して、そのデータを見ることになる。
左上のロゴマークから、「Data Sources」を選択、その後緑の「+ Add data source」をクリック
設定はどうしようか・・
Name: 好きな名前でOK 画像だと"prometheus"
Type: Prometheusを選択、選択すると、それ以降の項目が変化する
Url: http://prometheus:9090 とする
Urlがhttp://prometheus:9090というのは初見では驚くかもしれない。これで、先ほど作ったprometheusにアクセスできる。
種明かしをするとkubernetesクラスタの中にはdnsサーバが同梱されていて、まずServiceの名前として解決できるかを調べるようになっている。そのため、このような名前でアクセスできる。
さて、データベースの登録が終わったので、いよいよ可視化してみよう。
可視化のためには、先ほどのように、"node_cpu"だの"node_memory_MemFree"だの、prometheusやnode_exporterの知識が必要となる。だるい。。
ということで、先人の用意したdashboardを借りてくることにする。
dashboardは下記から探すことができる。
今回はnode-exporter用と思われる https://grafana.com/dashboards/22 をつかう。
ロゴからDashboards、からのImport
Graphana.net Dashboardというところに「https://grafana.com/dashboards/22」と入力
入力してしばらくすると画面が変わる。
OpthinsのPrometheusのところ、ドロップダウンメニューから、先ほど登録したDataSourceの名前を選択して、Sava&Open!