k3sのメモ
#Tech
目次
はじめに
k3sは、軽量でシンプルなKubernetesディストリビューションです。
k3sは、IoTデバイスやエッジコンピューティングのようなリソースが限られた環境での利用を念頭に置いて設計されており、以下の特徴を持っています。
- 軽量: 必要最低限のコンポーネントのみを含み、バイナリサイズが小さい
- 簡単なセットアップ: ワンコマンドでインストール可能。
- 依存関係の削減: etcdの代わりにSQLiteをデフォルトのデータストアとして使用可能(オプションでetcdや外部DBも利用可能)。
- 低リソース消費: マスターやエージェントがリソースを効率的に利用。
- エッジとIoT向け: 小規模クラスターやシングルノードでの動作に最適化。
k3sは、ラズベリーパイのような小型デバイスからクラウド環境まで、幅広いユースケースに対応できるのが特徴です。
k3sサーバ
k3sサーバは、クラスターのコントロールプレーンを提供する役割を持っています。具体的には、以下を担当します。
- APIサーバ: Kubernetes APIのリクエストを処理
- スケジューラ: ワーカー(エージェント)ノードへのPodの割り当て
- コントローラーマネージャ: Kubernetesリソースの状態管理
- etcd(またはSQLite): クラスターのデータストレージ
サーバのインストールは下記コマンド1つで実施可能です。
# インストール
curl -sfL https://get.k3s.io | sh -
kubernetesの設定ファイルやエージェントを追加する際のトークンは下記ファイルに保存されています。
- kubeconfig
/etc/rancher/k3s/k3s.yaml
- k3s token
/var/lib/rancher/k3s/server/node-token
Nginxでテスト
サーバはエージェントとしても動作するため、NginxでWebサーバを立ててみます。
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
上記の2つのyamlファイルを準備します。
その後、下記コマンドでPodを起動と確認をします。
kubectl apply -f nginx-deployment.yaml nginx-service.yaml
kubectl get pods
k3sエージェント
k3sエージェントは、k3sクラスター内でワーカーノードとして動作するコンポーネントです。
エージェントノードは、k3sサーバ(コントロールプレーン)と連携し、実際にアプリケーションのPodを稼働させる役割を持っています。
インストール
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
アプリごとに担当ノードを決める
kubectl get nodes
kubectl label nodes worker-node1 app=app1
kubectl label nodes worker-node2 app=app2
nodeAffinityでappを指定することでデプロイするノードを変更できる。