kubernetesの紹介
kubernetesはコンテナ化されたアプリケーションのオーケストレーションを実現するオープンソースです。
クラウドによるコンピューティングの推進を目的としたCloud Native Computing Foundation (CNCF)にホストされているオープンソースであり、同団体の数あるプロジェクトの中でも最も有名なプロジェクトです。
kubeadmの説明
kubeadmはkubernetesのクラスタ構成を簡単にするツールです。AnsibleやPuppet等の構成管理ツールと連携するのに向いています。まだ正式リリース前のアルファ版である事に注意して下さい。
kubeadm とkubernetesのインストール
Ubuntu16.04を3台利用してkubernetesの使い方を簡単に説明します。それぞれのホスト名を以下のように変更しています。
- 192.168.7.130 :manager
- 192.168.7.137 :host1
- 192.168.7.138 :host2
Kubernetesと動作確認のため利用するサンプルアプリケーションのメモリ利用量が多いため2G以上のメモリを搭載した環境で試すのが望ましいです。
ホスト名の変更
前準備としてホスト名を変更するにはhostnamectl set-hostnameを利用します。
$ hostnamectl set-hostname manager
ホスト名を変更した後は/etc/hostsファイルに変更後のホスト名を追加します。
$ sudo vi /etc/hosts 127.0.0.1 localhost manager
上記の手順をhost1とhost2にも行います。
kubelet / kubectl / kubeadmのインストール
Ubuntu 16.04にkubelet+kubectl+kubeadmをインストールします。kubeletはkubernetesのコアコンポーネントであり、各ノードで動作するエージェントです。kubectlはクラスタを管理するためのコマンドを提供するインターフェイスです。
以下一連のコマンドをmanagerとhost1、host2で実行します。
rootでの操作が推奨されているため、まずrootになります。
$ sudo su -
apt-transport-httpsをインストールします。既にインストールされている環境も多いと思います。
$ apt-get update && apt-get install -y apt-transport-https
GPG鍵を追加します。
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
aptのソースリストにkubernetesを追加します。
$ cat </etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF
aptを更新します。
$ apt-get update
dockerをインストールします。
$ apt-get install -y docker-engine
kubernetesの各モジュールをインストールします。
$ apt-get install -y kubelet kubeadm kubectl kubernetes-cni
インストールに成功すると自動的にkubeletが起動します。
マスターの初期化
managerに接続してのマスターの初期化を行います。
$ kubeadm init
マネージャーに参加するコマンドが表示されます。このコマンドはhost1とhost2がmasterクラスタに参加するために利用します。
$ kubeadm join --token 32450c.aebde2da6d1d73b4 192.168.7.130:6443
次にデフォルトの設定を行います。設定ファイルが読み込まれるようになりコマンドからAPIに接続できるようになります。
$ sudo cp /etc/kubernetes/admin.conf $HOME/ $ sudo chown $(id -u):$(id -g) $HOME/admin.conf $ export KUBECONFIG=$HOME/admin.conf
Kubectlコマンドで以下のメッセージが表示される場合、上記コマンドの実行を忘れてKUBECONFIGが適切に設定されていません。
The connection to the server localhost:8080 was refused - did you specify the right host or port?
動作確認のためノード一覧を表示します。まだノードが追加されておらず、1件のみNot Readyと表示されます。
$ kubectl get nodes
kubernetes 1.6.1がインストールされていますので、1.6用のpodネットワーク設定ファイルを適用します。
$ kubectl apply -f https://git.io/weave-kube-1.6
成功すると daemonset “weave-net” created と表示されます。podの一覧を表示するとweave-netが追加されているのを確認できます。
$ kubectl get pods --all-namespaces
クラスタにノードを参加させる
マスターにノードを2つ追加します。kubeadm initを行った時に表示されたコマンドをhost1とhost2で実行します。tokenの値は環境によって異なります。
rootになってから操作します。
$ sudo su - $ kubeadm join --token 32450c.aebde2da6d1d73b4 192.168.7.130:6443
Node join completeと表示されると成功です。
マスターへの参加を取り消し離脱するにはresetを利用します。
$ kubeadm reset
マスターに接続してノード一覧を確認して全てのステータスがReadyになれば利用できる状態です。
$ kubectl get nodes
サンプルアプリケーションの設置
ここまでの手順で構築したkubernetesクラスタ構成上で、マイクロサービスで構成されているサンプルアプリケーションを動作させます。
https://github.com/microservices-demo/microservices-demo
サンプルアプリケーションがどのような構成になっているかは以下の図を参照して下さい。ECサイトの構成でNode.js・GoLang・Java+Springと各種ミドルウェアが利用されています。(microservices-demo | GitHub)
ネームスペースを先に作ります。
$ kubectl create namespace sock-shop
デモアプリケーションの設定ファイルを適用したクラスタを構築します。オフィシャルの説明通りに進めるとzipkinのインストールでエラーが起こったためmasterから最新版を利用するようにします。
$ kubectl create -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
上記コマンドを実行すると、各ノードで必要なアプリケーションのインストールを非同期で開始します。環境によっては完了まで数分~10分程度かかるかも知れません。
デモアプリケーションのサービスに割り当てられたIPとポートを確認します。
$ kubectl describe svc front-end -n sock-shop
ブラウザを立ち上げてhttp://(IP) でアクセスすると無事にデモアプリケーションが表示されました。
再度podの一覧を表示するとデモアプリケーションが利用するpodが追加されているのを確認できます。
$ kubectl get pods --all-namespaces
どのようにノードに振り分けられているかを確認するため-o wideオプションを追加します。
$ kubectl get pods --all-namespaces -o wide
上手くhost1とhost2に分散され、マイクロアプリケーションとして構成されているのを確認できます。
まとめ
Kubernetes+ kubeadmを利用したクラスタ構成を試しました。Docker 本体に組み込まれているクラスタ構成ツールであるDocker Swarmの使い勝手に近い印象です。まだ実験段階の機能であるため本番環境での利用は控えた方が良さそうです。Docker Swarmのインストール方法と紹介(Ubuntu16.04版)として紹介していますので興味のある方はご覧ください。
Google Container EngineはKubernetesで構築されていますが、Kubernetes+ kubeadm を使えばGoogle Cloud Platform以外のクラウドプロバイダーでもKubernetesを利用したクラスタ構成のオーケストレーションが比較的容易に実現できるかも知れません。
参考
https://kubernetes.io/
https://github.com/kubernetes/kubernetes
https://kubernetes.io/docs/getting-started-guides/kubeadm/
https://kubernetes.io/docs/user-guide/kubectl-cheatsheet/
https://github.com/microservices-demo/microservices-demo
https://github.com/kubernetes/kubernetes.github.io/issues/3214
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments