Kubernetes
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
Reference
kelseyhightower/kubernetes-the-hard-way: Bootstrap Kubernetes the hard way on Google Cloud Platform. No scripts.
kubernetesの仕組みから学ぶ。
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のポッドキャスト。