0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1日で分かる!Kubernetesの基本と実装テクニック①

Posted at

はじめに

Kubernetes(クバネティス)は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースのプラットフォームです。
このチュートリアルでは、Kubernetesの基本的な概念から、ローカル環境でのセットアップ、シンプルなアプリケーションのデプロイまでを解説します。

前提条件

  • OS: Windows, macOS, または Linux
  • 仮想化ソフトウェア: VirtualBox, VMware, または他のサポートされた仮想化ツール(Minikubeを使用する場合)
  • 基本的なコマンドライン操作の知識

Kubernetesとは

Kubernetesは、コンテナ化されたアプリケーションの自動デプロイ、スケーリング、管理を行うオープンソースのプラットフォームです。
Googleによって開発され、現在はCloud Native Computing Foundation(CNCF)によって管理されています。
Kubernetesは、複数のホスト上で動作するコンテナを効率的に管理し、高い可用性とスケーラビリティを提供します。

主な特徴

  • 自動デプロイとロールバック
  • サービスディスカバリとロードバランシング
  • ストレージオーケストレーション
  • 自動スケーリング
  • 自己修復機能
  • シークレットと構成管理

Kubernetesアーキテクチャ

Kubernetesのアーキテクチャは、マスターコンポーネントとノードコンポーネントで構成されています。
以下の図は、Kubernetesクラスタの基本的な構成を示しています。

ローカル環境へのセットアップ

このチュートリアルでは、ローカルマシンにKubernetesクラスタをセットアップするためにMinikubeを使用します。
Minikubeは、ローカル開発環境でKubernetesを実行するためのツールです。

Minikubeのインストール

  1. 仮想化ソフトウェアのインストール

    Minikubeは仮想マシン上でKubernetesを実行するため、仮想化ソフトウェアが必要です。
    ここではVirtualBoxを例にします。

  2. Minikubeのインストール

    • macOS:

      brew install minikube
      
    • Windows:

      choco install minikube
      
    • Linux:

      curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
      sudo install minikube-linux-amd64 /usr/local/bin/minikube
      

kubectlのインストール

kubectlはKubernetesクラスタを操作するためのコマンドラインツールです。

  • macOS:

    brew install kubectl
    
  • Windows:

    choco install kubernetes-cli
    
  • Linux:

    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    chmod +x kubectl
    sudo mv kubectl /usr/local/bin/
    

Minikubeの起動

Minikubeを起動してKubernetesクラスタを作成します。
※このときに、Dockerを起動しておいてください。

minikube start

起動が完了すると、kubectlを使用してクラスタを操作できるようになります。

kubectl cluster-info

基本的な概念

Kubernetesを理解するためには、以下の基本的な概念を押さえておくことが重要です。

クラスタとノード

  • クラスタ: Kubernetesの実行環境。複数のノード(物理または仮想マシン)で構成されます。
  • ノード: クラスタ内の単一のマシン。各ノードはKubernetesのコンポーネント(kubelet、コンテナランタイムなど)を実行します。

Pod

PodはKubernetesにおける最小のデプロイメント単位で、1つ以上のコンテナを含みます。
コンテナは同じネットワーク名前空間とストレージを共有します。

Deployment

DeploymentはPodの宣言的な更新を管理します。
アプリケーションのバージョンアップやスケーリングを簡単に行うことができます。

Service

ServiceはPodへの安定したネットワークアクセスを提供します。
ロードバランシングやサービスディスカバリの機能を持っています。

Kubernetesリソースの関係

以下の図は、クラスタ内でのKubernetesリソース間の関係を示しています。

シンプルなアプリケーションのデプロイ

ここでは、シンプルな「Hello World」アプリケーションをKubernetesクラスタにデプロイします。

Hello Worldアプリの作成

まず、簡単なウェブサーバーアプリケーションを用意します。ここでは既存のDockerイメージを使用します。

# hello-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: hello-container
        image: hashicorp/http-echo
        args:
        - "-text=Hello, Kubernetes!"
        ports:
        - containerPort: 5678

Deploymentの作成

上記のYAMLファイルを適用してDeploymentを作成します。

kubectl apply -f hello-deployment.yaml

Deploymentのステータスを確認します。

kubectl get deployments
kubectl get pods

Serviceの作成とアクセス

次に、Deploymentで作成されたPodにアクセスするためのServiceを作成します。

# hello-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-service
spec:
  type: NodePort
  selector:
    app: hello
  ports:
    - protocol: TCP
      port: 80
      targetPort: 5678
      nodePort: 30007

Serviceを適用します。

kubectl apply -f hello-service.yaml

Serviceの詳細を確認します。

kubectl get services

Minikubeを使用している場合、以下のコマンドでサービスにアクセスできます。

minikube service hello-service

ブラウザが開き、「Hello, Kubernetes!」と表示されるはずです。

アプリケーションのスケーリング

Deploymentを使用すると、簡単にPodの数を増減させることができます。

例えば、Podの数を4にスケールアップするには以下のコマンドを実行します。

kubectl scale deployment hello-deployment --replicas=4

スケーリングの状態を確認します。

kubectl get deployments
kubectl get pods

アプリケーションの更新

Deploymentを使用すると、アプリケーションの新しいバージョンへのローリングアップデートが容易です。

例えば、異なるメッセージを表示するように更新します。

  1. hello-deployment.yaml を編集し、args のテキストを変更します。

    args:
    - "-text=Hello, Kubernetes! Updated version."
    
  2. 更新を適用します。

    kubectl apply -f hello-deployment.yaml
    
  3. ローリングアップデートの進行状況を確認します。

    kubectl rollout status deployment hello-deployment
    
  4. アプリケーションにアクセスし、メッセージが更新されたことを確認します。

クリーンアップ

ローカル環境のクラスタとリソースを削除してクリーンアップします。

kubectl delete -f hello-service.yaml
kubectl delete -f hello-deployment.yaml
minikube stop
minikube delete

まとめ

このチュートリアルでは、Kubernetesの基本的な概念からローカル環境でのセットアップ、シンプルなアプリケーションのデプロイ、スケーリング、更新までを学びました。
Kubernetesは非常に強力で柔軟なプラットフォームであり、実際の運用環境ではさらに多くの機能やベストプラクティスがあります。

次のステップとして、Persistent Volumes、ConfigMaps、Secrets、Helmなどの高度な機能を学ぶことをお勧めします。


参考資料

0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?