はじめに
<バージョン>
minikube: v1.9.2
前回の記事、【AWS】Docker内のコンテナにアクセスしたいではdockerコマンドで
httpdにアクセスしましたが、今回はそれをKubernetesで行ってみます。
やりたいこととしては、
(1)ローカルストレージ「/data/html」に、Pod内にあるnginxのディレクトリ
「/usr/share/nginx/html」をマウントする。
(2)ローカルの「/data/html/index.html」をnginxに表示させる。
※今回は、ローカルPCにVMを作成して作業しています(AWSに構築していません)
1.マニフェストファイル作成
まずはホームディレクトリ(任意)に以下のマニフェストファイルを作成します。
ポイント
(1)docker imageをdockerhubから持ってくる。
(2)ローカルストレージ「/data/html」に、Pod内にあるnginxのディレクトリ
「/usr/share/nginx/html」をマウントする。
(3)serviceの種類をNodePortにして、外部からの接続ポート(今回は30000番)を指定する。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: web
env: test
spec:
containers:
- name: nginx
image: nginx:1.17.2-alpine # ポイント(1)
volumeMounts:
- name: storage
mountPath: /usr/share/nginx/html # ポイント(2)
volumes:
- name: storage
hostPath:
path: "/data/html" # ポイント(2)
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: web-test
spec:
type: NodePort # ポイント(3)
selector:
app: web
env: test
ports:
- port: 80
nodePort: 30000 # ポイント(3)
2. htmlファイル作成
以下の手順でローカルにindex.htmlを作成します。
mkdir -p /data/html
echo "hello world!" > /data/html/index.html
3. nginxの起動
まずは「kubectl apply」のコマンドでnginxを起動させます。
-f で作成したマニフェストファイルを指定します。
kubectl apply -f nginx-test.yml
nginxを起動させたら、「kubectl get」コマンドで状態確認をします。
[root@localhost ~]# kubectl get -f nginx-test.yml
NAME READY STATUS RESTARTS AGE
pod/nginx 1/1 Running 0 3s # STATUSがRunningになっている
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web-test NodePort <ip-addr> <none> 80:30000/TCP 3s # ポートフォワーディングが適用されている
実際にPodにアクセスしてマウントされているか確認しましょう。
コマンドは「kubectl exec -it pod/ sh」です。
[root@localhost ~]# kubectl exec -it pod/nginx sh
/ # cd /usr/share/nginx/html
/usr/share/nginx/html # ls
index.html # ファイルがマウントされていることを確認
/usr/share/nginx/html # cat index.html
hello world! # ファイルの中身が正しいことを確認
/usr/share/nginx/html # exit # exitでPodから抜ける
[root@localhost ~]#
4. webサイトへアクセス
ブラウザを起動してアクセスし、「hello world!」が表示されたら完了です。
URLは「http://<作業端末ののIPアドレス>:30000」です。
ちなみに、ローカルでも確認することが可能です。
[root@localhost ~]# curl http://localhost:30000
hello world!