Kubernetes

Kubernetesクラスター構築ガイド: kubeadmとUbuntu 22.04でプロダクション環境を構築する方法

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Kubernetesクラスター構築の概要と目的

Kubernetesを実環境で運用するには、信頼性の高いクラスター構築が不可欠です。本記事では、kubeadmを用いて最小限なプロダクション環境を構築する手順を解説します。特にUbuntu 22.04を選択することで、Linuxベースの安定性と最新のパッケージ管理が得られることから、DevOpsエンジニアやシステム管理者にとって実務に即した選択肢となります。

kubeadm選択の理由

kubeadmはKubernetes公式ツールであり、手順が明確で初期設定が簡潔な点が特徴です。また、プロダクション環境でも動作する最小限な構成が可能であるため、学習や本番導入の両方に適しています。

Ubuntu 22.04での環境構築の特徴

Ubuntu 22.04はLTS(長期サポート)バージョンであり、セキュリティアップデートが5年間提供される点で信頼性が高いです。さらに、カーネルの最新版やネットワークスタックが整っており、CalicoなどのCNIプラグインと相性も良好です。


クラスター構成設計の基本概念

Kubernetesクラスターを構築する際には、ノード間の役割分担やコントロールプレーンの理解が重要です。本セクションでは、クラスター全体のアーキテクチャと主要コンポーネントについて解説します。

マスターノードとワーカーノードの役割

Kubernetesクラスターはマスターノード(コントロールプレーンノード)とワーカーノードから成り立ちます。

  • マスターノード: クラスター全体を管理する中心的な存在で、API Serverやetcdなどのコンポーネントが配置されます。
  • ワーカーノード: アプリケーションコンテナを実行し、マスターノードの指示に従って稼働します。

以下に役割を比較表形式で示します:

項目 マスターノード ウォーカーノード
主要機能 API処理、スケジューリング コンテナの実行
コンポーネント API Server, etcd, Scheduler kubelet, kube-proxy
セキュリティリスク 高い(攻撃面が広い) 低い(マスターと分離可能)

コントロールプレーンの構成要素

コントロールプレーンはクラスターの「脳」となり、以下のコンポーネントで構成されます。

  1. API Server: クラスター内の全ての通信を処理する中心となるサーバーです。外部からのリクエストを受けて、他のコンポーネントに命令を伝えます。
  2. etcd: クラスター全体の状態(構成やレプリカ情報など)を永続的に保存する分散型データベースです。
  3. Scheduler: ワーカーノードに適したリソースを選定し、コンテナを配置します。

blockquote
これらのコンポーネントは、クラスターの可用性やスケール性を支える基盤となるため、十分な理解が必要です。


kubeadmによる初期設定フロー

Ubuntu 22.04上でkubeadmを用いてクラスターを構築するには、以下の手順に従います。事前準備からクラスターの初期化までを具体的に解説します。

OSベースの環境整備

クラスター構築の前提として、以下の設定が必要です:

  1. SSHアクセス設定: マスターノードとワーカーノード間でSSH通信が可能であること。
  2. カーネルモジュールの確認: br_netfilterip_vsなどのモジュールが有効になっていることを確認する。
  3. swap無効化: Kubernetesはswapをサポートしていないため、/etc/default/grubGRUB_CMDLINE_LINUX+="swapoff"を設定し、update-grubを実行します。

kubeadmのインストール手順

Ubuntu 22.04では、以下のようにkubeadmをインストールできます:

  1. APTリポジトリの追加:
    bash
    apt-get update && apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-jammy main
    EOF

  2. パッケージのインストール:
    bash
    apt-get update
    apt-get install -y kubelet kubeadm kubectl

  3. バージョン確認:
    bash
    kubeadm version
    # 出力例: kubeadm version: &version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.0"}

クラスター初期化コマンド実行

マスターノードで以下のようにクラスターを初期化します:

出力例:

blockquote
エラーメッセージが簡潔なため、トラブルシューティングを困難にしています。kubeletサービスの状態や/etc/kubernetes/admin.confファイルの有無を確認してください。

この出力結果に従い、kubeadm joinコマンドをワーカーノードに実行させます。


CNIプラグイン(Calico)の導入方法

クラスターが構築された後は、ネットワーク機能を担うCNIプラグインの設置が必要です。本セクションでは、CalicoのHelmチャートによるインストール手順とネットワークポリシーの基本設定について解説します。

Calicoの Helm チャートによる展開

以下のように、CalicoをHelmでインストールします:

  1. Helmリポジトリの追加:
    bash
    helm repo add projectcalico https://projectcalico.docs.tigera.io/charts
    helm repo update

  2. チャートの展開:
    bash
    helm install calico projectcalico/tigera-operator --namespace calico-system --create-namespace

blockquote
--namespace calico-system必須です。指定がないと、デフォルト名前空間でインストールされる可能性があり、予期せぬ動作を引き起こします。

  1. Calicoコンポーネントの確認:
    bash
    kubectl get pods -n calico-system
    # 出力例: NAME READY STATUS RESTARTS AGE
    # calico-kube-controllers 1/1 Running 0 2m

ネットワークポリシーの基本設定

Calicoでネットワークポリシーを設定するには、YAMLファイルを作成し以下のように適用します:

この設定により、app=nginxのポッドに対してHTTP通信を許可するネットワークポリシーが作成されます。


ノードの役割分担と拡張性確保

クラスターはマスターノード単体では限界があるため、ワーカーノードを追加することで拡張性を高めます。ここではkubeadm joinによるノード追加手順と、ラベルによるアプリケーションの制御方法を解説します。

ワーカーノードへのJOIN手順

マスターノードで生成されたkubeadm joinコマンドをワーカーノードに実行させます:

成功時の出力:

ラベルと選択子によるアプリケーション配置制御

ノードにラベルを付与することで、特定のアプリケーションを該当ノードにのみデプロイできます。

  1. ラベルの追加:
    bash
    kubectl label nodes worker-node-01 role=app-server

  2. 選択子によるポッドの配置指定(Deployment例):
    yaml
    spec:
    replicas: 3
    selector:
    matchLabels:
    app: nginx
    template:
    metadata:
    labels:
    app: nginx
    spec:
    nodeSelector:
    role: app-server

このようにすることで、role=app-serverのノードにのみNginxを実行するポッドが配置されます


クラスター検証用ポッドの起動手順

クラスター構築後は、動作確認のためにテスト用ポッドを起動します。ここではnginxポッドのデプロイメントとステータス確認の手順を具体的に示します。

nginxポッドのデプロイメント

以下のコマンドで簡単なnginxポッドを作成します:

出力例:

次に、このポッドを外部からアクセスできるように、Serviceオブジェクトを定義します:

blockquote
nodePortの値(例:30000)が他のサービスと競合する可能性があるため、クラスター環境に応じて別のポートを使用することを推奨します。

ロギングとステータス確認

ポッドの動作を確認するには、以下のコマンドを使用します:

  1. ポッド一覧:
    bash
    kubectl get pods
    # 出力例: NAME READY STATUS RESTARTS AGE
    # nginx-7df8569d84-kq2wz 1/1 Running 0 2m

  2. ポッドのログ取得:
    bash
    kubectl logs nginx-7df8569d84-kq2wz
    # nginxアクセスログが表示される

  3. Service確認(NodePort経由):
    ブラウザやcurlで以下のURLにアクセスして、動作を検証します:
    http://<マスターノードIP>:30000

blockquote
上記手順により、Kubernetesクラスターの基本的な動作が確認できます。この段階で問題なければ、実環境での導入が可能です。


スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Kubernetes