📝

【kubernetes】minikubeにてnginxコンテナを作成

2021/03/13に公開

はじめに

AWS上に作成済みのEC2インスタンス(Ubuntu)上にminikube環境を構築し、nginxのページが表示されるところまで実施。

minikubeとは?

  • ローカル環境でkubernetesを簡単に実行するためのツール
  • 1台のPC上に仮想的にkubernetesの環境を構築することが可能
  • Windows/Linuxのどちらでもインストールが可能

構成図

EC2(ubuntu)のスペック

項目 設定
VM名 kubetest
インスタンスタイプ t3.small
OS Ubuntu
vCPU 2
メモリ(GiB) 2
ルートデバイス名 /dev/sda1:8GB

※必要最低限の構成になります。

前提

  • AWS内のVPCやEC2等の環境は事前に構築済み
  • EC2(ubuntu)は作成した直後の状態
  • 以下のセキュリティグループを使用

※SSH(22ポート)のみ開放している状態

構築手順

〇大まかな手順
1.各パッケージインストール~minikube起動
2.nginxコンテナ作成
3.Pod(コンテナ)を水平スケーリング(1→3)
4.ロードバランサー作成
5.WEBページ表示確認

1.各パッケージインストール~minikube起動

  • kubectlインストール・設定

※kubectlとは、Kubernetesクラスターを制御するためのコマンドラインツールになります。

①kubectlをインストール

コマンド
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

②実行権限追加

・事前確認

実行権限付与前
ubuntu@ip-192-168-0-132:~$ ls -l
total 39320
-rw-rw-r-- 1 ubuntu ubuntu 40263680 Mar 13 00:30 kubectl
ubuntu@ip-192-168-0-132:~$

・実行権限付与

コマンド
chmod +x ./kubectl

・実行権限付与後

実行権限付与後
ubuntu@ip-192-168-0-132:~$ ls -l
total 39320
-rwxrwxr-x 1 ubuntu ubuntu 40263680 Mar 13 00:30 kubectl
ubuntu@ip-192-168-0-132:~$

③ファイル移動

所定の場所に「kubectl」ファイルを移動させる。

コマンド
sudo mv ./kubectl /usr/local/bin/kubectl

ファイルが移動されたことを確認

ファイル確認
ubuntu@ip-192-168-0-132:~$ ls -l /usr/local/bin/kubectl
-rwxrwxr-x 1 ubuntu ubuntu 40263680 Mar 13 00:30 /usr/local/bin/kubectl
ubuntu@ip-192-168-0-132:~$
  • Dockerインストール・設定

※Dockerは、Kubernetesコンポーネントを起動するために使用します。

①Dockerをインストールする。

コマンド
sudo apt-get update && \
    sudo apt-get install docker.io -y

②Dockerバージョン確認

Dockerがインストールされたことを確認

コマンド
docker -v
実行例
ubuntu@ip-192-168-0-134:~$ docker -v
Docker version 19.03.8, build afacb8b7f0
ubuntu@ip-192-168-0-134:~$
  • Minikubeインストール

①minikubeインストール

コマンド
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

②minikubeバージョン確認

minikubeがインストールできたことを確認。

コマンド
minikube version
実行結果
ubuntu@ip-192-168-0-132:~$ minikube version
minikube version: v1.18.1
commit: 09ee84d530de4a92f00f1c5dbc34cead092b95bc
ubuntu@ip-192-168-0-132:~$
  • conntrackインストール

※conntrackとは、minikubeを起動させるために必要なパッケージになります。

①conntrackインストール

コマンド
sudo apt-get install conntrack

②conntrackがインストールできたことを確認

コマンド
apt list --installed | grep conntrack

以下2つのパッケージが存在することを確認
・conntrack/focal,now 1:1.4.5-2 amd64
・libnetfilter-conntrack3/focal,now 1.0.7-2 amd64

実行結果
ubuntu@ip-192-168-0-134:~$ apt list --installed | grep conntrack

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

conntrack/focal,now 1:1.4.5-2 amd64 [installed]
libnetfilter-conntrack3/focal,now 1.0.7-2 amd64 [installed,automatic]
ubuntu@ip-192-168-0-134:~$
  • minikube起動

①rootユーザーに切り替える。

コマンド
sudo -i
実行例
ubuntu@ip-192-168-0-132:~$ sudo -i
root@ip-192-168-0-132:~#

②minikubeを起動する。

コマンド
minikube start --vm-driver=none

③minikubeの起動状態を確認する。

コマンド
minikube status
実行例
root@ip-192-168-0-134:~# minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
timeToStop: Nonexistent

root@ip-192-168-0-134:~#

2.nginxのDeploymentを作成

※Deploymentとは、KubernetesでPodやReplicaSetを管理するためのオブジェクトになります。

①nginxのDeploymentを作成
→Deploymento名は「my-nginx」とする。

コマンド
kubectl create deployment --image nginx my-nginx

※Pod(コンテナ)が一緒に作成される。

②PodとDeploymentが存在していることを確認

コマンド
kubectl get deployment,pods
実行例
root@ip-192-168-0-134:~# kubectl get deployment,pods
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   1/1     1            1           10s

NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-6b74b79f57-jvxrz   1/1     Running   0          10s
root@ip-192-168-0-134:~#

3.Pod(コンテナ)を水平スケーリング(1→3)]

①スケーリング前の状態を確認

「deployment」と「pod」が1つずつであることを確認

コマンド
kubectl get deployment,pods
実行例
root@ip-192-168-0-134:~# kubectl get deployment,pods
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   1/1     1            1           10s

NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-6b74b79f57-jvxrz   1/1     Running   0          10s
root@ip-192-168-0-134:~#

②podを1→3にスケールさせる。

コマンド
kubectl scale deployment --replicas 3 my-nginx
実行結果
root@ip-192-168-0-134:~# kubectl scale deployment --replicas 3 my-nginx
deployment.apps/my-nginx scaled
root@ip-192-168-0-134:~#

③スケーリング後の状態を確認

「pod」が3つに増えたことを確認

コマンド
kubectl get deployment,pods
実行例
root@ip-192-168-0-134:~# kubectl get deployment,pods
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-nginx   3/3     3            3           63m

NAME                            READY   STATUS    RESTARTS   AGE
pod/my-nginx-6b74b79f57-jvxrz   1/1     Running   0          63m
pod/my-nginx-6b74b79f57-k4vw8   1/1     Running   0          105s
pod/my-nginx-6b74b79f57-lr2mw   1/1     Running   0          105s
root@ip-192-168-0-134:~#

4.ロードバランサー作成

①3つのコンテナ(Pod)をロードバランシングするための「Service」オブジェクトを作成する。

コマンド
kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
実行例
root@ip-192-168-0-134:~# kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
service/my-nginx exposed
root@ip-192-168-0-134:~#

②サービス確認

「LoadBalancer」が存在することを確認する。

コマンド
kubectl get service
実行例
root@ip-192-168-0-134:~# kubectl get service
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1        <none>        443/TCP        10h
my-nginx     LoadBalancer   10.107.140.156   <pending>     80:31233/TCP   17m
root@ip-192-168-0-134:~#

③セキュリティグループの設定を変更

EC2インスタンスに紐づいているセキュリティグループのインバウンドルール設定を追加する。

・追加する設定

項目 設定
タイプ カスタムTCP
プロトコル TCP
ポート範囲 31233
ソース 0.0.0.0/0

5.WEBページ表示確認

ブラウザのURLに「パブリックIPアドレス:31233」を入力。
以下のように表示されることを確認。

参考

〇動画
今さら人に聞けないKubernetes入門!AWS環境で動かす25分の高速学習【有名ツールのみ使用】

〇記事
Minikubeを使用してローカル環境でKubernetesを動かす
Minikubeとは

Discussion