メインコンテンツまでスキップ

K3s

K3s は、自社のマシン向けの小規模な Kubernetes ディストリビューションです。Ingress コントローラー(Traefik)とストレージクラス(local-path)が付属しているため、OpenLM Platform のために周辺で用意するものはわずかです。このページは ステップ 1 の前にお読みください。

Platform as VM

K3s、データサービス、OpenLM Platform を 1 台のマシン上に OpenLM のツールでまとめてセットアップしたい場合は、代わりに Platform as VM を使用してください。専用のガイドがあるパッケージ化されたインストーラーです。このページは、自分で運用する K3s クラスターにチャートをインストールする場合を対象としています。

始める前に​

次の要件を確認します。

項目要件
マシン標準セットの場合、それぞれ 8 vCPU / 32 GiB のマシン 3 台、または 24 vCPU / 96 GiB のマシン 1 台(構成は簡単ですが、メンテナンスの余地がありません)。MongoDB、Kafka、Redis を同じマシンで実行する場合は、32 GiB と 6~8 vCPU を追加します。サイジング を参照してください。
OSK3s がサポートする最新の 64 ビット Linux。RHEL 9 系(RHEL、AlmaLinux、Rocky)が最も多くテストされています。
ディスクSSD。local-path のボリュームは /var/lib/rancher/k3s/storage の下に置かれます。
ユーザーに開くポート443(リダイレクト用に 80 も)

Pod 数の上限を引き上げて K3s をインストールする​

K3s では、ノードあたりの Pod 数の上限が既定で 110 です。OpenLM Platform だけで約 95 個の Pod を実行し、さらにクラスター自体の Pod もあるため、K3s をインストールする 前に 上限を引き上げます。

sudo mkdir -p /etc/rancher/k3s
printf 'kubelet-arg:\n - "max-pods=250"\n' | sudo tee /etc/rancher/k3s/config.yaml
curl -sfL https://get.k3s.io | sh -

既存の K3s では、同じ行を /etc/rancher/k3s/config.yaml に追加し、K3s を再起動します(sudo systemctl restart k3s)。

firewalld を使用する RHEL 系のシステムでは、クラスターのネットワーク同士が通信できるようにします。

sudo firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 --add-source=10.43.0.0/16
sudo firewall-cmd --permanent --add-port=443/tcp --add-port=80/tcp
sudo firewall-cmd --reload

複数のマシンを使用する場合は、マシン間で 6443/tcp、8472/udp、10250/tcp も開きます。

複数のマシンを使用する場合​

1 台目のマシンを Pod 数の上限を引き上げて K3s をインストールする の手順でインストールします。このマシンがサーバーになります。マシン同士がプライベートネットワークを共有している場合は、クラスターのトラフィックがそのネットワークにとどまるように、インストールする 前に そのマシンの /etc/rancher/k3s/config.yaml に次の行を追加します。

node-ip: <this machine's private IP>
node-external-ip: <this machine's public IP> # only if users reach it on another address
flannel-iface: <private network interface, e.g. eth1>

追加する各マシンでは、同じ max-pods の行と、そのマシン自身の node-ip / flannel-iface を書き込んでから、サーバーに参加させます。

# on the server: the join token
sudo cat /var/lib/rancher/k3s/server/node-token
# on the new machine
curl -sfL https://get.k3s.io | K3S_URL="https://<server private IP>:6443" K3S_TOKEN="<token>" sh -

すべてのマシンに ノード設定 が必要です。

ワークステーションからの kubectl​

このガイドのコマンドはワークステーションで実行します。そこからクラスターにアクセスするには、インストールする前に、使用するアドレスをサーバーの /etc/rancher/k3s/config.yaml に追加します。

tls-san: [<server public IP or name>]

次に、クラスターの kubeconfig をワークステーションにコピーし、そのアドレスを指すようにします。

scp <user>@<server>:/etc/rancher/k3s/k3s.yaml ~/.kube/openlm-k3s.yaml # readable by root: copy it with sudo on the server first
sed -i.bak 's/127.0.0.1/<server public IP or name>/' ~/.kube/openlm-k3s.yaml
export KUBECONFIG=~/.kube/openlm-k3s.yaml
kubectl get nodes

ワークステーションからサーバーへのポート 6443 が開いている必要があります。このファイルはクラスターへの完全な管理者アクセスを与えるため、安全に保管してください。

Ingress​

K3s に付属する Traefik を Ingress として使用します。ワークシートで INGRESS_CLASS=traefik を設定します。DNS レコードは、マシンの IP(またはマシンの前段にあるロードバランサー)を指すようにします。

HTTPS リダイレクト​

Traefik で、すべての http:// リクエストを https:// にリダイレクトするようにします。K3s は、マニフェストフォルダー内のファイルを自動的に適用します。

sudo tee /var/lib/rancher/k3s/server/manifests/traefik-config.yaml >/dev/null <<'EOF'
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: traefik
namespace: kube-system
spec:
valuesContent: |-
ports:
web:
http:
redirections:
entryPoint:
to: websecure
scheme: https
permanent: true
EOF

1 分ほど待ってから、curl -sI http://$DOMAIN/ | head -1 が 308 を示すことを確認します。

ストレージ​

STORAGE_CLASS=local-path を設定します。このクラスは組み込みで、ほかに何も必要ありません。ボリュームは最初に作成されたノードにとどまりますが、OpenLM Platform の小さな作業用ボリュームでは問題ありません。

ノード設定​

すべてのマシンで、ファイル監視の上限を設定します。

printf 'fs.inotify.max_user_instances = 8192\nfs.inotify.max_user_watches = 524288\n' | sudo tee /etc/sysctl.d/90-openlm.conf
sudo sysctl --system

クラスター内の DNS​

Pod は https://$DOMAIN に到達できる必要があります。ルーターや NAT の背後にある K3s マシンでは、マシンのパブリックアドレスへのトラフィックが戻ってこないことがよくあります。K3s の CoreDNS の拡張ポイントを使い、クラスター内ではこの名前が直接 Traefik に解決されるようにします。

kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata: { name: coredns-custom, namespace: kube-system }
data:
openlm.override: |
rewrite name exact $DOMAIN traefik.kube-system.svc.cluster.local
EOF
kubectl -n kube-system rollout restart deployment coredns

マシン自体の DNS リゾルバーが IPv6 でしか応答しない場合、Pod はクラスター外の名前を解決できません。K3s が IPv4 のリゾルバーを使うようにします。nameserver <IPv4 resolver> の行を含む /etc/rancher/k3s/resolv.conf を作成し、/etc/rancher/k3s/config.yaml に resolv-conf: /etc/rancher/k3s/resolv.conf を追加して、K3s を再起動します。

values の設定​

K3s では、ステップ 4 で用意する values 以外に必要な values はありません。マシンが 1 台の場合は、ノード配置を無効のままにしてください。

データサービス​

SQL Server は通常、クラスターの外部(Windows または Linux のサーバー、あるいはクラウドデータベース)で実行します。MongoDB、Kafka、Redis は、それぞれのチャートやオペレーターでインストールし、専用の namespace で同じ K3s クラスター上に実行できます。その分もマシンのサイズに含めてください。

K3s 固有の確認​

次のコマンドで K3s の設定を確認します。

kubectl get nodes # Ready
kubectl get node -o jsonpath='{.items[0].status.capacity.pods}{"\n"}' # 250
kubectl -n kube-system get pods | grep -E "traefik|coredns" # Running

ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。