ubuntu18.04でkubernetesを構築する

スポンサーリンク

はじめに

ubuntu 18.04が新しくリリースされ、kubernetesも1.11がリリースされました。

以前作った方法と変わりないですが、ubuntu 18.04でkubeadmを使ってkubernetes1.11を構築してみます。

注意

構築手順は以前投稿した内容とおおよそ同じです。

ubuntu18.04でもkubeadmで構築できるか試してみたかったので書いてみました。

よろしければ以前の投稿もご確認ください。

参考サイト

以前と同様ですが公式サイトの通りに進めます。

インストールまではこちら

 kubernetes.io 
Installing kubeadm - Kubernetes
https://kubernetes.io/docs/tasks/tools/install-kubeadm/
Installing kubeadm

インストールが終わったらここ参考にして構築

使用した環境について

各versionはこちら

Ubuntu 18.04 LTS

docker:18.03.1-ce

kubeadm:v1.11.0

kubelet:v1.11.0

kubectl:v1.11.0

flannel:v0.10.0

以前と同様にWindows10のPC1台で仮想サーバを複数建てて構築しました。

以下概要図です。

まずWindows10でVMware Workstation 12 Playerを起動させます。
VMware Workstation 12 PlayerでVMware ESXi6.7を起動します。このときVMware Workstation 12 Playerの設定でESXi6.7の仮想マシン設定でネットワークアダプタの設定を「ブリッジ」にします。
※これ重要。忘れていると各ubuntu18.04同士が通信できずk8sがうまく構築できません。

そしてESXi6.7上でubuntu18.04を3台たちあげます。この3台をそれぞれmaster1台とworker2台(host1,host2)としています。

事前準備

事前準備をします。

masterもhost1,2もそれぞれ実施する必要があります。

macアドレスとproduct_uuidの確認

・macアドレスとproduct_uuidが各ノードで一意であることを確認します。
ip linkでmacアドレスをが他ノードのどれともかぶってないことを確認。
sudo cat /sys/class/dmi/id/product_uuidでproduct_uuidが他ノードとかぶってないことを確認します。

/etc/hostsの設定

環境にあわせて作成します。今回は3台それぞれに以下を設定しました。

192.168.0.14 master
192.168.0.15 host1
192.168.0.16 host2

swapを落とす

sudo swapoff -aで一時的にswapをOFFにします。

sudo vim /etc/fstabでSWAP部分のUUIDからはじまる箇所をコメントアウトして永続的にOFFにします。

とりあえず両方やっておきました。

/etc/fstabのswap部分である/swap.imgの行をコメントアウト(#)しています。

Dockerのインストール

公式のやり方だと17.03がインストールされますが、ubuntu18.04のstableにdocker17.03がありません。

しかもstableはまだ18.03.1しかないのでこちらを使いました。

手順は公式の通りです。一部sudoとか入れてます。

インストール後、sudo docker versionでバージョン確認をします。

ちゃんと18.03.1になっています。

Dockerのsudoなし入力

毎度面倒なのでsudoなしでdockerコマンドを打てるようにしておきます。

以下2つのコマンドを打つだけでした。

sudo gpasswd -a $USER docker

sudo reboot

kubeadm、kubelet、kubectlのインストール

公式に書いてある通りです。まとめてインストールします。

cat <<EOF > ~ EOFにあるリポジトリ指定箇所が「kubernetes-xenial」になっています。xenialはubuntu16.04のコードネーム(の一部)であり、ubuntu18.04のコードネームはBionicなのですが、こちらの投稿を書いている時点でまだkubernetes-bionicが存在しませんでした。そのためkubernetes-xenialを使っています。

(Master ノード限定)kubeletが使用するcgroupドライバ設定

※確認して問題なければ何もしなくてOK。実際何もしなかったです。

この事前準備だけMasterノード限定です。

kubeletが使用するcgroupドライバとDockerが使用するドライバと同じであることを確認します。

でもcat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf で見ても

sedコマンドで変換する「cgroup-driver=systemd」がないので何もしませんでした。

以上で事前準備は完了です。ここからk8sでクラスタ環境を構築していきます。

Master ノードのセットアップ

・Masterの初期化
kubeadm initを実行しますが、今回はPod Network Pluginにflannelを使うので--pod-network-cidr=10.244.0.0/16を追加します。
--apiserver-advertise-addressでMaster nodeが使うIPアドレスを指定できる。
が、つけないとデフォルトゲートウェイのinterfaceを使ってくれる様子。

一応ちゃんと指定しました。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.14

実行結果に出てくる以下のような出力はroot以外のユーザにkubectlを動作させるために必要だとか。とりあえず実行しておきます。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubeadm joinのコマンドも表示されるのでメモしておきます。これをworkerノードで実行しする必要があるので必ずメモします。

※以下のコマンドは私の環境で入力するコマンドです。各環境で違うのでご自身のログをコピペして使用してください。

kubeadm join 192.168.0.14:6443 --token 3q9h20.9fu2d0awh4odv910 --discovery-token-ca-cert-hash sha256:2bed3655ce123291b4394e4999c3a34dab2f419249145f0dbd4890a8c928cb0a

※以下はこの段階での各種ログです。自分のメモ用です。インストールには関係ないので無視して先に進んでください。ただいつかk8sに詳しくなってから見ると色々参考になるかも?

こちらが今回の1.11のもの。

こちらは前回の1.10

podネットワークのインストール

今回はflannel使います。
以下コマンドの結果が1であることを確認。
cat /proc/sys/net/bridge/bridge-nf-call-iptables

その後以下を実行します。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

以上でMasterノード側のセットアップは完了です。引き続きworkerノードのセットアップを実施します。

workerノードのセットアップとクラスタへの追加

ここからworkerノードでの作業です。

masterノードでkubeadm initコマンドで出てきた以下コマンドをsudoつけて打ちます。

※以下のコマンドは私の環境で入力するコマンドです。各環境で違うのでご自身のログをコピペして使用してください。

sudo kubeadm join 192.168.0.14:6443 --token 3q9h20.9fu2d0awh4odv910 --discovery-token-ca-cert-hash sha256:2bed3655ce123291b4394e4999c3a34dab2f419249145f0dbd4890a8c928cb0a

まずはhost1で実行します。

master側で追加されているか確認します。kubectl get node -o wideを打ちます。

まったく同じようにhost2でもsudo kubeadm join 192.168.0.14:6443 --token ・・・実行します。実行結果は同じなので省略。

host2で実行した後にmaster側でhost2がいるか確認します。

ばっちりいますね。STATUSがReadyになっていればOKです。

以上でk8sの構築は完了です!

こちらはノード2つ追加後のログです。

こちらが今回の1.11のもの。

こちらは前回の1.10

※失敗した場合

何かしらの理由で失敗した場合ですがsudo kubeadm resetコマンドでsudo kubeadm init前の状態に戻せます。

masterノード作成時に~/.kubeを作っているなら念のため消しておいたほうがいいかも。

workerノード側はsudo kubeadm resetを打てばsudo kubeadm init前に戻れます。

戻した後に再度sudo kubeadm init~を打てばk8sを再度構築しなおせます。

タブ補完

今後はkubectlをメインに使うことになりますが、タブ補完がないと大変なので以下を.bash_profileなどに追加しておきます。

source <(kubectl completion bash)

追加後にsource .bash_profileか再起動をします。

うまくいくとkubectl以降のコマンド、kubectl getなどがタブ補完されるようになります。

おまけ1:dashboardを使う

以前こちらの投稿でkubernetesのdashboardを追加しました。

こちらの手順のとおりにdashboardも追加しました。

無事dashboard追加後の画面がこちら。

・・・小さくてよく見えませんね。。ちゃんと見えてると言いたいだけですw

おまけ2:動作確認

以前の投稿をもとにprometheusとgrafanaをkubernetes1.11上で簡単に動かしてみました。

こちらのgithubからgit cloneしてkubectl apply -f ~するだけです。

結果無事動作してくれました。

こちらはprometheusの画面です。

こちらはgrafanaのログイン画面です。ちゃんと見えてますね。

最後に

無事ubuntu18.04でもkubernetesをkubeadmで構築できました。

ubuntu16.04と手順もほとんど変わりませんでした。

ただkubernetesの公式サイトにはまだubuntu18.04がないので非公式な手順になると思います。公式サイトにubuntu18.04が追加されたらこの投稿も修正、もしくは追加使用と思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする