LoginSignup
6
3

More than 3 years have passed since last update.

"Kind" でお手軽 "Kubernetes" ハンズオン 前編

Last updated at Posted at 2020-11-04

今話題の Kubernetes を始めたいが、環境構築に手間をかけたくない。
手軽に実行できて尚且つ "作って壊す" を何回も自由に行いたい。

だって難しいですもん!  失敗しまくって何が悪い(開き直り)!!!

と思って、知識をお持ちの方に何かないですか?
都合のいい環境。無理ですよね?そんな都合のいい話・・・・。

あるよ!

そこから Kind を使って Kubernetes の環境構築を行ってみた話です。
Kubernetesとは何かも含めて記事にしました。


・お知らせ 「本記事は前編と後編に分かれております。」

記事概要 リンク先
前編: Kubernetesとは?・Nodeの作成初期 等  * 本記事
後編: Pod作成とkubectlでPodの中身を見る 等  後編URLリンク

1: Kubernetes の知識は今後重要なの?

まずはKubernetesが今後必要となる知識である事を、
わかりやすい解説(建前)
自身の知識が定着しておらずまとめる必要がある為(主目的)
ざっくり記載します。
Kubernetes

2:そもそも何者なんKubernetes

コンテナオーケストレーションツールである。

ほんとーにざっくりのイメージで言うと

  • 「コンテナ増えたらDockerではコントロールできませんぜ!」

  • 「こっちでうまくコントロールしておきまっせ」

  • 「求められた変化に対応しやすくできるツールでっせ!」

  • 「運用してコンテナの中身変えたくなる時ありますでしょ?
    サービス止めずにやる事もできまっせ!」

  • 「お客さん増えるの心配?
    足らななってもこっちでスケールしてうまく作って動かしときまっさ!
    (設定いるけどな!)」

  • 「信頼のGoogleがバックにおんねんで!使うしかないでっしゃろ!」

  • 「使える周辺ツール(エコシステム)がすんごい増えてるねんでー。
    やるっきゃないだろー」

・・・こんなチャランポランな説明でいいのだろうか?・・・

なんやかんやと色々便利なコンテナオーケストレーションツール

DockerのSwarm、CoreOSのfleet、Rancher LabsのRancher、MesosのMarathon
が他のコンテナオーケストレーションの主要なものですが

- 2017年2月 :fleetを開発していたCoreOS撤退
- 2017年9月 :Mesos,Rancher LabsがKubernetesのサポートを発表
- 2017年10月 :DockerがKubernetesとの統合採用を決定

現状市場の50%以上のシェアを獲得している。
つまりはコンテナオーケストレーションのデファクトスタンダード!

AWSもサービス開始

AWSもKubernetesサービス対応のEKSを開始。
業界シェア大手のサービス参入により一気にKubernetesは普及へ
独自のオーケストレーションツールがあるAWSも(ECS) Kubernetesでのサービス(EKS)を始めた。

  • 下記は取材概要から要約

質問者 「なんでぢ独自のコンテナオーケストレーションのECSあんのに初めたの?」
AWS代表 「ECSはAWS上でしか動かないから。それじゃ今後ダメでしょ。」
質問者 「それでいいって前は言ってたジャン!」
AWS代表 「市場も変化してるしねー。
      Kubernetesを採用したサービスをAWSが生み出した理由は、
     「ポータビリティ(可搬性)」と「機能性だ!」
質問者「・・・」

参考元サイト
AWSはなぜ、ECSがあるのにKubernetesのサービスを始めたのか、コックロフト氏に聞いた

3:Kindとは

kind is a tool for running local Kubernetes clusters using Docker container “nodes”.
Kubernetes in Docker の頭文字を取ってます。
つまり => kubernetesDocker に入れちゃいました。

Kind

もう少しだけ特徴補足

  • 他の類似ツールには存在しないマルチノードクラスタが使える(←マルチノードクラスタって? 後で説明します)
  • Kubernetesの公式が認めている。Kubernetesそのもののテストにも用いられている
  • Dockerがインストールされているホスト(ここで言うとMac)があればいい
  • ホスト環境を汚さない
  • コマンド簡単インストール

3: Kindのインストール

ここからインストールする相手になってもらう仮想人物の「たこやん」さんに登場してもらいます。
syokuji_takoyaki_man.png

Macの場合で説明(Winさん等ごめんなさい)

  1. Docker for Mac 環境はありますか?
    たこやん「あるよ」
  2. Macですか?
    たこやん「Macやで!マクドちゃうで!」
  3. Homebrew入ってますか?
    たこやん「この前いれたで!」
  4. 下のコマンドをターミナルで入力して下さい。
    たこやん「はいな」
brew install kind

「インストールはおしまい!」

たこやん「えっ!おしまい?」

4: Kind を使う環境設定

Docker for Mac の設定

Kubernetesを使うのでDocker for Macの環境設定が少し必要です。
設定項目は下記です。

  • Docker for Mac の Desktopアイコンより Preference(環境設定)を選択
  • CPU: 4以上、 Memory: 8192MB以上、Swap: 1024MB以上、Discimage: 64GB以上 推奨

*下記は私の設定です。(参考までに)
スクリーンショット 2020-08-10 19.44.12.png
スクリーンショット 2020-08-10 19.50.28.png

5: kubectl のインストール

kubectlkubernetesのコマンドツールです。

インストールしなくてもkindを使う事はできますが、kubernetesを今後触るなら入れておきます。

たこやん「じゃ入れないわ。めんどくさー」

「いや、いれるしかないでしょ!」

「いやじゃない!あなたはいれるべきだ!いれるのです。いれる。いれる。 ダー!」

たこやん「あれー」

brew install kubectl

5: Kind サンプル立ち上げ

たこやん「よし!Kubernetes作戦開始!」

クラスターの構築を行います。
 (たこやん「クラスターって何?美味しいの?」 <= 後で説明します) 

1. Kindクラスターを作成

kind create cluster

スクリーンショット 2020-08-10 20.34.49.png

たこやん:「やった!出来た!」

「では削除します」

たこやん:「えっ!?嘘?」

「ほんと!」

2.Kindクラスターを削除

とりあえず消してください。そうバッサリと

kind delete cluster

全部消えました。すっきり。

たこやん:「あーあ。どうするの?」

「その前にKubernetesの用語を知らないと。」

たこやん「まーそれもそうやなー。しゃーないなー。しゃーなしやで!」

「・・・」:punch:

6:Kubernetes の抜粋基本用語

1.ポッド(Pod)

Kubernetesを構成する最小単位。1つのPodにはコンテナを基本1つ入れる。
「基本以外は?複数可能?」
「可能ですが説明省略(サイドカーパターン、アンバサダーパターン等)」

2.ノード(Node)

Podのまとめ役。Podを動かすためのサービスが含まれる
(kubelet,kube-proxy等)

3.クラスター(Cluster)

Kuberntesを構成するまとまり

4.コントロールプレーン(マスターノード)

クラスター内の1つのノードとして稼働する。
スケジュール管理やバージョン管理等、Kubernetes基幹部をコントロールする。
これがないと始まらない。

5.データプレーン(ワーカノード)

実際に動かすのノードをまとめた物をデータプレーンという。 

イメージで捉えた方がわかりやすいので、会社で無理やり無理くり再現しました。

スクリーンショット 2020-08-10 22.18.59.png

たこやん「じゃーさっきのKindで作ったのは何?」

「コントロールプレーンのみです。」

たこやん「イメージでは、会社と社長だけ?」

「ざっくりイメージではそうです。」

たこやん「社長1人で働いたらいいんじゃない?」

「・・・ 内心(この人無理いうなー)」
「決まりで社長(コントロールプレーン)は働き手(コンテナ稼働)できないです。」

たこやん「そらだめだ。それやったら会社潰れるやないか!」
    「働く部署や人が(ワーカーノードやポッド)いるやないか!」

「そうです。だからそれを入れ直す為に作り直します。」

たこやん「あっ。そうかだからマルチ(複数)ノードが必要なんや!」

「そういう事です。やっとわかってもらえた」

7. Kind再び

1. 指示書の作成について

たこやん「働く部署(ワーカノード)が必要なのはわかったけど、どうやって作るの?コマンド?」

「専門の指示書を作ってからコマンド入力で渡します。」

たこやん「専門の指示書?」

「YAMLという形式(拡張子:yml.yaml)でマニュフェストファイルというものを作り、コマンドでそのファイルを読み込みます。」

たこやん「ナムル?」

「・・・。ゴン!」:punch:

2.Kind起動 ymlファイル作成

ワーカーノードの設定を入れたymlファイルを作成します。
下記がサンプルです。デスクトップ等にyml形式で作成し保存します。

kind.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker

簡単にファイル内容説明。

  • kind : 種別の事ですね。今回のツールkindと被るのでややこしやーですね。
  • apiVersion : apiのバージョンを指定します。今回Kind公式サポートのapiを使いました。
  • nodes :ノードですね。
  • role :役割の指定です。ここではコントロールとワーカーを指定しインストールするようにしています。

この設定を使って再度kindをインストールします。

kind create cluster --config kind.yaml

これでワーカーノードの設置は完了です。
インストール時の履歴でワーカーノードがあるか確認してみましょう。

スクリーンショット 2020-08-14 14.34.44.png

たこやんPreparing nodes が2つになって、Joining worker nodesができた!」
    「よしできた。ところでデータプレーンのポッドの中身は?」

「ありません。」

たこやん「ありませんではすみません。ありませんは有馬温泉だけで十分や!」

「・・・」:punch::punch:

えー途中ですが、ここで終了のお時間です。えー、やだ。
こんなふざけた投稿でいいのだろうか?
次回 は後半編でKindPodを作成してPodの中を見てみるを予定しております。
参考になれば 面白ければ LGTM ください。
わかりやすいかなと表現豊かに説明しました。(嘘)
間違っておりましたら、暖かくご指摘とご意見を頂けましたら幸いです。
6
3
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
6
3