Kubernetesとは
Kubernetesは、コンテナのオーケストレーションを行うオープンソースソフトウェアです。ここで言うオーケストレーションとは、コンピュータシステムのサービス設定や提供・管理の各種手続きを自動的に行う考え方で、アプリケーション管理を含めた統合運用が可能です。 【参考】:公式-Kubernetes 【参考】:公式-Kubernetesとは何か?
Kubernetesの基本モジュール
ここではKubernetesの基本モジュールを説明をしていきます。「Pod」とはKubernetesのアプリケーションの管理で用いる基本的な実行単位です。Podの集合体はアプリケーションを公開する仕組みで、「サービス」と呼ばれています。管理対象となるインフラを「ノード」(Node)と言います。Podは最小のデプロイメント単位なため、単一インスタンスで構成可能です。
各ノードを制御し、タスクを割り当てる機器を「マスター」あるいは「コントロールプレーン」と呼びます。マスターへのリクエストは、Kubernetesのコマンドラインツールである「kubectl」を用います。マスターと対比させて、各実行ノードを「スレーブ」あるいは「ワーカーノード」という場合もあります。
Kubernetesでできること
Kubernetesはクラスタ内でアプリケーションのデプロイ・スケール・管理を実行できます。全体の効率向上・品質向上・スピード向上が実現でき、可能性向上が求められる企業向けに活用が進んでいます。
以下にKubernetesでできることを簡単に整理してみます。 ・コンテナ化されたアプリケーションのデプロイとリリース Dockerでは単一ノードのみですが、Kubernetesではクラスタのノード間でアプリケーションのデプロイとリリースができます。
・コンテナ化されたアプリケーションの実行と管理 アプリケーションの実行と管理をクラスタで行うことができます。
・スケーリングを実行 状況に応じてデプロイ・スケーリング・実行の手順を自動化することができ、負荷分散に対応します。
・障害時に復旧処理を実行 クラスタの機能を維持しながら、インスタンスの障害復旧を行います。
KubernetesはDockerでコンテナ化されたアプリケーションの実行を管理します。複数ノードで動作が可能で処理を自動実行することができます。より効率的な運用に近づけることを目的とします。さらに自動障害復旧の用途にも利用されています。 【参考】:公式-Kubernetesの基本を学ぶ
Kubernetesを使ってみよう
入門ハンズオンとしてMinikubeを使ってみましょう。Minikubeは、Kubernetesクラスタをローカルで環境構築・実行してくれます。つまり、手っ取り早く利用することができます。 【参考】:公式-Kubernetes チュートリアル
このハンズオンは、ブラウザだけでできてしまう優れものです。ここではMinikubeとKatacodaが使われています。Katacodaはインタラクティブな学習プラットフォームで、DockerやKubernetesをはじめとする多くのラーニングに活用されています。
Hello Minikube
Hello Minikubeは、実際のKubernetesのハンズオン手順です。初心者でも操作を簡単に行うことができます。 【参考】:Hello Minikube
このハンズオンで最初に「Launch Terminal」をクリックしてください。それによりブラウザ下部にTerminalが表示されます。すでにMinikubeをインストール済みであれば、”minikube start”で実行できます。次に「minikube dashboard」をクリックし、ポート番号30000を「Display Port」で表示します。
以降kubectlを用いて処理を行います。Podの状態を確認するためにDeploymentを”kubectl create deployment”で作成します。Deploymentの確認は”kubectl get deployments”を、Podの確認は”kubectl get pods”を実行します。
続いてPodを外部公開するためには、Serviceを作成します。”kubectl expose deployment”でServiceのタイプを設定し、”minikube service”でServiceを作成します。
kubectlコマンドの概要
先のハンズオンで用いたkubectlコマンドは、Kubernetesのコマンドラインツールでクラスターの制御に用います。基本構文は以下の通りです。
kubectl [コマンド] [タイプ] [ネーム] [フラグ]
コマンド:実装する操作を指定します。create・get・describe・delete・logs・exec等です。 タイプ:リソースタイプを指定します。nodes・pods・services等で省略形が定義されています。 ネーム:リソース名を指定します。 フラグ:オプションフラグです。 【参考】:公式-kubectlの概要
kubectlの使用方法
Katacodaを用いて、kubectlの代表的なコマンドを実行してみました。
“kubectl get”はリソースの一覧を表示します。nodes・pods・servicesの実行結果は以下の通りです。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-7567d9fdc9-76d4g 1/1 Running 0 44m
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.106.2.14 <pending> 8080:30547/TCP 43m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 54m
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 54m v1.20.2
$
“kubectl describe”は、リソースの詳細情報を表示します。実行結果は以下の通りです。
$ kubectl describe node
Name: minikube
Roles: control-plane,master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=minikube
kubernetes.io/os=linux
:
$ kubectl describe pod
Name: hello-node-7567d9fdc9-76d4g
Namespace: default
Priority: 0
Node: minikube/172.17.0.48
:
$
“kubectl logs”は、Pod上の指定したコンテナ内に格納されているログを表示します。
$ kubectl logs hello-node-7567d9fdc9-76d4g
“kubectl exec”は、Pod上の指定したコンテナ内でコマンドを実行します。
$ kubectl exec hello-node-7567d9fdc9-76d4g -- ls -l /
total 72
-rw-r----- 1 root root 436 May 28 2016 README.md
drwxr-xr-x 2 root root 4096 May 2 2016 bin
drwxr-xr-x 2 root root 4096 Nov 27 2015 boot
drwxr-xr-x 5 root root 360 Feb 22 09:08 dev
drwxr-xr-x 1 root root 4096 Feb 22 09:08 etc
:
$
これらのコマンド確認は、Hello Minikubeで表示したTerminalのプロンプトで実行可能です。各コマンドの動作を実際に確認してみてください。
Kubernetesのセットアップ
Kubernetesのセットアップは、コントロールプレーンとワーカーノードを準備します。作業にはコンテナランタイムの他、kubeadm・kubelet・kubectlを用いて行います。ご興味ありましたら、以下の公式リンクをご確認ください。 【参考】:公式-CRIのインストール 【参考】:公式-kubeadmのインストール 【参考】:公式-ツールのインストール
Kubernetesの学習方法
Kubernetesの公式サイトにはお話ししたハンズオンの他、多くの教材と提供パートナー情報が登録されています。無料の入門コースを利用して、Kubernetes・Linux・クラウド技術を総合的に学習することができます。 【参考】:公式-Kubernetesのトレーニングと資格
同様にハンズオンで用いたKatacodaは250の自習教材が登録されており、コンテナ管理の教材が充実しています。 【参考】:Katacoda
やはり書籍が良いという方は、入門書として「Docker/Kubernetes 実践コンテナ開発入門」を紹介します。技術評論社から出版されており、DockerならびにKubernetesの基礎から実際にアプリケーションを作るまでの工程をカバーしています。実際に動かすところまで体験することができます。 【参考】:Docker/Kubernetes 実践コンテナ開発入門
まずは基礎から進めましょう
Kubernetesは簡単ではありますが、クラスタや負荷分散の考え方を理解する必要があります。業務用途に活用が増えていますが、システム信頼性・可用性を向上するために経験が求められます。経験を積むにはハンズオンが有効です。
障害復旧やリスク対応の工程や手順を理解しておくと、実際に運用設計に活用できるのでスキルアップとしても有効です。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから