[ 言語選択: English ]

KubeCamp

KubeCampは全てのAINSユーザーが利用可能なkubernetesクラスターです。

SCCPの登録者に優先的にリソースを割り当てるため、他のゲストユーザーがこのKubernetesクラスターで利用できる資源(メモリ、CPU、ストレージ等)には制限があります。

詳細は制限事項を確認してください。

このサイトの他の文書を日本語で閲覧するにはGoogle Chrome Browserの翻訳機能などを利用してください。

よく利用するリンク

システムの利用方法

システムの利用はkubectlコマンドを通して行います。

kubectlコマンドを実行する前に

ダッシュボードからCreate Namespaceボタンを押すと、K8sクラスターにnamespaceオブジェクトなど利用に必要なリソースの作成が行われます。

同時にHarborの利用登録も行われ、全ての登録が完了するまで1〜2分程度です。

また管理ページから利用できるCPU、メモリなどの割り当て状況が確認できます。

既に作成されたnamespaceを削除(Delete)し、再度作成(Create)することで全てを初期化することもできます。

kubectlコマンド

K8sクラスターへの全ての操作はkubectlコマンドから遠隔で行います。

kubectlコマンドは下記リンクや公式サイトから適切なバージョンをダウンロードして利用してください。

macOSを利用している場合にはDocker Desktopを導入すると/usr/local/bin/kubectlが配置されている場合があります。 個別にkubectlをダウンロードする場合にはcurlなどのコマンドラインツールを利用してください。

演習室CentOS環境ではkubectlコマンドを ~yasu-abe/bin/kbuectl に配置しています。

準備作業

kubectlコマンドを実行するための設定ファイルの準備が必要です。

下記サイトにアクセスし、設定ファイルを入手してください。

  1. Webサイトにアクセスし、Loginボタンを押下します
  2. AINS ID (e.g., s13xxxxx) とパスワードを入力します
  3. 緑色の Grant Access ボタンを押下します
  4. 次ページの2段落目に設定ファイルの内容が表示されますので、“apiVersion: v1"行から"name: oidc"行までを~/.kube/configファイルにコピーしてください。

Setup kubectl config file

利用方法

~/.kube/configに設定ファイルを作成した場合には次のようにコマンドを実行できます。

  $ kubectl get node
  $ kubectl top node
  $ kubectl top pods --all-namespaces 
  $ kubectl -n <your namespace> get limits

<your namespace> は、AINS IDで置き換えてください。(例: kubectl -n s13xxxxx get limits)

複数のconfigファイルを管理したい場合や、~/.kube/config 以外の場所に配置する場合には --kubeconfig オプションを利用してください。

以下の2つのコマンドラインは等価です。

  $ kubectl                             -n <your namespace> get limits
  $ kubectl --kubeconfig ~/.kube/config -n <your namespace> get limits

Service、Deployment(Pod)などのオブジェクトを作成する場合には、-nオプションを必ず指定してください。

具体的な例についてはGetting Startedに記載されているコマンドラインを参照してください。

システム構成

Component Version Additional Information
Kubernetes v1.30.4 https://k8s.io/
Storage Service (Rook) v1.14.10 https://rook.io/, also see the PV & PVC section.

システムへのアクセス

学内からのみ接続を許可していますが、ISTCが提供するVPNを利用すれば自宅からインターネット回線を経由して利用することも可能です。

KubeCamp System Overview

利用者はkubectlコマンド(Port:6443)とWebブラウザー(Port:80,443)でのみK8sクラスターにアクセス可能です。

WebブラウザーからのHTTPプロトコル(ポート80)によるアクセスはHTTPSにリダイレクト(301)されます。

  $ curl -I http://kubecamp.u-aizu.ac.jp/signup/
  HTTP/1.1 301 Moved Permanently
  ...
  Location: https://kubecamp.u-aizu.ac.jp/signup/

SSHによるリモートログイン、その他の方法によって直接各ノードにアクセスすることはできません。

Ingressの設定

各ユーザーは自身のnamespace上に、80番ポートを受け入れる “<your namespace>-svc” という名前のServiceオブジェクトを作成することでWebブラウザーからのアクセスを受け入れることができます。このServiceオブジェクトだけがIngressからの通信を受け付けることができます。

  NAME           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
  s13xxxxx-svc   ClusterIP   10.233.8.213   <none>        80/TCP    16h

kubecamp.u-aizu.ac.jpでアクセスを受け付けるWebサーバーはcontext-rootを変更せずにユーザーのアプリケーションを呼び出します。 例えば https://kubecamp.u-aizu.ac.jp/s13xxxxx/ へのアクセスは、自動的に http://s13xxxxx-svc.s13xxxxx.svc.cluster.local/s13xxxxx/ に変換されています。

アプリケーションによっては動作する際に、context-rootが”/“であることを前提にしている場合があります。 このような場合にはReverse Proxyサーバーを利用することでcontext-rootを”/“に変換することができますが、完全な解決策ではありません。

アプリケーションが相対パスによって各ファイルを参照するように構築されている場合には正しく動作しますが、絶対パスでアプリケーション内のファイルを参照している場合には動的にコンテンツを書き換えない限り正常に動作しません。

ServiceとReverse ProxyサーバーのサンプルはWebSocket Socket.IO and Reverse Proxy Exampleチュートリアルを参照してください。context-rootの変換についてもこのチュートリアルの中で説明しています。

Ingressオブジェクトが作成されるまでの反映時間

なお”<your namespace>-svc“を作成してから1〜5分ほど経過すると対応するIngressオブジェクトがシステムに登録されます。

SCCPのメンバーは閲覧権限がありますので、下記のコマンドで自分のIDと同じNAMEのIngressオブジェクトが登録されているか確認することができます。

$ kubectl -n ingress-nginx get ingress

Persistent Volumes (PV & PVC)

Rook/Cephによる永続化ボリュームの機能が利用可能で、以下のStorageClassを提供しています。

StorageClass (sc) NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block (default) rook-ceph.rbd.csi.ceph.com Delete Immediate true 34d
rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 34d

システム上では$ kubectl get scで確認可能です。

利用可能なStorageClass名、具体的な利用方法についてはDeployment Nginx using PVCのサンプルを参照してください。

バックアップ

k8sクラスター上のファイルについては一切のバックアップは取得していません。

バックアップが必要なファイルについては、kubectl cpコマンドを利用することでPod内部のファイルをkubectlコマンドを実行しているPCにダウンロードすることができます。

制限事項

全ユーザーにはSCCPメンバーとその他の利用者に分けて2通りの設定が適用されます。

Type Max CPU Quota Max Memory Quota Max Storage Quota Max Number of PVCs
SCCP 2000m 3000MiB 10GiB 20
Guest 200m 750MiB 1GiB 5

自身のResourceQuota設定は次のように確認することができます。

  $ kubectl --kubeconfig ~/.kube/config -n <your namespace> get quota

下記のように出力されます。

  NAME             AGE     REQUEST                                                                                                        LIMIT
  resource-quota   3d19h   persistentvolumeclaims: 1/5, requests.cpu: 30m/200m, requests.memory: 300Mi/500Mi, requests.storage: 1Gi/1Gi   limits.cpu: 30m/200m, limits.memory: 300Mi/500Mi

LimitRange

ユーザーは制限値の範囲でCPUやMemoryなど資源の割り当てを変更可能です。

各YAMLファイルでの資源の割り当てを明記する手間を省くためResourceLimitsを設定しています。

DeploymentなどのPods定義にresourcesを設定していない場合には次の値が使われます。

Type Default CPU Limit Request CPU Limit Default Memory Limit Request Memory Limit Number of LoadBalancers
SCCP 50m 50m 100MiB 100MiB 0
Guest 10m 10m 100MiB 100MiB 0

Type:SCCPでは10、Type:Guestでは5つのPodが作成することを想定しています。

またLoadBalancerの作成はできません。 アプリケーションへのアクセスについてはIngressの設定セクションを参照してください。

利用を想定していないサービス等

自分で開発したアプリケーションを動作させることを意図しているため、Wordpressのような比較的大規模なアプリケーションを稼動させることは想定していません。

プライバシー・データ保護について

K8sクラスター上の情報は教育的な観点から広く公開することを基本としています。

ポリシー

実装

SCCP参加メンバーについてはclusterrole,ingressなど参照可能な情報の範囲を広げていますが、上記の制限については同様に適用されます。

考慮点

サービスの停止

下記のような場合には予告なしにアプリケーションの停止・削除を行う可能性があります。