Rancher on k3os
はじめに
先日、Rancher Labs より k3os がリリースされました。
軽い上に、OS に既に k3s (k8s の軽量版) がインストールされているということでコンテナのお試しにも使えるかと思います。
折角なので簡単な導入と、Rancher の構築までを試したので残しておきます。
トラブルシュートしながらやったので、ある程度はつまずかずに進めるはず・・・です。
サーバ構成
今回は クラウドを使わずにローカルの環境で構築します。
k3os はリソース制限が緩いのでサクサク動くかと思います。
- ホストOS:Windows 7 Pro SP1
- VirtualBox:5.2.30
- ksos:v0.2.0
k3os 構築
あらかじめ k3os のサイトより ISO をダウンロードしておきましょう。
※約400MBです。
↓ 今回使う ISO ファイル
https://github.com/rancher/k3os/releases/tag/v0.2.0
↓リリース一覧
https://github.com/rancher/k3os/releases
vm 構築
VirutualBox に VM を構築します。
今回の VM の構成は以下の通りです。
- 名前:任意
- タイプ:Linux
- バージョン:Other Linux (64-bit)
- メモリーサイズ:2048 MB
- ハードディスク
- サイズ:8.00GB
- タイプ:VDI
- その他:可変サイズ
新規作成した VM に以下の設定を追加します。
- ストレージ
- 空の光学ドライブにダウンロードした k3os の ISO ファイルを指定
- ネットワーク
- アダプター 1
- 割り当て:ブリッジアダプター
- アダプター 1
k3os 起動
それでは早速起動してみましょう
30秒もかからずに起動はするかと思います。
ログインアカウントを求められるので「rancher」を入力するとパスワードなしでログインできます。
起動直後の状態ですとまだパスワードや鍵の設定がないため、ssh でのログインができません。
ひとまずパスワードを設定して ssh できる状態にします。
※sudo がパスワード無しで実行できます
$ sudo passwd rancher
# 合わせて接続先 IP アドレスを確認しておきます
$ ip a show dev eth0
# または
$ ifconfig eth0
teraterm などの ssh クライアント(アカウント名:rancher / パスワード:設定したパスワード)でログインできることを確認してください。
Welcome to k3OS!
Refer to https://github.com/rancher/k3os for README and issues
By default mode of k3OS is to run a single node cluster. Use "kubectl"
to access it. The node token in /var/lib/rancher/k3s/server/node-token
can be used to join agents to this server.
You can configure this system or install to disk using "sudo os-config"
k3os-19686 [~]$
os-config
k3os の設定に os-config を使用します。
まずはディスクに k3os をコピーします。
※コピーせずに利用することもできますが、再起動の度にローカルディスクはリセットされます。
# sudo を付けて実行します
$ sudo os-config
Running k3OS configuration
Choose operation
1. Install to disk
2. Configure server or agent
Select Number [1]: 1 ★ ディスクへのインストール と k3sのタイプ設定が選択可能
Config system with cloud-init file? [y/N]: N ★ cloud-init の設定ファイルを指定して起動時の自動設定
Authorize GitHub users to SSH? [y/N]: N ★ GitHub 連携用に SSH の認証設定
Please enter password for [rancher]: ******* ★ パスワードを再設定
Confirm password for [rancher]: ******* ★ パスワード再入力
Configure WiFi? [y/N]: N ★ WiFiの設定
Run as server or agent?
1. server
2. agent
Select Number [1]: 1 ★ 起動時の k3s のタイプを設定
Token or cluster secret (optional): ★ agent を後ほど追加する際に必要なトークン、クラスタシークレットの設定
Configuration
-------------
device: /dev/sda
Your disk will be formatted and k3OS will be installed with the above configuration.
Continue? [y/N]: y ★ 最終確認
・・・
Installation finished. No error reported.
* Rebooting system in 5 seconds (CTRL+C to cancel) ★ 自動で再起動します
自動で再起動が行われるのですが、このまま起動しても設定は反映されていません。
なぜかというと、マウントしている ISO ファイルで起動するためディスクに書き込んだ設定で起動しません。
コンソールから rancher アカウントでログインし、以下のコマンドで k3os を停止させましょう。
$ sudo poweroff
※k3os は alpine をもとに作られているため、shutdown コマンドはありません。
VirutalBox の設定から ISO ファイルを外しましょう。
起動すると起動画面のメニューが変ったことが確認できます。
起動後、ユーザ名:rancher / 設定したパスワード で ssh ログインできることを確認してください。
kubectl のテストだけであればこれでセットアップ完了です。
kubectl 使って好きにコンテナを構築できます。
※ディスクへのファイルコピーが無くても、k3os が起動した段階で kubectl は利用可能です
※ディスクへのコピーが完了後は os-config が利用できなくなっていました
⇒インストール前は /usr/local/bin/os-config に設置されていました
※ディレクトリによってはエフェメラル(再起動でリセット)な場所もあるので、以下を参考にしてください
https://github.com/rancher/k3os#file-system-structure
Rancher 構築
折角なので Rancher を構築してみようと思います。
弊社 FY0323 さんの以下の記事を参考にさせて頂きました。
※Rancher 構築は主目的では無いので流しめで。
helm インストール
rancher の構築は docker さえ動いていればワンライナーなのですが、k3s は containerd が動いています。
今回は helm で rancher を構築します。
# container-runtime 確認
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3os-21654 Ready <none> XdXXh v1.14.1-k3s.4 X.X.X.X <none> k3OS v0.2.0 4.15.0-47-generic containerd://1.2.5+unknown
# ServiceAccount 作成
$ kubectl -n kube-system create serviceaccount tiller
# ClusterRoleBinding 作成
kubectl create clusterrolebinding tiller --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
# helm バイナリダウンロード
$ curl -O https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 21.8M 100 21.8M 0 0 31.1M 0 --:--:-- --:--:-- --:--:-- 31.1M
# 解凍して配置
$ tar zxf helm-v2.13.1-linux-amd64.tar.gz
$ sudo mv linux-amd64/helm /usr/local/bin/
# helm 実行確認
$ helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Error: Get http://localhost:8080/api/v1/namespaces/kube-system/pods?labelSelector=app%3Dhelm%2Cname%3Dtiller: dial tcp [::1]:8080: connect: connection refused
# 接続先ポートが異なるため Error となっている
# helm 初期化用(tiller 作成用に k3s にアクセスするため)に接続設定ファイルを作成する
$ kubectl config view > ~/.kube/config
# 初期化しようとしますが、今度は証明書でエラーとなります
$ helm init --service-account tiller
・・・
$HELM_HOME has been configured at /home/rancher/.helm.
Error: error installing: Post https://localhost:6443/apis/extensions/v1beta1/namespaces/kube-system/deployments: x509: certificate signed by unknown authority
# 接続設定ファイルから、証明書設定をコメントアウトし、TLS の設定を追加します
$ vim ~/.kube/config
・・・
- cluster:
# certificate-authority-data: DATA+OMITTED ★コメントアウト
insecure-skip-tls-verify: true ★追加
server: https://localhost:6443
name: default
・・・
# helm のインストール(今度は成功)
$ helm init --service-account tiller
$HELM_HOME has been configured at /home/rancher/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
# version 確認
$ helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
※helm version を早く叩きすぎると以下のエラーが出ます。少し待ってから再度コマンドをたたきましょう
Error: could not find a ready tiller pod
※helm デフォルトで利用するポート(6443)と k3s(8080) で使うポートが異なりました
※証明書、TLS の設定を無効化してデプロイしています
certmanager cnt
Rancher で利用する証明書管理用の Pod をデプロイします。
# レポジトリを追加
$ helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
"rancher-latest" has been added to your repositories
# レポジトリを確認
$ helm repo list
NAME URL
stable https://kubernetes-charts.storage.googleapis.com
local http://127.0.0.1:8879/charts
rancher-latest https://releases.rancher.com/server-charts/latest
# cert-manager デプロイ
$ helm install stable/cert-manager --name cert-manager --namespace kube-system --version v0.5.2
NAME: cert-manager
LAST DEPLOYED: XXXX
NAMESPACE: kube-system
STATUS: DEPLOYED
・・・
# デプロイ確認
$ helm ls
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
cert-manager 1 XXXX DEPLOYED cert-manager-v0.5.2 v0.5.2 kube-system
$ kubectl get deploy -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
cert-manager 1/1 1 1 3m11s ★
coredns 1/1 1 1 21m
tiller-deploy 1/1 1 1 17m
traefik 1/1 1 1 20m
Rancher GUI
最後に Rancher をデプロイして、アクセスまで確認します。
※helm でデプロイする際に hostname を指定していますが、DNS または hosts ファイルで適宜名前解決できるように準備してください。
※今回の検証ではクライアント側(Windows PC)の hosts ファイルに k3os のIPアドレスを登録してアクセス確認します。
# rancher のデプロイ
$ helm install rancher-latest/rancher --name rancher \
--namespace cattle-system --set hostname=www.rancher.internal
NAME: rancher
LAST DEPLOYED: XXXX
NAMESPACE: cattle-system
STATUS: DEPLOYED
・・・
NOTES:
Rancher Server has been installed.
・・・
Browse to https://www.rancher.internal
Happy Containering!
# デプロイ確認
$ helm list
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
cert-manager 1 XXXX DEPLOYED cert-manager-v0.5.2 v0.5.2 kube-system
rancher 1 XXXX DEPLOYED rancher-2.2.3 v2.2.3 cattle-system
$ kubectl get all -n cattle-system
NAME READY STATUS RESTARTS AGE
pod/rancher-857cc6984c-4ln46 1/1 Running 2 109s
pod/rancher-857cc6984c-r24x2 1/1 Running 2 109s
pod/rancher-857cc6984c-wltpm 1/1 Running 1 109s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rancher ClusterIP 10.43.30.65 <none> 80/TCP 109s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/rancher 3/3 3 3 109s
NAME DESIRED CURRENT READY AGE
replicaset.apps/rancher-857cc6984c 3 3 3 109s
$ kubectl get ingress --all-namespaces
NAMESPACE NAME HOSTS ADDRESS PORTS AGE
cattle-system rancher www.rancher.internal 80, 443 14m
hosts に k3os の IP アドレスで www.rancher.internal
を登録してから以下のアドレスにアクセスしてみましょう。
https://www.rancher.internal
無事表示されたでしょうか。
まとめ
今回は k3os 導入にふれてみました。
既に k3s が入っており、またディスクサイズも少なくすむ為、手軽にコンテナを始められると思います。
また、起動も早い為、検証、開発の環境の構築もスピーディに行えると思います。
クラスタリングについても簡単に行えそうなので、次回はクラスタリングについてふれたいと思います。
反省会
起動はしたものの裏でエラーがいくつかはかれていたので補足を・・・
※rancher にログイン後に pod が作成されたみたいです。
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
cattle-system cattle-cluster-agent-68874df6b6-v4ggm 0/1 CrashLoopBackOff 18 26m
cattle-system cattle-node-agent-9xcpd 0/1 CrashLoopBackOff 8 36m
cattle-node-agent
名前解決が出来ないエラーがでていました。
$ kubectl logs -n cattle-system cattle-node-agent-9xcpd
・・・
ERROR: https://www.rancher.internal/ping is not accessible (Could not resolve host: www.rancher.internal)
応急処置として k3os の /etc/hosts の localhost に www.~ を登録しておくと正常に起動することを確認しました。
ただ、/etc/hosts は再起動するとリセットされる対象なので一時しのぎ程度と思ってください。
cattle-cluster-agent
こちらも名前解決でエラーですが・・・
・・・
INFO: Using resolv.conf: search cattle-system.svc.cluster.local svc.cluster.local cluster.local nameserver 10.43.0.10 options ndots:5
ERROR: https://www.rancher.internal/ping is not accessible (Could not resolve host: www.rancher.internal)
こちらは DNS 設定が異なるようで解決できませんでした。
時間ができたら・・・
Author And Source
この問題について(Rancher on k3os), 我々は、より多くの情報をここで見つけました https://qiita.com/t_ume/items/2fde5ebeee404b8c281c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .