【kubernetes】minikubeにてnginxコンテナを作成
はじめに
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」を入力。
以下のように表示されることを確認。
Discussion