クラスタとNode
クラスタに参加しているNode一覧を取得
kubectl get nodes
Nodeの使用状況を確認する
kubectl describe nodes
Namespace
クラスタの中にさらにクラスタを作成する。
1つのクラスタで複数チームで開発する時などに使用するらしい。
https://thinkit.co.jp/article/13542
Namespace一覧を取得する
kubectl get namespace
Pod
コンテナ集合体の単位で、最低1つのコンテナを持つ。
Kubernetesでは、(コンテナが1つの場合でも)Pod単位でデプロイする。
Podをデプロイする
kubectl apply -f マニフェストファイル
# -f マニフェストファイルのパスを指定
# マニフェストファイルとはKubernetesの各種リソースを定義するファイル
Podの一覧を取得する
kubectl get pod
Pod内のコンテナに入る
kubectl exec -it Pod名 sh -c コンテナ名
Pod内のコンテナの標準出力を出す
kubectl logs -f Pod名 -c コンテナ名
Podを削除する
kubectl delete pod Pod名
マニフェストファイルベースで削除する
kubectl delete -f マニフェストファイル
Pod詳細を確認する
Podが立ち上がらないときに状態を確認する
kubectl describe pod <pod-name>
マニフェストファイル
参考
ネット見てたり、Kubernetes APIリファレンス見てたりすると何となくわかってくる(ような気がする)
そもそもYAMLの書式よくわからない場合は、こちら参照
apiVersion
apiVersion はオブジェクトのSchemaのVersionを指定する。
kind
kind は作成するObject名を指定する。
Podを作成するために Pod を指定。
metadata
ObjectのMetadataを指定する。
spec
spec はオブジェクトの期待する状態を定義する。要はこのフィールドが具体的な設定を指定する場所。
ReplicaSet
同じ仕様のPodを複数生成、管理する。
yamlファイルのkindをReplicaSetにする。
GKE
クラスタの作成(GKE)
なるべく安くpreemptibleなf1-microインスタンスで立ち上げる
gcloud container clusters create <クラスタ名> --preemptible --machine-type=f1-micro --num-nodes=3 --disk-size=10 --zone=<ゾーン名>
kubectlへの認証情報の設定
gcloud container clusters get-credentials クラスタ名 --zone=ゾーン
dockerイメージをタグ付けしてビルド
# Container Registryの格納先をタグにしてDockerイメージをビルドする
# タグの形式は、asia.gcr.io/[GCP_PROJECT_ID]/[IMAGE_NAME]:[TAG]
docker image build -t asia.gcr.io/GCP_PROJECT/test:1.0 .
Container Registryへのpush
# GCP_PROJECTはプロジェクト名ではなくプロジェクトID
gcloud auth configure-docker
docker -- push asia.gcr.io/GCP_PROJECT/test:1.0
Container Registryのイメージ一覧
gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]
# [HOSTNAME]はasia.gcr.io等
データ永続化
GKEでは、VolumeClaimのyamlをアプライするとGCEの永続ディスクも作られる
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: volumeclaim-airflow
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
kubectl get pvc
個人的ハマりポイント
gcloud dockerサポート切れ
gcloud docker は Docker 18.03 以降をサポートしないらしいので、
dockerクライアントが18.03以降で、gcloud docker使ってコンテナレジストリにアップしていると、pod作るときのイメージのpullでエラーになってしまう
その時は、gcloud auth configure-dockerして、docker -- push 〜でアップし直す。
pod立ち上がらない
参考
describe podしてもよくわからないときは、podのyamlファイルにcommand追加してみる
立ち上げたpodにkubectl execでアクセスしようとするとフリーズする
クラスタのスペックが足りない可能性が高いので、オートスケールをONにするか、
ノードスペックを上げたクラスタを立ち上げる
Cloud Build使用時のエラー
ResponseError: code=403, message=EXTERNAL: Required "container.clusters.get" permission(s) for ~
が出るときは、CloudBuildのサービスアカウントにGKEの管理者の権限を追加する
ingress作成時のヘルスチェック
参考
ヘルスチェックしにいくページのステータスが200で返ってこないとヘルスチェックがエラーになる。
Airflowでユーザー認証設定してる場合は、リダイレクトが発生するのでヘルスチェックは「/」のままだとエラーになるので、こちら参考にヘルスチェック先を変更する。
どの時点でステータス200になるかは、こちらで、serviceをLoadBalancerタイプにして確認しておく。
その他
コンテキスト
接続に使用する情報のこと
kubectl config get-contexts
kubectl config delete-context クラスタ名