はじめに
オンプレミスでK8sクラスタをGUI管理できるRancherを構築した際のメモ。
k3sの機能の一つであるHelm CRDで詰まったのでその際のトラブルシューティング方法も記載。
今回、オンプレでの他の構築ツールとしては下記も調べてみたが、vCenterと相性が良くクラスタ作成がWeb GUI画面したかったためRancherを選んだ。
- Kubespray
- kubeadm
Rancherとは
Rancher Labsが提供しているマルチクラウドでKubernetesクラスタを管理するためのプラットフォームを提供するサーバ。
Rancher Labsは、他にもk3sやLonghornなども開発しておりドキュメントもしっかりしているため比較的Kubernetes導入しやすく感じる。
また、2020/12にRancher LabsはSUSEに買収され、コミュニティイベントもかなり活発化している。
全体構成
Rancher Serverを構築してクラスタまで作成したときの全体イメージは下記図の通り。
クラスタを管理するためのRancher Server
とDownstream User Cluster
で構成される。
本記事では、Rancher Server
の構築のみを紹介する。
Rancher ServerはDockerでコンテナを一つ作成するだけでも作れるらしいが、今回は将来的な拡張も考え、シングル構成のk3sとhelm CRDを使ってデプロイする。
k3sでは、kubernetesマニフェストを特定ディレクトリに置くと自動でデプロイされる。
helm CRDは、そのマニフェストの中でhelmチャートを自動的にデプロイできるようにするためのk3sの機能
構築時点のバージョン
OS: CentOS 7.9
k8s: v1.21.4+k3s1
Rancher: 2.6
cert-manager: 1.5.3
構築手順
1. Linuxサーバ構築
特に、記載する内容はない
念の為、下記実施
- firewalldの無効化
- SELinuxの無効化
2. k3sインストール
ドキュメントのQuick Start通りで下記コマンドで自動的にcontainerdからk3sまで自動的にインストールされる
インストール後は、コンテナ間のネットワークがうまくつながらないため、再起動が必要
curl -sfL https://get.k3s.io | sh -
3. cert-managerのインストールとCRDs定義
Rancher ServerはSSL必須となるため、証明書が別途必要となる。
証明書は下記オプションがあるが、今回はデフォルトのRancherにて自動作成する方法ですすめるためcert-managerをインストールする。
設定 | HELM CHARTオプション | cert-managerが必要かどうか |
---|---|---|
ランチャーが生成した証明書(デフォルト) | ingress.tls.source=rancher | yes |
Let’s Encrypt利用した証明書生成 | ingress.tls.source=letsEncrypt | yes |
ファイルからの証明書インポート | ingress.tls.source=secret | no |
3.1 cert-manager CRDsインストール
CRDsはマニフェスト定義では作成されないため、手動でデプロイする必要がある。
インストールするcert-managerのバージョンと合わせて下記コマンドを実行
k3s kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml
3.2 cert-manager定義作成
cert-managerのマニフェストを定義
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: cert-manager
namespace: cert-manager
spec:
version: v1.5.3
chart: cert-manager
repo: https://charts.jetstack.io
3.3 cert-managerネームスペース作成
上記マニフェスト定義をしても、対象のネームスペースがないとデプロイされない。
下記コマンドにて、cert-manager
ネームスペースを作成
k3s kubectl create namespace cert-manager
4. Rancherインストール
Rancher ServerをKubernetes環境にデプロイする。
デプロイタイミングで、cert-managerを使って証明書作成される。
4.1 rancher定義作成
Rancherのマニフェスト定義
Rancherのドキュメントに合わせて、ネームスペースはcattle-system
としている。
初回ログイン時の初回パスワードを事前定義(今回では、rancherにしている)
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: rancher
namespace: cattle-system
spec:
chart: rancher
repo: https://releases.rancher.com/server-charts/latest
set:
hostname: rancher.example.com
bootstrapPassword: rancher
replicas: 1
4.2 cattle-systemネームスペース作成
下記コマンドにて、cattle-system
ネームスペースを作成
k3s kubectl create namespace cattle-system
5. Rancherサーバにアクセス
4.のset.hostname
でで定義したFQDNでサーバにアクセスsると初回ログイン画面が表示されるので、4.のset.bootstrapPassword
でログインすると利用可能
FQDNを使ってのアクセスはDNSへの登録もしくはhostsへの定義をする必要がある。
Helm CRDのトラブルシューティング
Helm CRDを利用したときに引っかかったポイントと対応方法をメモ
- helmとHelm CRDの定義の相関関係がわからない
- ここを参照
-
helm repo add XXX
はspec.repo
で定義 -
helm install XXX
はspec.chart
で定義 - 他は
spec.set
とspec.version
を使えれば大丈夫。spec.targetNamespace
はmetadata
で代替できている?
- helm CRDの仕様がわからない
- すみません。私もわからなかったです。
- 動き的には、ファイル作成されたタイミングで即座に実行される
- 削除時は、特に何もされない?(確証なし)ため、ネームスペースでまとめて削除がいい
- kubernetesのデプロイエラー確認
- helm CRDが正しく動いているかは、
/var/log/messages
を確認 - kubernetesのデプロイ時エラーは、
k3s kubectl logs -n <namespace> <pod名>
で確認 - pod名はデプロイのたびに変わるため、別窓で右記コマンドで定期的にpod名を列挙
watch k3s kubectl get pods --all-namespaces
- helm CRDが正しく動いているかは、
さいごに
rancherとk3sを利用することで、Kubernetes構築に必要な手順をかなり簡略化できるようになった。
Ansible AWXでもKubernetes利用が前提となっているなどKubernetes環境が基盤構築で必要となる世界になってきたので他OS利用していたとしても容易なKubernetes構築が可能になるようにしていきたい。
特にpodmanとは今後も仲良くはしたいが...
今後は、VMware環境でのクラスタ作成とLonghornを使ったストレージ管理をしてみたいと思う。