【インフラ_23日目_3回目】Docker_1冊目【ラスト】

2024/08/25に公開

こんにちは投資ロウトです。

背景

・過去に簡単にDockerの学習を行っておりましたが、環境構築を行なっていく必要があり、急ピッチでDockerを習熟してサービスをリリースしていかなければいけない背景があります。

Kubernetes

・Kubernetes・・・コンテナのオーケストレーションツール
・オーケストレーションツール・・・システム全体を管理し、複数のコンテナを運用できる。

今までの学習でのDockerは1台の物理マシンでしたが、Kubernetesは複数台の物理マシンである前提とのこと。

・マスターノード・・・コントロールを行うノード
・ワーカーノード・・・実際に動かすノード
・クラスター・・・Kubernetesシステムの集団のこと

KubernetesはDocker Engineとは別のソフトウェアであるため、KubernetesとCNIをインストールしなければならないとのこと。

またKubernetesでは、Dockerのようなコマンドを打つのではなく、現状のコンテナやボリューム数を保つように、動いていくとのことでした。
→大量のユーザーが利用するようなシステムでは、確かに大量のサーバーが必要となるので、Kubernetesが必要になるんだなと理解しました。

またKubernetesは望ましい状態を保とうとするので、人間がコンテナを削除しては絶対にいけないということでした。(また立ち上がってしまうため)

・Pod・・・Kubernetesがコンテナを管理する単位
・サービス・・・Podをまとめて管理するもの

またLoadBalancerもしくはIngressが、各サービス(Cluster IPが振られたもの)に対して負荷が分散するために振り分けてくれるような仕組みとなっているとのことでした。

またKubernetesは、Google社が開発した技術だったそうですが、Cloud Native Computing Foundationという団体を作って寄贈して、オープンとなったため、急速に普及したという背景があったそうです。

またKubernetesを直接入れるというのは、多くの企業でも少なく、AWSなどクラウドサービスが提供するようなサービスを利用するのが一般的だそうです。またその場合、EC2やFargateをワーカーノードとして構築し、EKSをマスターノードで利用するとのことです。

https://aws.amazon.com/jp/eks/

ただKubernetesが個人でも使いやすいように、Docker desktopにKubernetesが使える設定画面があるとのことでした。

上記の箇所で、Enable Kubernetesにチェックを入れるとのことです。

その後、「Apply & restart」をクリックします。

次にinstallをクリックします。

インストールが完了すると、ここがStatingがrunningになるとのこと。またKubernetesはパソコンのリソースを多く使うとのことで、終わったら先ほどのEnable Kubernetesのチェックを外して、止めておきますしょうとのことでした。

・マニフェストファイル・・・Podやサービスに関する設定
※ファイル名は任意の名前.ymlでいいとのことでした。

kubernetesのファイルを作成

・セレクター・・・管理対象のリソースを特定するための基準を指定する機能
・レプリカ・・・指定されたPodの数を維持するための設定
・テンプレート・・・・Podを作成する際の設定情報を含むもの

作成するのは、以下の3点
・Pod
※後に不要
・Deployment
・サービス

# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: doshiapa0dep
spec:
  selector:
    matchLabels:
      app: doshiapa0
  replicas: 3
  template:
    metadata:
      labels:
        app: doshiapa0
    spec:
      containers:
        - name: doshiapa0container
          image: httpd
          ports:
            - containerPort: 80

kubernetesの実行

kubectl apply -f ファイル名

podを確認する

kubectl get pods

「replicas: 3」で3台を指定しており、3台が問題なく動いている。

サービスファイル

apiVersion: v1
kind: Service
metadata:
  name: doshiapa0ser
spec:
  type: NodePort
  ports:
    - port: 8081
      targetPort: 80
      protocol: TCP
      nodePort: 30080
  selector:
    app: doshiapa0

今度はサービスファイルを作成し、これをすると、ブラウザからアクセスできるようになっているとのこと。

kubectl apply -f ファイル名

サービスは以下で確認できるとのこと。

kubectl get services

ブラウザでアクセスする(http://localhost:30080)

また状態をkubernetesは保持するため、下記のコマンドを実行すると、新しくpodが立ち上がってくるとのことでした。

kubectl delete pod podID

やりかけたものを消すには、デプロイメント、サービスの順番で消していくといいとのことでした。

kubectl delete -f デプロイメントのyamlファイル

デプロイメントを消したので、なくなっている

kubectl get deployment

サービスを削除する

kubectl delete -f デプロイメントのyamlファイル

サービスの確認

kubectl get service

「doshiapa0ser」のサービスが消えていることが確認できる。

一応Podも確認しておく

kubectl get pods

と以上でDockerの基礎的なハンズオンを終えたいと思います。かなり昔触った時より、ITの業務経験が増えたことによって、理解できることも多かったという印象を受けました。実務や自社のサービスに生かせるように、焦らずコツコツ頑張っていきたいと思います。ご精読ありがとうございました。

Discussion