SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社の本(AD)

Kubernetes使いになるためにPodをつくってみる 『つくって、壊して、直して学ぶ Kubernetes入門』より

  • このエントリーをはてなブックマークに追加

 「Kubernetesは難しい」と感じている方におすすめの入門書『つくって、壊して、直して学ぶ Kubernetes入門』(翔泳社)。今回は本書から、実践的な知識を習得する第一歩として、Kubernetesの基礎の基礎であるPodの作り方を解説します。また、本書でどんなことが学べるのかも紹介します。

  • このエントリーをはてなブックマークに追加

 本記事は『つくって、壊して、直して学ぶ Kubernetes入門』(高橋あおい著、五十嵐綾監修)の「Chapter 3 全体像の説明」と「Chapter 4 アプリケーションをKubernetesクラスタ上につくる」から一部を抜粋したものです。掲載にあたって編集しています。

本書での学習の流れ

全体像の説明

 本書では3つのパートに分かれています。

●Part 1:基礎的な知識と環境構築を行います。

●Part 2:一番ページ数も多く、Kubernetesを扱ううえで大事なことを詰め込んだパートになります。本書のタイトルは「つくって、壊して、直して学ぶ Kubernetes入門」ですが、Chapter5でトラブルシューティングの方法を一通り説明します。その後、各リソースの説明→リソースを使ってアプリケーションを壊してみる(アプリケーションに疎通できない、リソースが作成できない)、という流れになっています。Chapter8ではこれまでの総復習になっているため、Kubernetesに慣れている方はまずChapter8で腕試しをしてみるのも面白いでしょう。

●Part 3:Kubernetesのリソースを作成して壊す、というところから少しステップアップしたChapterになります。Kubernetesのアーキテクチャの説明から始まり、実際の開発フローや運用を見据えた説明内容になります。Kubernetesクラスタの利用規模が小さい場合や、個人で使っている場合は参考程度にとどめていただく内容が多いかもしれません。Chapter12は本書を読み終えた後の参考書籍などを紹介していますので、ぜひ目を通してみてください。

使用するアプリケーションについて

 本書ではChapter1で説明した自作のhello-serverを使ってハンズオンを進めていきます。hello-serverを少しずつ機能拡張したり、変更を加えたりしながら進めていきます。

 アプリケーションはGoで書かれています。Goをはじめて触る方にはわかりづらいかもしれませんので、ここで少し簡単に解説します。

Go
package main

import (
      "fmt"
      "log"
      "net/http"
)

func main() {
      http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {       --- (1)
                fmt.Fprintf(w, "Hello, world!")
      })

      log.Println("Starting server on port 8080")       --- (2)
      err := http.ListenAndServe(":8080", nil)       --- (3)
      if err != nil {
                log.Fatal(err)
      }
}

(1) " / "で始まるパスへのリクエストを受け付けます。ここではfmt.Fprintf(w, “Hello, world!”)と書かれているように、”Hello, world!”を出力します。

(2) ログにサーバを開始することを出力します。ハンズオンではこのログが出力されているかどうかを確認することがあります。

(3) 8080番ポートでhttpサーバを開始します。

 こちらのコードをベースに、ハンズオンが進むごとに少しずつ改良されたDockerイメージを使っていきます。タグの値がその都度変わっていくので、間違えないようにしましょう。

Podを動かしてみよう

Podを動かしてみよう

 本書で利用しているマニフェストやコードなどは以下のリポジトリにアップロードされています。

https://github.com/aoi1/bbf-kubernetes

 本書ではこのリポジトリをローカルにgit cloneないしは、ダウンロードして使っていただきます。次のコマンドでgit cloneできます。 

git clone https://github.com/aoi1/bbf-kubernetes

 また、UI上からzipファイルをダウンロードすることもできます。

 リポジトリは章ごとにディレクトリが切られています。本書でマニフェスト/コードを紹介する際にはそれぞれ<ディレクトリ名>/<ファイル名>で紹介しますので、適宜参照してください。

kubectlをインストールする

 Kubernetesクラスタを構築できていることの確認をするためにもkubectlを使えると良いでしょう。

 まずはkubectlをインストールしましょう。クラスタと接続するための設定情報はクラスタを構築したら行うので、ここではインストールだけで大丈夫です。

ドキュメント:https://kubernetes.io/docs/tasks/tools/#kubectl

 ドキュメントに各種OSのインストール方法が書かれています。自分の環境に合った方法でインストールしてください。

kindをインストールする

 まずはkindをインストールしましょう。

ドキュメント:https://kind.sigs.k8s.io/docs/user/quick-start#installation

 HomeBrewを利用している方は次のコマンドでインストールできます。

brew install kind

 また、以下の条件に当てはまる方はgo installを使用してkindのインストールをすることができます。

  • Dockerをインストールしている
  • Goのバージョン1.16以上をインストールしている

 次のコマンドをターミナルで打ってkindをインストールできます。

go install sigs.k8s.io/kind@v0.20.0

準備:Podを作成する前にKubernetesクラスタの起動を確認しよう

 はじめてのKubernetesリソースの作成ということで、ここではあえてKubernetesクラスタの起動確認ステップを入れています。以降このステップの説明はしませんが、久しぶりにKubernetesを触るときなどは確認するようにしましょう(私はよくクラスタを消したことを忘れて「壊れた!」とビックリしてしまいます)。

 Podを作成する前にクラスタが起動できているか、kubectlを利用できるか、まずは確認して みましょう。

 kubectl get nodesを打ってみましょう。期待する出力結果は次のとおりです。

実行結果
$ kubectl get nodes
NAME                    STATUS    ROLES            AGE     VERSION
kind-control-plane      Ready     control-plane    8m43s   v1.29.0

 クラスタが構築できていない場合はエラーが返ってきます。kindを利用していれば次のようにクラスタの存在を確認できます。

 kind get clusters

実行結果
$ kind get clusters
kind

※デフォルトで作成されるクラスタ名がkindです。

 では、早速順を追ってコンテナを動かしてみましょう。

マニフェストを利用してみよう

 今回利用するマニフェストは次のとおりです。

YAML
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  containers:
  - name: hello-server
    image: blux2/hello-server:1.0
    ports:
    - containerPort: 8080

 今回のハンズオン用アプリケーションのコンテナイメージを指定しているだけで、ほかはchapter-04/nginx.yamlとほとんど変わりません。一点だけ異なるのは、namespaceを指定していることです。

マニフェストをKubernetesクラスタに適用してみよう

 kubectl apply --filename <ファイル名>でKubernetesクラスタ上にリソースを作成できます。まずはPodが存在しないことを確認しましょう。

 kubectl get pod --namespace default

実行結果
$ kubectl get pod --namespace default
No resources found in default namespace.

 つづいて、マニフェストを適用します。

 kubectl apply --filename chapter-04/myapp.yaml --namespace default

実行結果
$ kubectl apply --filename chapter-04/myapp.yaml --namespace default
pod/myapp created

 Podが作成できていることを確認しましょう。

 kubectl get pod --namespace default

実行結果
$ kubectl get pod --namespace default
NAME    READY    STATUS     RESTARTS    AGE
myapp   1/1      Running    0           61s

 STATUSがRunningになっていることが確認できていればPodの作成完了です。STATUSがContainerCreatingなど、Running以外が表示されたとしても、しばらく待っていればRunningになるはずです。PodがRunningになったでしょうか?

 おめでとうございます! これでKubernetes使いの一歩を踏み出しましたね。

つくって、壊して、直して学ぶ Kubernetes入門

Amazon  SEshop  その他

 
つくって、壊して、直して学ぶ Kubernetes入門

著者:高橋あおい
監修:五十嵐綾
発売日:2024年4月22日(月)
定価:3,278円(本体2,980円+税10%)

本書について

本書は、Kubernetesの実践的な知識をハンズオン形式で解説する書籍です。本書の特徴は、壊れにくいKubernetesをあえて壊しながら学ぶことで、初心者が挫折しやすいトラブルシューティングの知識や対応力が身に付けられることです。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
翔泳社の本連載記事一覧

もっと読む

この記事の著者

渡部 拓也(ワタナベ タクヤ)

 翔泳社マーケティング課。MarkeZine、CodeZine、EnterpriseZine、Biz/Zine、ほかにて翔泳社の本の紹介記事や著者インタビュー、たまにそれ以外も執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

あおい(アオイ)

 大手メーカーにてソフトウェアエンジニアエンジニアを経て2019年7月サイボウズ株式会社にSREとして入社。 現行インフラ基盤上のアプリケーションを新インフラ基盤(Kubernetes)に移行するプロジェクトが主な仕事です。著書は、「まんがではじめるKubernetes」など。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19343 2024/04/29 07:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング