コピペコードで快適生活

明日使えるソースを自分のために

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

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

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

参考