コンテナオーケストレーションツール。
構築 https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
Ingressで外部にサービスを公開する。
通常はクラスタ内のみ。
Layer4まではNode Portで可能。
freshpodはデプロイされているコンテナイメージの更新を検知して、自動で再デプロイするツール。
kube-promptはCLI kubectlの保管ツール、macOS/linuxむけ。
HelmはKubernetes chartsを管理するツール。
ヘルスチェック
livenessProbe, readlinessProbeなど
コンテナ実行時に設定ができる
ロギング
DockerはFluentdなどのログコレクタを使用することが多い。
昔はアプリケーションがログをファイルに書き出すことが標準だったが、
Dockerではログを標準出力すればホスト側ファイル出力されます。
コンテナログのローテート
docker container run -it --rm -p 8080:8080
--log-opt max-size=1m
--log-opt max-file=5
hoge/hoge:latest
FluentdとElasticsearchでログとか
KubernetesでElasticsearchとKibanaでログとか
Docker/Kuberetesでロギングの王道
- 標準出力を前提
- nginx等のミドルウェアのログも標準出力でイメージ構築する
- 標準出力するログは全てJSON形式
- fluent/fluentd-kubernetes-daemonsetで構成されるPodをDeamonSet各ホストに配置
- Kubernetesのリソースにはラベルを適切に設定することでログの検索性を確保
Google Stackdriverなどもログ収集できる
GCP, AWSのロギングモニタリングサービス。
dockerdのチューニング
max-concurrent-downloadsなど
イメージのテスト
デスク容量の枯渇に注意
doker system prune -a が便利とか
Sample
// nginxコンテナ3つからなるグループを作成、myappラベルを付与
kubectl run myapp --image=nginx:1.12 --replicas 3 --labels="app=myapp"
// port 80で受けてmyappラベルのついたコンテナに流すバランサの作成
kubectl create service loadbalancer --tcp 80:80 myapp
// myappに外部からアクセスするためのIP Addressを取得
kubectl get service myapp
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
# https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
p45
GA: General availability
Shell
podで実行されているユーザでシェルを使用
kubectl exec --stdin --tty [pod name] -n [name space] -- /bin/bash
特権ユーザで使用したい場合(docker runtime)
- Container ID: docker://[container id] を取得
kubectl describe pod [pod name] -n [name space]
- Containerが実行されているNodeにログインし、docker経由でシェルにアタッチ。
docker exec -it -u root [container id] /bin/bash
containerd移行
docker
コマンドは使えなくなる
nerdctl --namespace=k8s.io
で代用する