地方在住IT系ニート

bkds

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を指定することでデプロイするノードを変更できる。

にほんブログ村 IT技術ブログ IT技術メモへPVアクセスランキング にほんブログ村