KubeadmでKubernetesをインストールする方法ー簡易版 #mirantis #kubernetes #k8s #docker
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは Mirantis社のblog記事「How to install Kubernetes with Kubeadm: A quick and dirty guide」の翻訳記事です。
簡易的に Kubernetes クラスタが必要なだけで、いじくりまわしたくない場合もあるでしょう。小さなアプリケーションをテストしたい場合や、自分のための開発環境を作りたい場合もあるでしょう。目的が何であれ、手っ取り早く、シンプルに構築したいと思うはずです。それが今回やろうとしていることです。この記事では、k8sコミュニティがデプロイプロセスを簡素化するために作成したツールである Kubeadm を使ってシングルノード Kubernetes クラスタを作成するための手っ取り早いガイドを紹介します。(マルチノードデプロイメントを作成するのは簡単ですが、それについては後の記事で取り上げます)。
VM を作成
これらの手順は Virtualbox の VM を使用してテストしたものですが、理論的にはベアメタル環境でも同じです。( VM の作成方法はこちらにあります。)
VM について注意すべき点がいくつかあります。
- リソースをオーバーコミットしている場合でも、少なくとも2つの vCPU を割り当ててください。(今回の例では必要になります。)
- 少なくとも 4096MB の RAM と 20GB のドライブスペースを割り当てるようにしてください。
- 本 Blog では Ubuntu 16.04 を利用します。
- デフォルトのネットワークアダプタを設定して、VM とホストマシン間のトラフィックを有効にするため、「ブリッジドアダプタ 」に接続します。
VM を準備
VM を準備するには幾つかすることがあります。具体的には、スワップをオフにし、設定を微調整し、前提となるソフトがインストールされていることを確認する必要があります。
そのためには、以下の手順に従ってください。
1. root になります
sudo su
2. スワップをオフにします。これを行うには、直接オフにする必要があります...
swapoff -a
... その後、/etc/fstab の swap への参照をコメントアウトします。 ファイルの編集から始めます。
vi /etc/fstab
その後、適切な行をコメントアウトしてください。
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=1d343a19-bd75-47a6-899d-7c8bc93e28ff / ext4 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation #UUID=d0200036-b211-4e6e-a194-ac2e51dfb27d none swap sw 0 0
3. iptables を設定して、ブリッジドネットワークトラフィックを受信するようにします。最初に sysctl.conf ファイルを編集します。
vi /etc/ufw/sysctl.conf
そして、最後に以下の行を追加します。
net/bridge/bridge-nf-call-ip6tables = 1 net/bridge/bridge-nf-call-iptables = 1 net/bridge/bridge-nf-call-arptables = 1
4. 変更が有効になるように再起動してください。
5. ebtables と ethtool をインストールします。
sudo su apt-get install ebtables ethtool
6. 再度Rebootします。
Kubeadm のインストール
さて、これでインストールする準備ができました。 このプロセスの詳細についてはドキュメントを参照してください。
1. Docker のインストール
sudo su apt-get update apt-get install -y docker.io
2. HTTPS サポートのインストール
apt-get update apt-get install -y apt-transport-https
3. curl のインストール
apt-get install curl
4. Kubernetesリポジトリのキーを取得し、キーマネージャーに追加します。
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
5. kubernetes リポジトリをシステムに追加します。
cat << EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF
6. 実際に必要なのは、kubeadm、kubelet、kubectlの3つです。
apt-get update apt-get install -y kubelet kubeadm kubectl
この時点で必要なツールはすべて揃いました。実際にk8sクラスタをデプロイしていきましょう。
Kubernetes クラスタの作成
Kubeadm をインストールしたので、新しいクラスタを作成してみましょう。 このプロセスの一部として、ネットワークプロバイダの選択があります。これには、いくつかの選択肢があります。
1. 実際のクラスタを作成します。
Calicoの場合は、 -pod-network-cidr オプションを追加する必要があります。
kubeadm init --pod-network-cidr=192.168.0.0/16
これはしばらくの間処理を実行し、最終的にはこのような出力が得られます。
To start using your cluster, you need to run (as a regular user): mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join --token 354502.d6a9a425d5fa8f2e 192.168.0.9:6443 --discovery-token-ca-cert-hash sha256:ad7c5e8a0c909ed36a87452e65fa44b1c2a9729cef7285eb551e2f126a1d6a54
最後に他のノードをクラスタに参加させるコマンドが出力されている事に注意してください。
今回はノードの追加はしません。
2. ネットワークプラグインや、ワークロードを追加するためのシステムの準備をします。
新しいターミナルウィンドウを開き、kubeadm の設定を行うコマンドを実行します。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. Calico ネットワークプラグインをインストールします。
kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
4. Pod が動いているかどうかを確認します。
kubectl get pods --all-namespaces
短時間でポッドが起動します。
5. Masterのtaintを解除して、ワークロードのスケジューリングに利用できるようにします。
kubectl taint nodes --all node-role.kubernetes.io/master-
これで、ワークロードを実行できる完全に機能するkubernetesクラスタが出来上がりました。
Kubernetes クラスターをテスト
それでは、Sock Shop のサンプルアプリケーションをインストールして、すべてが正常に動作することを確認してみましょう。
以下の手順に従ってください。
1. Sock Shop 用の namespace を作成します。
kubectl create namespace sock-shop
2. Sock Shop アプリケーションの作成
kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
kubectl get pods -all-namespaces を使って、すべての Pods が動作していることを確認してください。
3. フロントエンドサービスでやりとりするので、そのサービスのIPアドレスを見つけてください。
kubectl -n sock-shop get svc front-end NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE front-end 10.110.250.153 <nodes> 80:30001/TCP 59s
ブラウザで http://<cluster-ip> (この場合は http://10.110.250.153) にアクセスします。 WeaveSocksのインタフェースが表示されるはずです。
(注意: WindowsでVirtalBoxを実行している場合、ポート30001でしかアプリケーションを表示できないバグに遭遇する可能性があります。)
4. ホストマシンからインタフェースに到達できるかどうかを確認することもできます。
まず、適切な IP アドレスを見つける必要があります。
ifconfig
ホストマシンと同じ範囲のIPアドレスを探していますが、最も可能性が高いのはイーサネットアダプタです。 例えば、私の場合はこの部分でした。
enp0s3 Link encap:Ethernet HWaddr 08:00:27:7c:14:fd inet addr:192.168.2.50 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::7638:2441:3326:b242/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:415485 errors:0 dropped:0 overruns:0 frame:0 TX packets:166889 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:621031284 (621.0 MB) TX bytes:12020009 (12.0 MB)
5. そのIPアドレスを取得し、ホストマシン上のブラウザをポート30001のそのIPに向けます。
http://:30001
(私の場合は http://192.168.2.50:30001)
問題がなければ、VMの時と同じように Sock Shop が見えてきます。
片付け
大したことはしていませんが、やり直したい場合は以下のようにしましょう。
Sock Shopを削除する:
kubectl delete namespace sock-shop
クラスタ全体を削除する:
sudo kubeadm reset
これだけです!
まとめ
あなたはこれらの処理について理解しているはずです。
- Kubeadm用のVMを準備
- Kubeadm のインストール
- Kubernetesクラスタのデプロイ
- サンプルアプリケーションをKubernetesアプリケーション上にデプロイ
- サンプルアプリケーションを削除
- クラスターの削除
今後の記事では、カスタムアプリケーションの作成やクラスタへの追加ノードの追加などのタスクについてお話します。 また、Kubernetes デプロイメントのチュートリアルをチェックしたり、無料の Kubernetes ミニブートキャンプで Kubernetes の基礎を 1 時間かけて学んだりすることもできます。