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コマンドは下記リンクや公式サイトから適切なバージョンをダウンロードして利用してください。
- Download Linux・WSL2用kubectl (https://dl.k8s.io/release/v1.30.4/bin/linux/amd64/kubectl)
macOSを利用している場合にはDocker Desktopを導入すると/usr/local/bin/kubectlが配置されている場合があります。 個別にkubectlをダウンロードする場合にはcurlなどのコマンドラインツールを利用してください。
- For Intel model,
$ curl -LO https://dl.k8s.io/release/v1.30.4/bin/darwin/amd64/kubectl
- For Apple Silicon,
$ curl -LO https://dl.k8s.io/release/v1.30.4/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
に設定ファイルを作成した場合には次のようにコマンドを実行できます。
$ 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を利用すれば自宅からインターネット回線を経由して利用することも可能です。
利用者は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クラスター上の情報は教育的な観点から広く公開することを基本としています。
ポリシー
- 他の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を参照してください
サービスの停止
下記のような場合には予告なしにアプリケーションの停止・削除を行う可能性があります。
- システム全体の安定性に重大な影響を与えている場合
- 公序良俗に反する場合
- その他システム、あるいはユーザーに重大な影響がある場合