k8sを触ってみる- pod を立てるまで


k8s(minikube)を使って、nginxをpodとして立てるまでやってみたときのメモです。

k8sとは

これまでのdockerなどによるコンテナの運用や監視、実行などを自動で行ってくれるツールです。
これまでは、特定のタイミングでサーバー台数をスケールしたりという行為はホストが複数ある場合はネットワークなどの関係で非常に難易度が高い。

↑の問題を解決するためにできたのがk8s。
複数のhostを一つの環境として扱い、操作したり、状態検知をして自動で復旧したりなどが出来る。

ただ、その分扱う難易度というか、概念や考え方がが非常に独特なため、先に用語の解説をしていきます。

ざっくり用語解説

概念


公式サイトより引用

cluster

以下の機能を包括的を管理するもの
masterというものがクラスターを管理している。

node

podを起動して、リソース管理をする機構のこと。一つの物理サーバーやEC2のようなサーバーだと考えれば良いと思います。

pod

k8s上で考えられる最小単位のアプリケーションのこと。podはnodeの中で起動する。podの中には自分のアプリケーションだったり、DBだったりを入れる。大体dockerのコンテナと同じだが、podの場合は複数のコンテナを一つのpodとして扱うときもある。

controller

podに対して操作を行ったり、監視をしたりするものの総称だと考えてください。コントローラーは独自のライフサイクルを持っていて、
コントローラーの種類ごとに監視や更新など用途が違いそれごとにライフサイクルも違います。

service

各pod同士やnodeが疎通するためのネットワークの概念
podのIPアドレスはアーキテクチャ上一定になることがなく、直IP打ちで疎通するのもしんどいので、
単一の疎通のエンドポイントを提供する機能

ツール

minikube

今回はminikubeという簡易版k8sのようなツールで環境を構築していきます。

minikubeとは単一nodeのクラスターを提供するツールで、概念や一通りの使い方を学びやすいので採用しました。

install

ここから自分のOSに合わせてインストール

driver の設定

コンテナに何のツールを使うかを指定する必要があります。
driver の一覧
https://minikube.sigs.k8s.io/docs/reference/drivers/

今回は、使い慣れているdockerを使用します。

minikube config set vm-driver docker

起動

minikube start 

起動したらこんな感じで色々出てきます。

😄  minikube v1.7.3 on Ubuntu 18.04
    ▪ KUBECONFIG=~/.kube/config
✨  Using the docker (experimental) driver based on user configuration
🔥  Creating Kubernetes in docker container with (CPUs=2), Memory=2000MB (7864MB available) ...
🐳  Preparing Kubernetes v1.17.3 on Docker 19.03.2 ...
    ▪ kubeadm.pod-network-cidr=10.244.0.0/16
🚀  Launching Kubernetes ... 
🌟  Enabling addons: default-storageclass, storage-provisioner
⌛  Waiting for cluster to come online ...
🏄  Done! kubectl is now configured to use "minikube"

これでクラスターとnodeが作れたので、次はnodeやpodなどをいじっていきます。

クラスターを操作するツール

minikubeはクラスターを創ることはできますが、それを操作したり、状態を確認したりはできません。
なので、クラスターを操作するツールが必要です。

それが kubectl となります。

install

下記参照
https://kubernetes.io/docs/tasks/tools/install-kubectl/

nodeを確認

インストールしたら以下をnodeを確認します。
minikubeは単一nodeのclusterを創るツールなので、正常に動作していれば、すでにnode立ち上がっているはずです。

kubectl get nodes

正常であればこんな感じになるはずです。

NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   14h   v1.17.3

これでnodeがちゃんと存在していることが確認できたので次はnodeにpodを設置します。

pod を設置する。

podを設置するために、まずpodの中身を定義する必要があります。
というわけでまずは設定ファイルを設定します。

マニフェストの定義

今回はシンプルにnginx を創るだけですので、以下のような定義にしました。

nginx.yaml↓

apiVersion: v1
kind: Pod # 何に対しての設定ファイルかを指定
metadata:
  name: nginx
  labels:
    name: loadBalancer
spec:
  containers:
    - name: lb
      image: nginx
      resources:
        limits:
          memory: "128Mi"
          cpu: "500m"
      ports:
        - containerPort: 8888

pod を設置する

設置するには以下のコマンドを叩きます。

kubectl apply -f ./nginx.yaml

確認してみよう

kubectl get pods

こうなっていたら成功です。

NAME                     READY   STATUS    RESTARTS   AGE
nginx                    1/1     Running   0          32m

おわりに

pod までできましたが、podのnginx にcurl を叩いたり、ローカルからport接続して見れるようにしたいので、
また続きを書こうと思います。

それでは良いk8sライフを