開発日報

窓際エンジニアの開発備忘。日報は嘘です。

【連載】Kubernates入門・GKEデプロイと発展的利用。第1回 ~ Kubernates概説と環境構築 ~

はじめに

この連載ではコンテナオーケストレーションツールである。Kubernatesの使い方を学びます。
環境構築・概念説明・GKEデプロイ・その他応用などについて連載方式で書いていきます。
(筆者はamazon ecsに甘えきっているのですが、そろそろやらねばと思いましてね。。)

サンプルコード

こちらに順次アップしていきますー。

連載記事一覧

連載記事一覧

Kubernatesとは

Kubernetesは、コンテナの運用を自動化するためのコンテナオーケストレーションシステムです。
コンテナオーケストレーションを実現・管理するための統合的なシステムであり、APICLIツールも併せて提供します。  

複数のサーバーにまたがってコンテナ管理できます。 f:id:yuuu1993g:20191104103829p:plain

コンテナを用いたアプリケーションのデプロイの他にも、様々な運用管理の自動化を実現します。
Dockerホスト管理、サーバリソースを考慮したコンテナ配置、スケーリング、複数のコンテナ群へのアクセスを取りまとめるロードバランサー、死活監視などの仕組みを備えています。 Kubernetesの様々な部品を組み合わせることで、柔軟性の高いアプリケーションを構築できます。

ローカルでKubernatesやってみる

ローカル環境構築

macOSのメニューバーのDockerアイコンから「Preferences」で設定画面に行き、Enabele Kubernetesにチェックを入れてApplyします。

f:id:yuuu1993g:20191104104756p:plain

Installをクリック。f:id:yuuu1993g:20191104104910p:plain

kubectlのインストール

kubectlはローカルKubernetes環境でもマネージドのKubernetesでも利用します

macOS

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/darwin/amd64/kubectl \
   && chmod +x kubectl \
   && mv kubectl /usr/local/bin/

Linux

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.0/bin/linux/amd64/kubectl \
   && chmod +x kubectl \
   && mv kubectl /usr/local/bin/

ダッシュボードのインストール

ダッシュボードはKubernetesにデプロイされているコンテナ等を確認できるWebベースの管理ツールです。

ローカルKubernetes環境では次のようにデプロイできます。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml

次のようなコマンドを実行し、STATUS=Runningになっていればデプロイ完了です。

$ kubectl get pod --namespace=kube-system -l k8s-app=kubernetes-dashboard                                         1093ms  月 11/ 4 10:56:57 2019[f:id:yuuu1993g:20191104105934p:plain]
NAME                                    READY   STATUS    RESTARTS   AGE
kubernetes-dashboard-6fd7f9c494-j9946   1/1     Running   0          44s
$ kubectl proxy                                                                                                            月 11/ 4 10:57:38 2019
Starting to serve on 127.0.0.1:8001

以下のURLでダッシュボードにアクセスできます。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

f:id:yuuu1993g:20191104105934p:plain

Kubernatesの概念

詳細は次回。

リソース名 用途
Node Kubernetes クラスタで実行するコンテナを配置するためのサーバ
Namespace Kubernetes クラスタ内で作る仮想的なクラスタ
Pod コンテナ集合体の単位で、コンテナを実行する方法を定義する
ReplicaSet 同じ仕様のPodを複数生成・管理する
Deployment ReplicaSet の世代管理をする
Service Podの集合にアクセスするための経路を定義する
Ingress ServiceをKubernetesクラスタの外に公開する
ConfigMap 設定情報を定義し、Podに供給する
PersistentVolume Podが利用するストレージのサイズや種別を定義する
PersistentVolumeClaim PersistentVolumeを動的に確保する
StorageClass PersistentVolumeが確保するストレージの種類を定義する
StatefulSet 同じ仕様で一意性のあるPodを複数生成・管理する
Job 常駐目的ではない複数のPodを作成し、正常終了することを保証する
CronJob cron記法でスケジューリングして実行されるJob
Secret 認証情報等の機密データを定義する
Role Namespace内で操作可能なKubernetesリソースのルールを定義する
RoleBinding RoleとKubernetes リソースを利用するユーザーを紐づける
ClusterRole Cluster全体で操作可能なKubernetesリソースのルールを定義する
ClusterRoleBinding ClusterRoleとKubernetesリソースを利用するユーザーを紐づける
ServiceAccount Pod にKubernetesリソースを操作させる際に利用するユーザー

まとめ

今回は環境構築とKubernatesの概念を学びました。
次回は実際にKubernatesを操作しながら各概念の詳細を学びましょう。