Kubernetesの設定ファイルの書き方キホン
確認できる環境(minikube)の準備
$ brew install kubectl $ kubectl version --client $ brew install minikube $ minikube version
minikube コマンド
minikube start # 起動(デフォルトはDockerで起動) minikube status # 状態表示 minikube ssh # ホストOSにログイン minikube stop # 停止
※minikubeを起動すると、~/.kube/config
がよしなに変更されて、kubectlコマンドでminikube環境への接続が可能になる。
Pod
- 1個以上のコンテナの集まり
- 1Podに1コンテナ配置することが多い。
- 複数のコンテナでストレージを共有するようなケースでは1Podに複数コンテナを配置する
- Deploymentとセットで定義することが多いが、Pod単体を設定を書くこともできる。
- https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-overview/
Deployment
- Podをどこにいくつ配置するかを管理するもの
- PodはDeploymentと紐付けられてデプロイされる
- Deploymentの設定ファイルの中にPodの設定(Podテンプレート)を含む
- https://kubernetes.io/ja/docs/concepts/workloads/controllers/deployment/
Deploymentの設定ファイル
apiVersion: apps/v1 # 固定値 kind: Deployment # 固定値 metadata: name: nginx-deployment # Deployment名 labels: app: nginx # Podテンプレートと同じ値 spec: # レプリカ数 replicas: 3 # デプロイメントの履歴数 # デフォルト値は10 revisionHistoryLimit: 5 # このDeployamentが管理するPodをどう見つけるかの定義 # 基本はPodテンプレートの`labels`と同じにすれば良い selector: matchLabels: app: nginx # Podテンプレート template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80 # コンテナが開けるポート
Deploymentの作成・確認・削除
$ kubectl apply -f nginx-deployment.yml # 設定をもとにオブジェクトを作成する $ kubectl get deployment # オブジェクトの一覧を表示する $ kubectl describe deployment nginx-deployment # オブジェクトの詳細情報を表示する $ kubectl delete -f nginx-deployment.yml # オブジェクトを削除する
Service
- Podにアクセスするためのゲートウェイ
- Pod自体は壊れたり作成される度にIPアドレスが変わるので、仲立してくれるService経由でアクセスする。
- https://kubernetes.io/ja/docs/concepts/services-networking/service/
Serviceの設定ファイル
kind: Service # 固定値 apiVersion: v1 # 固定値 metadata: # Serviceの名前 # 他のPodから `http://nginx-service` でアクセス可 name: nginx-service spec: # 接続タイプ # - ClusterIP クラスタ内部のみ接続可能(デフォルト値) # - NodePort クラスタ外から接続可能 type: NodePort # どのPodを対象にするか selector: app: nginx # 公開するポート ports: - name: http # 複数ポートを指定するときはname必須 protocol: TCP port: 80 # 受け口ポート targetPort: 80 # 転送先ポート - name: https protocol: TCP port: 443 # 受け口ポート targetPort: 443 # 転送先ポート
Serviceの作成・確認・削除
$ kubectl apply -f nginx-service.yml # 設定をもとにオブジェクトを作成する $ kubectl get service # オブジェクトの一覧を表示する $ kubectl describe service nginx-service # オブジェクトの詳細情報を表示する $ kubectl delete -f nginx-service.yml # オブジェクトを削除する
アクセスできるURLの確認
$ minikube service nginx-service --url http://192.168.64.2:32599
コンテナにログインする
以下のコマンドでPod一覧を表示する。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-5d59d67564-2gzp2 1/1 Running 2 2d1h nginx-deployment-5d59d67564-4mvjs 1/1 Running 2 2d1h nginx-deployment-5d59d67564-wlglr 1/1 Running 2 2d1h
で、NAME値を指定してkubecltコマンドを実行することで、sshログインができる。
kubectl exec --stdin -tty nginx-deployment-5d59d67564-2gzp2 -- /bin/bas