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

インフラ技術者の雑記
本ブログでは、Rancher・Kubernetesの検証環境を構築する方法をご紹介します。
今回ご説明するのは、オンプレミス上の仮想サーバにOSから構築する方法です。
実際に操作することで、Rancher・Kubernetesに対する具体的なイメージを持つことができるので、Rancher・Kubernetesを採用するかどうかの判断材料になると思います。
1.検証環境と事前準備
本記事は、以下の図のようにRancherとRancherが管理するKubernetesクラスタを構築することがゴールとなります。
環境
企業内のネットワークでよくある構成として、オンプレミス上の仮想サーバ上にOSから構築していきます。
●OS
今回のOSは、検証環境のため少ないリソースで稼働させることを想定して、Alpine Linux を採用しました。
まずは公式サイトから Alpine OS の ISOファイルをダウンロードします。
Alpine Linux 「 DOWNLOADS 」
上記サイトから入手したISOファイルを使用し、社内の仮想マシン上でAlpineのセットアップを行います。
例えばVirtualBox上の操作だと以下のようになります。
光学ドライブにダウンロードしたISOファイルを設定します。
仮想マシンを起動した後、rootユーザーでログインします。
以下のコマンドを実行すると、対話的にセットアップを行えるようになります。
セットアップが完了した後、ISOファイルのマウントを外し、仮想マシンを再起動することでAlpineの構築は完了です。
> setup-alpine
セットアップする設定を抜粋します。
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にアクセスし、リリースページに行くと以下のような画面が表示されます。
リリースページから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に接続します。
以下コマンドで、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」を押下します。
以下のような画面が表示されるので、「Set a specific password to use(使用する特定のパスワードを設定する)」を選択後、任意の新規パスワードを入力し、「Continue」を押下します。
Rancherのホーム画面が表示されることを確認できたら、Rancherの構築は完了です。
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」を選択します。
VM上にKubernetesを構築済みのため、CreateではなくImportを選択しています。
「Amazon EKS」「Azure AKS」「Google GKE」などのクラウドサービスがありますが、今回はVM上に構築したK3sなので「Generic」を選択します。
「Cluster Name」を任意で入力したら、他の値はそのままで画面右下の「Create」を選択します。
「Registration」を選択するとインポートするためのコマンドが出てくるので、書いてある通りに実行します。
インポートに成功するとRancher上から作成したClusterがActiveになります。
インポートしたクラスタを選択して作成したマスターノードとワーカーノードが見えることを確認できれば、連携完了です。
以上が、Rancher・Kubernetesの検証環境の構築の流れになります。
5. まとめ
Rancher・Kubernetesの検証環境を構築する方法をご紹介しました。
本記事を参考にRancher・Kubernetesを自社環境へ構築していただき、Rancher・Kubernetesとはどういうものかを体感していただけたらと思います。
Rancher・Kubernetesを使用した環境を自社で導入したい、運用していきたいなどのご要望がございましたら、ぜひお気軽にシステムエグゼへお問い合わせください。