Skip to content

Latest commit

 

History

History

chapter01_cluster-create

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

Kubernetesクラスターの作成

はじめに

この章では、以降の章で使用するKubernetesクラスターを作成します。

Kubernetesクラスターを作成する方法はいくつかありますが、今回のハンズオンではkindを利用してKubernetesクラスターを作成します。 構成としてはControl Plane 1台とWorker Node 2台の構成で作成します。

はじめに、Kubernetesクラスターの構築に必要な下記ツールをインストールします。

kindはDockerを使用してローカル環境にKubernetesクラスターを構築するためのツールになります。 また、kubectlはKubernetes APIを使用してKubernetesクラスターのコントロールプレーンと通信をするためのコマンドラインツールです。 HelmはKubernetes用のパッケージマネージャーであり、Helmfileを使用することで複数のHelmチャートを宣言的に管理できます。 各ツールの詳細については上記リンクをご参照ください。

上記のツールはinstall-tools.shを実行することでインストールされます。

./install-tools.sh

インストールスクリプトの中で、ログインユーザを docker グループに所属させる設定を入れています。 一旦ログアウトしてログインし直してください。

Warning

Known Issue#Pod errors due to "too many open files"に記載があるように、kindではホストのinotifyリソースが不足しているとエラーが発生します。 ハンズオン環境ではinotifyリソースが不足しているため、sysctlを利用してカーネルパラメータを修正する必要があります。

sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl fs.inotify.max_user_instances=512

また、設定の永続化を行うためには、下記のコマンドを実行する必要があります。

cat << EOF | sudo tee /etc/sysctl.conf >/dev/null
fs.inotify.max_user_watches = 524288
fs.inotify.max_user_instances = 512
EOF

構築するKubernetesクラスターの設定はkind-config.yamlで行います。 今回は下記のような設定でKubernetesクラスターを構築します。

  • ホスト上のポートを下記のようにkind上のControl Planeのポートにマッピング
    • 80 -> 30080
    • 443 -> 30443

configオプションでkind-config.yamlを指定してKubernetesクラスターを作成します。

sudo kind create cluster --config=kind-config.yaml

コマンドを実行すると以下のような情報が出力されます。

Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.27.3) 🖼 
 ✓ Preparing nodes 📦 📦 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-test"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/

Note

kubectlコマンドの実行時には、Kubernetesクラスターに接続するための認証情報などが必要になります。 それらの情報は、kindでクラスターを作成した際に保存され、デフォルトで~/.kube/configに格納されます。 このファイルに格納される情報は、kindコマンドを利用しても取得することが可能です

sudo kind get kubeconfig

# ubuntu ユーザー(一般ユーザー)で実行する場合
mkdir ~/.kube
sudo kind get kubeconfig > ~/.kube/config
chmod 600 ~/.kube/config

最後に、下記のコンポーネントをデプロイします。

Ingress NGINX Controllerはインターネットからkind上のServiceリソースへ通信をルーティングするためにインストールします。 各コンポーネントの詳細については上記リンクをご参照ください。

helmfile sync -f helm/helmfile.yaml

kubectlコマンドのシェル補完の有効化

tabキーで補完が効くように、kubectlコマンドのシェル補完を有効化します。

source <(kubectl completion bash)

次回以降もbash起動時にシェル補完を有効化する場合は下記のコマンドも実行しておきます。

echo 'source <(kubectl completion bash)' >>~/.bashrc

Kubernetesクラスターへの接続確認

まずはKubernetesクラスターの情報が取得できることを確認します。

kubectl cluster-info

下記のような情報が出力されれば大丈夫です。

Kubernetes control plane is running at https://127.0.0.1:44707
CoreDNS is running at https://127.0.0.1:44707/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

アプリケーションのデプロイ

次章以降で使用する動作確認用アプリケーションとして、Argo Rollouts Demo Applicationをデプロイします。

kubectl create namespace handson
kubectl apply -f manifest/app/serviceaccount.yaml -n handson -l color=blue
kubectl apply -f manifest/app/deployment.yaml -n handson -l color=blue
kubectl apply -f manifest/app/service.yaml -n handson
kubectl apply -f manifest/app/ingress.yaml -n handson

作成されるリソースは下記のとおりです。

kubectl get services,deployments,ingresses -n handson
# 実行結果
NAME              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/handson   ClusterIP   10.96.82.202   <none>        8080/TCP   3m33s

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/handson-blue   1/1     1            1           3m34s

NAME                                             CLASS   HOSTS             ADDRESS       PORTS   AGE
ingress.networking.k8s.io/app-ingress-by-nginx   nginx   app.example.com   10.96.54.28   80      3m9s

ブラウザからhttp://app.example.comに接続し、下記のような画面が表示されることを確認してください。