Kubernetes

概要

Kubernetesは複数のDockerコンテナを連携させるためのシステム。

Memo

命令的な記述から宣言的な記述に移行する

kubectl run newdemo --image=cloudnatived/demo:hello --port=8888--labels app=newdemo # このような設定があるとする
kubectl get deployments newdemo -o yaml --export >deployment.yaml

現在の設定をファイルにエクスポートして、それをGit管理するとすばやく移行できる。

差分チェック

kubectl diff -f deployment.yaml
-  replicas: 10
+  replicas: 5

minikubeでlocalhost8080エラーが出たときの対応

kubectl runを実行すると実行できないときがある。

$ kubectl run ...
The connection to the server localhost:8080 was refused - did you specify the right host or port?

落ち着いてstatusを確認する。

$ kubectl status

minikube
type: Control Plane
host: Stopped
kubelet: Stopped
apiserver: Stopped
kubeconfig: Stopped

単に動いてないことがわかったので、起動する。

$ minikube start

再度kubectl runする。

$ kubectl run ...
pod/demo created

kubectlでcontextを確認する

kubectlが、どのコンテキストにいるか確認できる。

kubectl config current-context

minikube

これは、minikube、つまりローカル環境のcontextにいて、Kubernetesとの通信のcontextにはなっていないことを示す。

基本コマンド類

minikube ip

172.17.0.2

minikube dashboard
kubectl describe deployment postgres
kubectl get Pods
minikube service webapp
kubectl describe service webapp

Name: webapp Namespace: default Labels: app=webapp Annotations: <none> Selector: app=webapp,tier=frontend Type: NodePort IP Family Policy: SingleStack IP Families: IPv4 IP: 10.109.7.196 IPs: 10.109.7.196 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 30020/TCP Endpoints: 172.18.0.6:80,172.18.0.7:80,172.18.0.8:80 Session Affinity: None External Traffic Policy: Cluster Events: <none>

チェックしたIPアドレスにpostしてみて、データベースに値を保存・登録できるのを確認する。

minikubeで試す

Kubernetesをローカルで動かすことは難しいので、代替手段が必要。 minikubeによってローカルで試したり、開発に使うことができる。

kubernetes/minikube: Run Kubernetes locally

導入手順。 minikube start | minikube

kubectlも動かすために必要。 Install and Set Up kubectl on Linux | Kubernetes

minikube start

🏄 Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default

AWS上で動かすためにはまた別のインストールが必要。

export KUBERNETES_PROVIDER=aws; curl -sS https://get.k8s.io | bash

Tasks

Reference

Kubernetesドキュメント | Kubernetes

公式ドキュメント。

Archives

DONE O’Reilly Japan - Kubernetesで実践するクラウドネイティブDevOps

git clone git://github.com/cloudnativedevops/demo.git

マネージドkubernetesが絶対にいい。差別化につながらない面倒な作業は、アウトソーシングするべき。 リソースを解放してコアビジネスへ投入できるようになるから。

メトリクスは「なぜか」という疑問の解決に役立つ。動作している/してないの単純な判断を超えて、監視の新しい次元を切り開く。スピードメータや温度計のように、現在の状況に関する数値情報を与える。 メトリクスは、内部から監視する。従来のブラックボックス監視と異なる。

ソフトウェアはデフォルトで不透明である。ソフトウェア自体を測定できるようにして、何を実行しているかについて人間が推論できるよう情報を生成させることが必要。

4大シグナル。

  • リクエスト
  • エラー
  • 持続期間
  • 飽和度

prometheus/prometheus: The Prometheus monitoring system and time series database. OSSの監視ツール。

クラウドネイティブの世界では、適切なメトリクスとオブザーバビリティデータがなければ、現在の状況を的確に把握するのは極めて難しくなる。

Kubernetes Podcast from Google kubernetesのポッドキャスト。