LoginSignup
2
1

【IBM Cloud】IBM Cloud Kubernetes Service上にnginxを立ち上げてみた

Last updated at Posted at 2023-08-22

はじめに

本日はIBM Cloud Kubernetes Service(IKS)にnginxを立ち上げるハンズオンを行ってみたので、その流れを整理したいと思います。
今回の内容にはIBM Cloudのアカウント(無料利用可能)が前提となっています。

nginx立ち上げの準備

IKSのクラスター作成

IKSのクラスターを作成します。ナビゲーションメニューをクリックしてKubernetesクラスターにアクセスします。
スクリーンショット 2023-08-09 17.05.29.png
スクリーンショット 2023-08-09 17.05.45.png

右上のクラスターの作成をクリックします。
スクリーンショット 2023-08-09 17.05.55.png

クラスターの設定を行います。クラスターはVPCとClassicを選択できますが、今回はClassicで作成しています。その他リソースグループの設定やリージョンの設定を行います。
スクリーンショット 2023-08-09 17.07.13.png

また、クラスターのプロファイル(フレーバー)も変更可能です。今回は最小構成+ゾーンあたりのworker nodeも1つに減らして作成しています。そのほかAdd onなどを設定し、作成ボタンをクリックします。
スクリーンショット 2023-08-09 17.07.20.png

クラスター作成が完了されたら以下の画面が表示されるかと思います。詳細の部分にクラスターIDが記載されているので、コピーしておきます。
スクリーンショット 2023-08-09 17.07.52.png

IBM Cloudへのログイン

ターミナルにて、IBM Cloudにログインします。ログインはCLIを使用したワンタイム・パスコードを利用すると便利です。
右上のプロフィールアイコンをクリックし、CLIとAPIにログインをクリックしますと、以下のログインCLIが表示されます。
IBM Cloud CLIをコピーしコマンド入力にてログインを行います。
スクリーンショット 2023-01-27 14.52.45.png
スクリーンショット 2023-01-27 14.52.54.png

その後、以下のコマンドを使ってクラスターを指定します。
Kubernetesの環境を設定するには、exportコマンドが必要です。exportコマンドは、ibmcloud ks cluster configコマンドを入力して取得します。
クラスター画面で取得してクラスターIDに差し替えてターミナルに入力します。
なお、クラスターIDの代わりに、クラスター名を入れても指定は可能です。

クラスター環境指定
ibmcloud ks cluster config --cluster <cluster-id>
クラスター環境指定の結果
<cluster-id> のコンテキストを現在の kubeconfig ファイルに追加しました。
これで、クラスターに対して「kubectl」コマンドを実行できます。 例えば、「kubectl get nodes」を実行します。
クラスターに初めてアクセスする場合、RBAC の同期中に「kubectl」コマンドが数秒間失敗することがあります。

Dockerイメージの準備

Dockerfileの作成

nginxをデプロイするにDockerイメージを使用します。
以下のコードでDockerfileを作成します。

Dockerfile作成
# ベースイメージを指定
FROM nginx

# ローカルの index.html をコンテナのデフォルトパスにコピー
COPY index.html /usr/share/nginx/html/

# ポートを80に変更(nginx デフォルトポート)
EXPOSE 80

# Nginx を起動
CMD ["nginx", "-g", "daemon off;"]

Dockerイメージのビルド

ターミナルでdockerイメージが置いてあるディレクトリーに移動し、dockerイメージをビルドします。

Dockerイメージのビルド
docker build .

IBM Cloud Container Registryに格納

作成したDockerイメージをContainer Registryに格納します。
以下コマンドを使ってContainer Registryにログインします。

Container Registryログイン
ibmcloud cr login

次にイメージをタグづけしてプッシュします。

イメージタグ付け、プッシュ
docker tag <local_image> jp.icr.io/<my_namespace>/<my_repo>
docker push jp.icr.io/<my_namespace>/<my_repo>

Kubernetesの準備

Kubernetesマニフェストの作成

Kubernetes上に何かを立ち上げるためには、yamlファイルを使ってデプロイする必要があります。作成yamlは「deployment.yaml」と「service.yaml」です。この二つのyamlファイルの作成により、IKS上にnginxがデプロイされ、serviceで外部からアクセスできるようになります。

今回私は以下のように作成しました。

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: iks-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: iks
  template:
    metadata:
      labels:
        app: iks
    spec:
      containers:
      - name: iks-container
        image: jp.icr.io/moon-test/nginx:latest
        ports:
        - containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
  name: iks-service
spec:
  selector:
    app: iks
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

Kubernetes マニフェストの適用

作成したマニフェストを以下のコマンドを使ってKubernetesクラスターに適用します。

マニフェストの適用
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

結果の確認

公開されたIPアドレスを確認します。
まず、以下のコマンドにてKubernetes上に適用されたか確認します。

デプロイの確認
kubectl get all
結果例
NAME                                  READY   STATUS    RESTARTS   AGE
pod/iks-deployment-6584775c6f-qwz2q   1/1     Running   0          5s

NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/iks-service   NodePort    172.21.193.230   <none>        80:31108/TCP   4s
service/kubernetes    ClusterIP   172.21.0.1       <none>        443/TCP        37s

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/iks-deployment   1/1     1            1           5s

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/iks-deployment-6584775c6f   1         1         1       5s

その後、現在実行されているworker nodeの情報を得るために、以下のコマンドを入力します。
クラスターの指定と同様に、にはクラスター名を入力しても構いません。

worker nodeの確認
ibmcloud ks worker ls --cluster <cluster-id>
結果例
OK
ID                                                    パブリック IP   プライベート IP   フレーバー          状態     状況    ゾーン   バージョン   
kube-cj84sg2t05u16hk6drig-moontest-default-000001ca   161.202.97.14   10.133.175.181    u3c.2x4.encrypted   normal   Ready   tok02    1.26.7_1546  

上記結果で取得して<パブリックIP>:<ノードポート>を入力するとnginx画面が表示されるようになります。今回の場合は、161.202.97.14:31108ですので、こちらのIPでアクセスすると、問題なくnginxがデプロイされていることがわかります。
スクリーンショット 2023-08-09 17.40.31.png

最後に

今回はDockerfileやyamlを作成し、それをもってIBM Cloud Kubernetes Serviceのクラスター上にnginxを立ち上げる流れを整理しました。次回にはこちらのnginxを実際いじってみたり、アプリケーションを載せてみることに挑戦してみたいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1