---
title: K3s
description: 1 台または数台の Linux マシン上の K3s に OpenLM Platform をインストールします。Traefik、ローカルストレージ、Pod 数の上限、HTTPS リダイレクト、クラスター内の DNS について説明します。
product: OpenLM Platform
---

K3s は、自社のマシン向けの小規模な Kubernetes ディストリビューションです。Ingress コントローラー（Traefik）とストレージクラス（`local-path`）が付属しているため、OpenLM Platform のために周辺で用意するものはわずかです。このページは [ステップ 1](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/install/step-1-prepare-cluster) の前にお読みください。

:::note[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** を追加します。[サイジング](https://www.openlm.com/documentation/ja/cloud/deployment-operations/on-premise/deployment-guide/kubernetes/before-you-start/sizing) を参照してください。 |
| OS | K3s がサポートする最新の 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 をインストールする **前に** 上限を引き上げます。

```bash
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 系のシステムでは、クラスターのネットワーク同士が通信できるようにします。

```bash
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 をインストールする](#pod-数の上限を引き上げて-k3s-をインストールする) の手順でインストールします。このマシンがサーバーになります。マシン同士がプライベートネットワークを共有している場合は、クラスターのトラフィックがそのネットワークにとどまるように、インストールする **前に** そのマシンの `/etc/rancher/k3s/config.yaml` に次の行を追加します。

```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` を書き込んでから、サーバーに参加させます。

```bash
# 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` に追加します。

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

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

```bash
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 は、マニフェストフォルダー内のファイルを自動的に適用します。

```bash
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 の小さな作業用ボリュームでは問題ありません。

## ノード設定

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

```bash
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 に解決されるようにします。

```bash
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 の設定を確認します。

```bash
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
```
