3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kubernetesメモ

3
Last updated at Posted at 2018-12-02

クラスタと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の永続ディスクも作られる

サンプル.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: volumeclaim-airflow
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
PersistentVolumeClaim一覧を確認
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 クラスタ名
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?