今話題の Kubernetes
を始めたいが、環境構築に手間をかけたくない。
手軽に実行できて尚且つ "作って壊す" を何回も自由に行いたい。
だって難しいですもん! 失敗しまくって何が悪い(開き直り)!!!
と思って、知識をお持ちの方に何かないですか?
都合のいい環境。無理ですよね?そんな都合のいい話・・・・。
あるよ!
そこから Kind
を使って Kubernetes
の環境構築を行ってみた話です。
Kubernetes
とは何かも含めて記事にしました。
・お知らせ 「本記事は前編と後編に分かれております。」
記事概要 | リンク先 |
---|---|
前編: Kubernetesとは?・Nodeの作成初期 等 | * 本記事 |
後編: Pod作成とkubectlでPodの中身を見る 等 | 後編URLリンク |
1: 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 の頭文字を取ってます。
つまり => kubernetes
を Docker
に入れちゃいました。
もう少しだけ特徴補足
- 他の類似ツールには存在しないマルチノードクラスタが使える(←マルチノードクラスタって? 後で説明します)
-
Kubernetes
の公式が認めている。Kubernetes
そのもののテストにも用いられている -
Docker
がインストールされているホスト(ここで言うとMac)があればいい - ホスト環境を汚さない
- コマンド簡単インストール
3: Kind
のインストール
ここからインストールする相手になってもらう仮想人物の「たこやん」さんに登場してもらいます。
Macの場合で説明(Winさん等ごめんなさい)
- Docker for Mac 環境はありますか?
たこやん「あるよ」 - Macですか?
たこやん「Macやで!マクドちゃうで!」 - Homebrew入ってますか?
たこやん「この前いれたで!」 - 下のコマンドをターミナルで入力して下さい。
たこやん「はいな」
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以上 推奨
5: kubectl
のインストール
kubectl
はkubernetes
のコマンドツールです。
インストールしなくてもkind
を使う事はできますが、kubernetes
を今後触るなら入れておきます。
たこやん「じゃ入れないわ。めんどくさー」
「いや、いれるしかないでしょ!」
「いやじゃない!あなたはいれるべきだ!いれるのです。いれる。いれる。 ダー!」
たこやん「あれー」
brew install kubectl
5: Kind
サンプル立ち上げ
たこやん「よし!Kubernetes作戦開始!」
クラスターの構築を行います。
(たこやん「クラスターって何?美味しいの?」 <= 後で説明します)
1. Kindクラスターを作成
kind create cluster
たこやん:「やった!出来た!」
「では削除します」
たこやん:「えっ!?嘘?」
「ほんと!」
2.Kindクラスターを削除
とりあえず消してください。そうバッサリと
kind delete cluster
全部消えました。すっきり。
たこやん:「あーあ。どうするの?」
「その前にKubernetesの用語を知らないと。」
たこやん「まーそれもそうやなー。しゃーないなー。しゃーなしやで!」
「・・・」
6:Kubernetes
の抜粋基本用語
1.ポッド(Pod)
Kubernetesを構成する最小単位。1つのPodにはコンテナを基本1つ入れる。
「基本以外は?複数可能?」
「可能ですが説明省略(サイドカーパターン、アンバサダーパターン等)」
2.ノード(Node)
Podのまとめ役。Podを動かすためのサービスが含まれる
(kubelet,kube-proxy等)
3.クラスター(Cluster)
Kuberntesを構成するまとまり
4.コントロールプレーン(マスターノード)
クラスター内の1つのノードとして稼働する。
スケジュール管理やバージョン管理等、Kubernetes基幹部をコントロールする。
これがないと始まらない。
5.データプレーン(ワーカノード)
実際に動かすのノードをまとめた物をデータプレーンという。
イメージで捉えた方がわかりやすいので、会社で無理やり無理くり再現しました。
たこやん「じゃーさっきのKind
で作ったのは何?」
「コントロールプレーンのみです。」
たこやん「イメージでは、会社と社長だけ?」
「ざっくりイメージではそうです。」
たこやん「社長1人で働いたらいいんじゃない?」
「・・・ 内心(この人無理いうなー)」
「決まりで社長(コントロールプレーン)は働き手(コンテナ稼働)できないです。」
たこやん「そらだめだ。それやったら会社潰れるやないか!」
「働く部署や人が(ワーカーノードやポッド)いるやないか!」
「そうです。だからそれを入れ直す為に作り直します。」
たこやん「あっ。そうかだからマルチ(複数)ノードが必要なんや!」
「そういう事です。やっとわかってもらえた」
7. Kind
再び
1. 指示書の作成について
たこやん「働く部署(ワーカノード)が必要なのはわかったけど、どうやって作るの?コマンド?」
「専門の指示書を作ってからコマンド入力で渡します。」
たこやん「専門の指示書?」
「YAMLという形式(拡張子:yml.yaml)でマニュフェストファイルというものを作り、コマンドでそのファイルを読み込みます。」
たこやん「ナムル?」
「・・・。ゴン!」
2.Kind
起動 ymlファイル作成
ワーカーノードの設定を入れたymlファイルを作成します。
下記がサンプルです。デスクトップ等にyml形式で作成し保存します。
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
これでワーカーノードの設置は完了です。
インストール時の履歴でワーカーノードがあるか確認してみましょう。
たこやん「Preparing nodes
が2つになって、Joining worker nodes
ができた!」
「よしできた。ところでデータプレーンのポッドの中身は?」
「ありません。」
たこやん「ありませんではすみません。ありませんは有馬温泉だけで十分や!」
「・・・」