まず前提として, https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/ に従い,kubernetes を bare metal サーバに
Kubernets v1.6.1
Calico v2.1.4
作業をはじめる前に,このバージョンで kubeadm を使い導入していると,クレデンシャルが自動生成されて,それを使わなければ
それではまず,heapster を導入する。
くそぅ……罠だ……k8s なんて嫌いです……ぐすん。
それはともかく,気分を切り替えて張り切って API アクセスしようと思う。
ここで,確認してみると良いのだが,
これは,
そして,
これもまた
さて,今回アクセスしたいのは heapster そのものの API なので,ここで,kube-apiserver の proxy を使う。
なおここで得られるメトリクスの一覧は次からわかる。リンクは最新のタグの v1.5.0-beta.0 のもの。
https://github.com/kubernetes/heapster/blob/v1.5.0-beta.0/docs/storage-schema.md
このリンク先の表を以下に引用しておく。
すべてのカスタムのメトリクスは
P. S.
各サービスの API のエンドポイント,
kubeadm
でインストールしたものとする。
今回は,CNI に Project Calico を使用した。Kubernets v1.6.1
Calico v2.1.4
作業をはじめる前に,このバージョンで kubeadm を使い導入していると,クレデンシャルが自動生成されて,それを使わなければ
kubectl
での API アクセスが弾かれる
# cp /etc/kubernetes/admin.conf $HOME/admin.confまた,
$ export KUBECONFIG="$HOME/admin.conf"
curl
でのアクセスも同様に弾かれるため,kube-proxy を利用する。
$ kubectl proxy --port=8080 &ポートはお好きなように。この記事では 8080 で進めていく。
それではまず,heapster を導入する。
$ git clone https://github.com/kubernetes/heapsterちなみにこの記事を書いたときの heapster の最新の stable は v1.4.2 だが,
$ kubectl create -f heapster/deploy/kube-config/influxdb
$ kubectl create -f heapster/deploy/kube-config/rbac/heapster-rbac.yaml
git checkout v1.4.2
をしてこれを行ったとき,grafana の pod が無限再起動に陥ってしまいしばらく気がつかずに苦しんだ。くそぅ……罠だ……k8s なんて嫌いです……ぐすん。
それはともかく,気分を切り替えて張り切って API アクセスしようと思う。
$ curl http://127.0.0.1:8080まず,kubernertes 自体の API について,ちゃんと kube-proxy が仕事して curl で API 一覧が見えることがわかる。
{
"paths": [
"/api",
"/api/v1",
"/apis",
"/apis/apps",
"/apis/apps/v1beta1",
"/apis/authentication.k8s.io",
"/apis/authentication.k8s.io/v1",
"/apis/authentication.k8s.io/v1beta1",
"/apis/authorization.k8s.io",
"/apis/authorization.k8s.io/v1",
"/apis/authorization.k8s.io/v1beta1",
"/apis/autoscaling",
"/apis/autoscaling/v1",
"/apis/autoscaling/v2alpha1",
"/apis/batch",
"/apis/batch/v1",
"/apis/batch/v2alpha1",
"/apis/certificates.k8s.io",
"/apis/certificates.k8s.io/v1beta1",
"/apis/extensions",
"/apis/extensions/v1beta1",
"/apis/policy",
"/apis/policy/v1beta1",
"/apis/rbac.authorization.k8s.io",
"/apis/rbac.authorization.k8s.io/v1alpha1",
"/apis/rbac.authorization.k8s.io/v1beta1",
"/apis/settings.k8s.io",
"/apis/settings.k8s.io/v1alpha1",
"/apis/storage.k8s.io",
"/apis/storage.k8s.io/v1",
"/apis/storage.k8s.io/v1beta1",
"/healthz",
"/healthz/ping",
"/healthz/poststarthook/bootstrap-controller",
"/healthz/poststarthook/ca-registration",
"/healthz/poststarthook/extensions/third-party-resources",
"/healthz/poststarthook/rbac/bootstrap-roles",
"/logs",
"/metrics",
"/swaggerapi/",
"/ui/",
"/version"
]
}
ここで,確認してみると良いのだが,
/api/v1/namespaces
をみるとわかるように,calico や heapser,kube-dns といった kubernetes のシステムの関連する Pod は kube-system という名前空間に存在する。これは,
kubectl get namespace
でも確認可能。そして,
/api/v1/services
を見にいくと,heapster というサービスが起動しており,これは,/api/v1/namespaces/kube-system/services/heapster
に selfLink されている。これもまた
kubectl -n kube-system get svc
と名前空間を指定して kubectl
でサービス一覧を取得すれば同様のことがわかる。さて,今回アクセスしたいのは heapster そのものの API なので,ここで,kube-apiserver の proxy を使う。
$ curl http://127.0.0.1:8080/api/v1/proxy/namespaces/kube-system/services/heapster/api/v1/model/namespaces/Kuernetes の API のルートに proxy というディレクトリが追加されているのがわかる。その下にサービスを指定して,その下に heapster 自体の REST API のエンドポイントを書くとこのように結果が得られる。
[
"default",
"kube-system"
]
$ curl http://127.0.0.1:8080/api/v1/proxy/namespaces/kube-system/services/heapster/api/v1/model/namespaces/kube-system/pods/pod の一覧も取得できるし,
[
"kube-proxy-xw0k2",
"calico-policy-controller-1777954159-3zcdp",
"monitoring-influxdb-3871661022-g6dzx",
"monitoring-grafana-973508798-98hcz",
"kube-scheduler-cluster00",
"kube-controller-manager-cluster00",
"heapster-1528902802-mln1m",
"calico-node-fxq75",
"calico-node-bc4tk",
"kube-proxy-9tnmn",
"etcd-cluster00",
"kube-dns-3913472980-093xh",
"kube-apiserver-cluster00",
"kube-proxy-lbgb2",
"calico-etcd-3d4bf",
"calico-node-r3rvh"
]
curl http://127.0.0.1:8080/api/v1/proxy/namespaces/kube-system/services/heapster/api/v1/model/namespaces/kube-system/pods/etcd-cluster00/metrics/uptime特定の Pod について,メトリクスを取得することも自由自在,というわけだ。
{
"metrics": [
{
"timestamp": "2017-09-27T07:09:00Z",
"value": 13986309
},
{
"timestamp": "2017-09-27T07:10:00Z",
"value": 14046297
},
{
"timestamp": "2017-09-27T07:11:00Z",
"value": 14106296
}
],
"latestTimestamp": "2017-09-27T07:11:00Z"
}
なおここで得られるメトリクスの一覧は次からわかる。リンクは最新のタグの v1.5.0-beta.0 のもの。
https://github.com/kubernetes/heapster/blob/v1.5.0-beta.0/docs/storage-schema.md
このリンク先の表を以下に引用しておく。
Metric Name | Description |
---|---|
cpu/limit | CPU hard limit in millicores. |
cpu/node_capacity | Cpu capacity of a node. |
cpu/node_allocatable | Cpu allocatable of a node. |
cpu/node_reservation | Share of cpu that is reserved on the node allocatable. |
cpu/node_utilization | CPU utilization as a share of node allocatable. |
cpu/request | CPU request (the guaranteed amount of resources) in millicores. |
cpu/usage | Cumulative CPU usage on all cores. |
cpu/usage_rate | CPU usage on all cores in millicores. |
filesystem/usage | Total number of bytes consumed on a filesystem. |
filesystem/limit | The total size of filesystem in bytes. |
filesystem/available | The number of available bytes remaining in a the filesystem |
filesystem/inodes | The number of available inodes in a the filesystem |
filesystem/inodes_free | The number of free inodes remaining in a the filesystem |
memory/limit | Memory hard limit in bytes. |
memory/major_page_faults | Number of major page faults. |
memory/major_page_faults_rate | Number of major page faults per second. |
memory/node_capacity | Memory capacity of a node. |
memory/node_allocatable | Memory allocatable of a node. |
memory/node_reservation | Share of memory that is reserved on the node allocatable. |
memory/node_utilization | Memory utilization as a share of memory allocatable. |
memory/page_faults | Number of page faults. |
memory/page_faults_rate | Number of page faults per second. |
memory/request | Memory request (the guaranteed amount of resources) in bytes. |
memory/usage | Total memory usage. |
memory/cache | Cache memory usage. |
memory/rss | RSS memory usage. |
memory/working_set | Total working set usage. Working set is the memory being used and not easily dropped by the kernel. |
network/rx | Cumulative number of bytes received over the network. |
network/rx_errors | Cumulative number of errors while receiving over the network. |
network/rx_errors_rate | Number of errors while receiving over the network per second. |
network/rx_rate | Number of bytes received over the network per second. |
network/tx | Cumulative number of bytes sent over the network |
network/tx_errors | Cumulative number of errors while sending over the network |
network/tx_errors_rate | Number of errors while sending over the network |
network/tx_rate | Number of bytes sent over the network per second. |
uptime | Number of milliseconds since the container was started. |
custom/
に置かれるそうな。P. S.
各サービスの API のエンドポイント,
kubectl cluster-info
みたら普通に書いてあるやんけ……。