Edited at

【k8s】YAMLでNginxをクベってみた【kubernetes】

004.png

前回の記事では、kubernetesのさわりの部分を紹介しました。

今回はYAMLを利用して構築してみました。


目次


  1. 準備

  2. デプロイメントの作成

  3. サービスの作成

  4. もしminikubeでloadbalancerが利用できなかった場合

  5. 参考にしたリンク


準備

minikubeの稼働状況を確認、ダッシュボードを起動する。

$ minikube status 

host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.114

$ minikube dashboard
Opening http://127.0.0.1:53536/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ in your default browser...


デプロイメントの作成

デプロイメントの作成をしてみましょう。

デプロイメントは、レプリカセットなどのリリースに関する管理を行います。

こちらを参考にマニフェストファイル(yaml)を作成。レプリカはなんとなく「1」にしました。


nginx-deployment.yaml

apiVersion: apps/v1

kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

作成したnginx-deployment.yamlを指定してkubectl applyする。

$ kubectl apply -f ./nginx-deployment.yaml 

ダッシュボードで確認してみると、「デプロイメント」「ポッド」「レプリカセット」が立ち上がっているのが分かる。

002.png

もし「反映されて困るが結果だけ知りたい」という場合は、kubectl applyコマンドに--dry-runオプションをつけて実行しましょう。


サービスの作成

サービスを作成しましょう。

サービスでは、Podとの通信ポリシーを定義します。

ports.portに記載したポート番号をports.targetPortのポート番号へ転送します。

今回の場合だと、8080番ポートへアクセスすると80番ポート(Nginxコンテナで利用するように指定したポート)へ転送するようになってます。


nginx-service.yaml

apiVersion: v1

kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- name: http
port: 8080
targetPort: 80 ##nginx-deployment.yamlのcontainerPortと同値

typeの項目に注目してみると、LoadBalancerと記載があります。

サービス作成時にLoadBalancerタイプを指定するとホストから直接アクセスが可能となります。

ブラウザを開き、http://localhost:8080/ へアクセスすると、NginxのWelcomeページが表示されました。

やったぜ(☝︎ ՞ਊ ՞)☝︎

Welcome_to_nginx_.png


もしminikubeでLoadBalancerが利用できなかった場合

minikubeではLoadBalancerタイプをサポートしていないという情報をちょろっと見かけました。

僕の場合は特に問題なくMacのminikubeでLoadBalancerタイプが利用できていたのですが、もしできなかった場合は以下をお試しください。

※追記2019/08/02

コメントに記載してしまいましたが、僕が実施していた時、実はdocker-for-desctopで稼働していたから問題なく動作していた可能性があります。

試しにdocker-for-desktopをcontextsに設定し、nodeもminikubeではなくdocker-for-desktopであることを確認。

localhost:8080に接続したら正常にアクセスできました。

逆にminikubeをnodeにして起動すると、localhost~ではアクセスできず、minikube service サービス名 --urlのURLでアクセスできました。

(「localhost」ではなく、ポート番号も30000番台のポート番号になってました。これはこれで正しい。)

もしminikubeでLoadBalancerタイプを利用していた場合は以下を参考にdocker-for-desktopへ切り替えましょう。



  • こちらの手順に従って、dicker-for-desktopのkubernetesを起動しましょう。

  • そうしましたら以下のコマンドでnodeが「docker-for-desktop」となるように設定。

## 変更前===================

$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
docker-for-desktop docker-for-desktop-cluster docker-for-desktop
* minikube minikube minikube

$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready master 4d v1.10.0

## 変更===================
$ kubectl config use-context docker-for-desktop

## 変更後===================
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* docker-for-desktop docker-for-desktop-cluster docker-for-desktop
minikube minikube minikube

$ kubectl get node
NAME STATUS ROLES AGE VERSION
docker-for-desktop Ready master 21d v1.10.11

nodeが切り替わったので多分きっと恐らくLoadBalancerがローカルで使えます。


参考にしたリンク

次回はYAMLを拡張して複数コンテナの配置やAutoScalingなど色々やってみます。