Rancher・Kubernetes検証環境の構築方法

インフラ技術者の雑記

本ブログでは、Rancher・Kubernetesの検証環境を構築する方法をご紹介します。

今回ご説明するのは、オンプレミス上の仮想サーバにOSから構築する方法です。
実際に操作することで、Rancher・Kubernetesに対する具体的なイメージを持つことができるので、Rancher・Kubernetesを採用するかどうかの判断材料になると思います。

1.検証環境と事前準備

本記事は、以下の図のようにRancherとRancherが管理するKubernetesクラスタを構築することがゴールとなります。

infraexpt05_01.jpg

環境

企業内のネットワークでよくある構成として、オンプレミス上の仮想サーバ上にOSから構築していきます。

●OS

今回のOSは、検証環境のため少ないリソースで稼働させることを想定して、Alpine Linux を採用しました。

まずは公式サイトから Alpine OS の ISOファイルをダウンロードします。
Alpine Linux 「 DOWNLOADS 」

infraexpt05_02.jpg

上記サイトから入手したISOファイルを使用し、社内の仮想マシン上でAlpineのセットアップを行います。
例えばVirtualBox上の操作だと以下のようになります。

infraexpt05_03.jpg

光学ドライブにダウンロードしたISOファイルを設定します。

仮想マシンを起動した後、rootユーザーでログインします。

以下のコマンドを実行すると、対話的にセットアップを行えるようになります。
セットアップが完了した後、ISOファイルのマウントを外し、仮想マシンを再起動することでAlpineの構築は完了です。

> setup-alpine

infraexpt05_04.jpg

セットアップする設定を抜粋します。

Select keyboard layout: jp
Select variant: jp
Enter system hostname: 【ホスト名】
Which one do you want to initialize?: eth0
Ip address for eth0?: 【IPアドレス/プレフィックス長】
Do you want to do any manual network configuration?: n
New password: 【パスワード入力】
Retype password: 【パスワード再入力】
Which timezone are you in?: Japan
HTTP/FTP proxy URL?: http://example:8080  # プロキシサーバーを指定
Which NTP client to run?: chrony
Enter mirror number or URL to add: 1
Setup a user?: no
Which ssh server?: openssh
Allow root ssh login?: yes  # 検証用途のためrootでのssh接続を許可
Enter ssh key or URL for root: none
Which disk would you like to use?: sda
How would you like to use it?: sys
WARNING: Erase the above disk and continue?: y

上記の作業を Rancher用、K3s Master用、K3s Worker用の3台分実施します。

ミドルウェア

OSの設定が完了したら、次はミドルウェアの設定を行います。

用途 ホスト名 ミドルウェア・そのほかのソフトウェア
Rancher rancher Docker・curl・Transproxy
k3s Master k3s-master k3s-master・curl・Transproxy
k3s Worker k3s-worker k3s-agent・curl・Transproxy

それぞれのホストへ上記表に記載されているミドルウェアをインストールします。
K3s関連のインストール手順はRancherの構築で説明します。

●Docker

Alpine Linux 「Docker」を参考にして Docker をインストールします。

RancherをDockerコンテナとしてデプロイするのに使用するため、Dockerをインストールします。
デフォルトではDockerパッケージを参照していないため、下記の通りリポジトリの設定を行います。

> cat /etc/apk/repositories 
#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.16/main
# http://dl-cdn.alpinelinux.org/alpine/v3.16/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
#http://dl-cdn.alpinelinux.org/alpine/edge/testing

v3.16/communityのパッケージについているコメントを外します。

> vi /etc/apk/repositories 
#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.16/main
http://dl-cdn.alpinelinux.org/alpine/v3.16/community
#http://dl-cdn.alpinelinux.org/alpine/edge/main
#http://dl-cdn.alpinelinux.org/alpine/edge/community
#http://dl-cdn.alpinelinux.org/alpine/edge/testing

コメントを外したら以下コマンドでDockerをインストールします。

> apk add docker

OS 起動時にDockerも起動するように以下コマンドを実行します。

> rc-update add docker boot

最後にDockerを起動します。

> service docker start

Dockerのインストールは完了です。

●curl

K3s-masterとK3s-agentはKubernetes構築の際に使用するため、curlのインストールを行います。

apkコマンドでインストールします。

> apk add curl

これでcurlのインストールは完了です。

●Transproxy

次にプロキシの設定を行います。

企業内にはプロキシが存在していることが多いです。
プロキシが存在している場合、コンテナ内部からインターネットへ通信しようとすると、プロキシが邪魔をする可能性があります。

通信が邪魔されないようにプロキシ設定を行う必要がありますが、コンテナ一つ一つにプロキシ設定を行うことは手間です。
そこで透過型プロキシを使用します。

Transproxyと呼ばれる透過型プロキシがオープンソースとしてGitHub上に公開されているため、今回はこちらを使用しました。

GitHub「go-transproxy」

GitHubにアクセスし、リリースページに行くと以下のような画面が表示されます。

infraexpt05_05.jpg

リリースページからtar.gzファイルをダウンロードします。
ダウンロードが完了したら、これをAlpine上へアップロードして解凍し、binフォルダの下にTransproxyファイルができていることを確認します。
Transproxyファイルを確認したら、Transproxyファイルをパスの通っている/usr/binへ配置します。

次に、Transproxyをバックグラウンドで動作させるためにAlpineのserviceへ登録を行います。

まずserviceファイルを作成します。

> vi /etc/init.d/transproxy

#!/sbin/openrc-run
export http_proxy="http://example:8080"  # それぞれ自分の環境にあるプロキシサーバーを指定します。
export https_proxy="http://example:8080"  # それぞれ自分の環境にあるプロキシサーバーを指定します。
export no_proxy="192.168.0.0/16,172.16.0.0/12,10.0.0.0/8"  # プロキシ経由でプライベートIPアドレスへ接続しないため設定しています。

command="/usr/bin/transproxy"
command_args="-dns-over-https-enabled"  # プロキシサーバーが DNS プロトコルを許可していない場合はこれを設定します( DNS over HTTPS を使って名前解決をする)。
command_background=true
pidfile="/run/transproxy.pid"

output_log="/var/log/transproxy.log"
error_log="/var/log/transproxy.err"

次に実行権限を付与します。

> chmod +x /etc/init.d/transproxy

Transproxyが起動できるか確認します。

> service transproxy start
> service transproxy status
* status: started ※sutatusがstartedになっていたらOK

OS 起動時にTransproxyも起動するように以下コマンドを実行します。

> rc-update add transproxy boot

service起動時にiptablesがインストールされておらず、エラーになる場合があります。
その場合は以下のコマンドでiptablesをインストールしたのち、再度、serviceを起動します。

> apk add iptables

これでTransproxyのインストールは完了です。

2.Rancherの構築

次にDockerによるRancherの構築を行っていきます。

DockerによるRancherのデプロイ

Tera Termにて、SSH接続でRancher用のOSに接続します。

infraexpt05_06..jpg

以下コマンドで、Rancherがデプロイされていないことを確認します。

>docker ps -a

次に、以下コマンドでRancherをインストールします。
※今回は検証環境のため、Rancherが生成する自己署名証明書を使用しました。

>docker run -d --restart=unless-stopped 
   -p 80:80 -p 443:443 
   --privileged 
   rancher/rancher:latest

以下コマンドでRancherがデプロイされたことを確認し、コンテナID(CONTAINER ID)を控えましょう。

>docker ps -a

Rancherが問題なくデプロイできたら、以下コマンドでRancher初回ログイン時のパスワードを確認し、控えておきます。
※「container-id」には前に控えたコンテナIDを入力します。

>docker logs container-id 2>&1 | grep "Bootstrap Password:"

次に、「https://[Rancher用OSのIPアドレス] 」をWebで入力し、Rancherに接続します。
接続すると以下のような画面が出てくるため、先ほど控えた初回パスワードを入力し、「Login with Local User」を押下します。

infraexpt05_07.jpg

以下のような画面が表示されるので、「Set a specific password to use(使用する特定のパスワードを設定する)」を選択後、任意の新規パスワードを入力し、「Continue」を押下します。

infraexpt05_08..jpg

Rancherのホーム画面が表示されることを確認できたら、Rancherの構築は完了です。

infraexpt05_09.jpg

Rancherの構築が完了したら、次はKubernetesを構築していきます。

3.Kubernetesの構築

Kubernetesを使用できるようにするために、K3sをインストールします。
K3sはRAM:512MB以上、CPU:最小1個と軽量で使用することができることが特徴です。

K3sインストールスクリプトによるデプロイ

まずはKubernetesクラスタを管理するマスターノードを構築します。
事前に用意したK3s Master用のOSに接続します。

K3s Quick-Start Guideを参考にし、K3sをインストールするためのインストールスクリプトを入手します。
K3s 「Quick-Start Guide」

以下コマンドを実行します。

curl -sfL https://get.k3s.io | sh -

以下のようにOKとなってコンソールが戻ってきたら、K3sのマスターノードがインストールされます。

Caching service dependencies...OK
Mounting cgroup filesystem...OK
Starting k3s...OK

次はコンテナ化されたアプリケーションを実行するワーカーノードをインストールします。

ワーカーノードをインストールしてクラスタに追加するには、以下のコマンドを実行します。
このコマンドを実行する際は、https://myserver:6443のmyserverの部分をマスターノードのIPアドレスもしくはホスト名に変更しましょう。

curl -sfL https://get.k3s.io | k3s_URL=https://myserver:6443
k3s_TOKEN=mynodetoken sh -

以下のようにOKとなってコンソールが戻ってきたら、K3sのワーカーノードがインストールされます。

Caching service dependencies...OK
Mounting cgroup filesystem...OK
Starting k3s-agent...OK

インストールが完了したらマスターノード側で以下のコマンドを実施し、「master」と「worker」が表示されたらKubernetesの構築は完了です。

kubectl get node

4. RancherからK3sクラスタを登録

次に、構築したKubernetesをRancherに登録し、管理できるようにしましょう。

Rancherはクラウドサービスに依存しないWeb UIを提供し、様々な環境にあるKubernetesの操作を統一します。
Kubernetesの操作がWeb UI上からできるようになるので便利になります。

まずはRancherでの登録を有効にするためのK3sクラスタの構成を変更します。

以下のコマンドをマスターノードで実行し、K3sサーバがkubeconfigファイルへの書き込みを許可するように構成します。

>curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
Caching service dependencies...OK
Stopping k3s...OK
Starting k3s...OK

上記のようにOKとなってコンソールが戻ってきたら、書き込みを許可する構成ができました。

次はRancherにログインします。
ログインしたら画面左から「Cluster Management」を選択し、「Cluster」の画面から「Import Existing」を選択します。

infraexpt05_10.jpg

VM上にKubernetesを構築済みのため、CreateではなくImportを選択しています。

「Amazon EKS」「Azure AKS」「Google GKE」などのクラウドサービスがありますが、今回はVM上に構築したK3sなので「Generic」を選択します。

infraexpt05_11.jpg

「Cluster Name」を任意で入力したら、他の値はそのままで画面右下の「Create」を選択します。

infraexpt05_12.jpg

「Registration」を選択するとインポートするためのコマンドが出てくるので、書いてある通りに実行します。

インポートに成功するとRancher上から作成したClusterがActiveになります。
インポートしたクラスタを選択して作成したマスターノードとワーカーノードが見えることを確認できれば、連携完了です。

infraexpt05_13.jpg

以上が、Rancher・Kubernetesの検証環境の構築の流れになります。

5. まとめ

Rancher・Kubernetesの検証環境を構築する方法をご紹介しました。

本記事を参考にRancher・Kubernetesを自社環境へ構築していただき、Rancher・Kubernetesとはどういうものかを体感していただけたらと思います。

Rancher・Kubernetesを使用した環境を自社で導入したい、運用していきたいなどのご要望がございましたら、ぜひお気軽にシステムエグゼへお問い合わせください。