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コマンドは下記リンクや公式サイトから適切なバージョンをダウンロードして利用してください。
WindowsのWSL2やUubntu, CentOSなどのLinux環境では次のコマンドでkubectlコマンドをダウンロードしてください。
$ curl -LO https://dl.k8s.io/release/v1.32.8/bin/linux/amd64/kubectl
macOSを利用している場合にはDocker Desktopを導入すると/usr/local/bin/kubectlが配置されています。 個別バージョンのkubectlをダウンロードする場合にはcurlなどのコマンドラインツールを利用してください。
# For Intel model
$ curl -LO https://dl.k8s.io/release/v1.32.8/bin/darwin/amd64/kubectl
# For Apple Silicon
$ curl -LO https://dl.k8s.io/release/v1.32.8/bin/darwin/arm64/kubectl
演習室CentOS環境ではkubectlコマンドを ~yasu-abe/bin/kbuectl に配置しています。
準備作業
kubectlコマンドを実行するための設定ファイルの準備が必要です。
下記サイトにアクセスし、設定ファイルを入手してください。
- Webサイトにアクセスし、Loginボタンを押下します
- AINS ID (e.g., s13xxxxx) とパスワードを入力します
- 緑色の
Grant Accessボタンを押下します - 次ページの2段落目に設定ファイルの内容が表示されますので、“apiVersion: v1"行から"name: oidc"行までを~/.kube/configファイルにコピーしてください。

~/.kube/configファイルの作成方法
emacsやvi (vim)、Visual Studio Code (code) などのエディタが利用できれば任意の方法で作成してください。
エディタを使わずに次のような手順で ~/.kubeディレクトリの作成、configファイルの配置ができます。
なお*##*で始まる行はコメントで実行する必要はありません。
## ディレクトリの作成
$ mkdir -p ~/.kube
## ファイルの新規作成 or 上書き
$ cat > ~/.kube/config
C-d
$ cat > ~/.kube/configコマンドを実行した瞬間にファイルの内容が削除され、入力待ちになります。
Webブラウザから背景が灰色の部分のテキストをコピーし、入力待ち状態の端末画面に貼り付けます。
カーソルが画面の左端になるよいうEnterキーを押下し、C-dはEmacsのようにControlキーを押下しながら、dキーを押下します。
これでエディタを使わずにファイルを新規作成することができました。
確認方法
$ kubectl versionコマンドを実行し、次のようにServer Version:行にサーバーのKubernetesバージョンが表示されることを確認してください。
$ kubectl version
Client Version: v1.32.8
Kustomize Version: v5.4.2
Server Version: v1.32.8
~/.kube/configファイルの内容に問題があると、サーバーに接続できなかったり、接続できてもエラーとなり、サーバーのバージョン番号を取得することができません。
利用方法
~/.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.32.8 | https://k8s.io/ |
| Storage Service (Rook) | v1.17.7 | https://rook.io/, also see the PV & PVC section. |
| nginx (frontend) | v1.29.x | 最新版、HTTP2,HTTP3(QUIC)対応版 |
システムへのアクセス
学内からのみ接続を許可していますが、ISTCが提供するVPNを利用すれば自宅からインターネット回線を経由して利用することも可能です。

利用者は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で確認可能です。
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block (default) rook-ceph.rbd.csi.ceph.com Delete Immediate true 409d
rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 409d
利用可能な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 -n <your namespace> discribe quota
下記のように出力されます。
Name: resource-quota
Namespace: yasu-abe
Resource Used Hard
-------- ---- ----
limits.cpu 900m 2
limits.memory 2162Mi 3000Mi
persistentvolumeclaims 2 20
requests.cpu 900m 2
requests.memory 2162Mi 3000Mi
requests.storage 1012Mi 10000Mi
services.loadbalancers 0 0
LimitRange (limits)
ユーザーは制限値の範囲でCPUやMemoryなど資源の割り当てを変更可能です。
資源の割り当て量を指定しない場合、比較的小規模のアプリケーションを動作させようとしただけで上限値に逹する可能性があります。
LimitRange(limits)は各YAMLファイルでの個別の資源の割り当てを明記する手間を省くためのデフォルト値を設定しています。
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 |
自身のLimitRangeを確認するには次のコマンドを実行してください。
$ kubectl -n <your namespace> discribe limits
下記のように出力されます。
Name: default-limits
Namespace: yasu-abe
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu - - 50m 50m -
Container memory - - 100Mi 100Mi -
Type:SCCPでは10、Type:Guestでは5つのPodが作成することを想定しています。
またLoadBalancerの作成はできません。 アプリケーションへのアクセスについてはIngressの設定セクションを参照してください。
利用を想定していないサービス等
自分で開発したアプリケーションを動作させることを意図しているため、Wordpressのような比較的大規模なアプリケーションを稼動させることは想定していません。
プライバシー・データ保護について
K8sクラスター上の情報は教育的な観点から広く公開することを基本としています。
ポリシー
- 他のnamespaceにあるオブジェクトの制御情報(Podのlog, Secrets, ConfigMap)へのアクセス禁止
- ユーザー間のネットワーク通信の禁止 (e.g., 他のnamespaceにあるDatabaseサーバーへの接続禁止)
実装
- ID名と異なるnamespaceへのネットワーク通信の拒否
- ID名と異なるnamespaceにあるオブジェクトへのcreate, update, delete操作の拒否
- アクセス可能なResourcesリストからpods/log, secret, configmapの削除
SCCP参加メンバーについてはclusterrole,ingressなど参照可能な情報の範囲を広げていますが、上記の制限については同様に適用されます。
考慮点
- 他のユーザーはdeployment、statefulsetなどのリソース定義にアクセス可能です。 パスワード情報は必ずSecretオブジェクトに保存するようにしてください
- Secretオブジェクトの利用方法についてはTutorial/Deployment DVWAを参照してください
サービスの停止
下記のような場合には予告なしにアプリケーションの停止・削除を行う可能性があります。
- システム全体の安定性に重大な影響を与えている場合
- 公序良俗に反する場合
- その他システム、あるいはユーザーに重大な影響がある場合