{"id":18258901,"url":"https://github.com/pottava/windows-container-sample","last_synced_at":"2026-01-21T01:32:41.988Z","repository":{"id":147533351,"uuid":"267806504","full_name":"pottava/windows-container-sample","owner":"pottava","description":"Windows containers on GKE","archived":false,"fork":false,"pushed_at":"2020-09-30T22:50:23.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T23:29:25.599Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pottava.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-29T08:29:11.000Z","updated_at":"2020-09-30T22:50:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"f28598cb-e50f-42cc-be36-11e09d666a2a","html_url":"https://github.com/pottava/windows-container-sample","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pottava/windows-container-sample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pottava%2Fwindows-container-sample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pottava%2Fwindows-container-sample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pottava%2Fwindows-container-sample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pottava%2Fwindows-container-sample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pottava","download_url":"https://codeload.github.com/pottava/windows-container-sample/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pottava%2Fwindows-container-sample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28621643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T23:49:58.628Z","status":"ssl_error","status_checked_at":"2026-01-20T23:47:29.996Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T10:35:21.212Z","updated_at":"2026-01-21T01:32:41.966Z","avatar_url":"https://github.com/pottava.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# サンプルアプリケーション\n\n## 1. クラスタのセットアップ\n\n### 1.1. gcloud のインストール\n\nhttps://cloud.google.com/sdk/docs/quickstart-windows?hl=ja  \nをご参照いただき、gcloud のインストールをお願いします。以後、PowerShell での実行を想定します。\n\n```bash\n$project_id = \"\"\n$compute_region = \"asia-northeast1\"\n$compute_zone = \"asia-northeast1-c\"\ngcloud config set project ${project_id}\ngcloud config set compute/region ${compute_region}\ngcloud config set compute/zone ${compute_zone}\n```\n\n### 1.2. GKE クラスタの作成\n\n基本的な設定値を指定し、\n\n```bash\n$cluster_name = \"batch\"\n$cluster_ver = \"1.16.13-gke.401\"\n$machine_type = \"n1-standard-2\"\n```\n\nデフォルトのノードプールを GCP の Container-Optimized OS (Linux) として GKE クラスタを作成します。\n\n```bash\ngcloud container clusters create ${cluster_name} --zone ${compute_zone} --cluster-version ${cluster_ver} --machine-type ${machine_type} --enable-ip-alias --preemptible --enable-autoscaling --num-nodes 1 --min-nodes 1 --max-nodes 3 --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --node-labels \"os=cos\" --enable-stackdriver-kubernetes --no-enable-autoupgrade --maintenance-window-start \"2000-01-01T09:00:00-04:00\" --maintenance-window-end \"2000-01-01T17:00:00-04:00\" --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SA,SU' --scopes \"service-control,service-management,compute-rw,storage-ro,cloud-platform,logging-write,monitoring-write\" --no-enable-basic-auth --no-issue-client-certificate\n```\n\n### 1.3. Volcano のインストール\n\nkubectl での操作ができるようクラウドから kubeconfig を取得します。\n\n```bash\ngcloud container clusters get-credentials ${cluster_name}\n```\n\n以下のコマンドで Volcano をインストールしてください。\n\n```bash\n$volcano_version = \"v1.0.1\"\nkubectl apply -f \"https://raw.githubusercontent.com/volcano-sh/volcano/${volcano_version}/installer/volcano-development.yaml\"\nkubectl -n volcano-system get all\n```\n\n### 1.4. Windows ノードプールの追加\n\nWindows ノードプールを追加します。  \n（また、Windows の場合、GPU やプリエンプティブル VM、Workload Identity が利用できないことにご注意ください）  \nWindows のバージョンマッピング（コンテナとして実行できるベースイメージと関係してきます）については以下をご参照ください。  \nhttps://cloud.google.com/kubernetes-engine/docs/how-to/creating-a-cluster-windows?hl=ja#version_mapping\n\n```bash\ngcloud container node-pools create \"${cluster_name}-win-ltsc\" --cluster ${cluster_name} --machine-type ${machine_type} --image-type \"WINDOWS_LTSC\" --enable-autoscaling --num-nodes 1 --min-nodes 1 --max-nodes 10 --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --no-enable-autoupgrade --node-labels \"os=win-ltsc\" --metadata \"disable-legacy-endpoints=true\"\n```\n\n### 1.5. その他スケジュール上有用な設定・リソースを配置\n\nプライオリティを設定します。\n\n```bash\nkubectl apply -f sample/00-common/priority.yaml\n```\n\nノードの状態を確認します。\n\n```bash\nkubectl get nodes -o wide\n```\n\n## 2. クラスタのセットアップ\n\n### 2.1. アプリケーションの build\n\n```bash\ncd sample/00-common\ndocker run --rm -it -v \"\u003cカレントディレクトリ\u003e\":C:\\tmp -w C:\\tmp golang:1.14.4-nanoserver-1809 cmd.exe\n$ go build\n$ exit\ndocker build -t \"gcr.io/${project_id}/sample-apps:envs\" .\n```\n\n### 2.2. アプリケーションの ship と deploy\n\nsample/00-common/samples.yaml の @your-project-id を ${project_id} に置き換え、以下を実行します。\n\n```bash\ngcloud auth configure-docker\ndocker push \"gcr.io/${project_id}/sample-apps:envs\"\nkubectl apply -f sample/00-common/samples.yaml\n```\n\n### 2.3. 結果の確認とお掃除\n\n```bash\nopen \"https://console.cloud.google.com/kubernetes/workload\"\nkubectl describe job.batch.volcano.sh sample\nkubectl delete job.batch.volcano.sh sample\n```\n\n## 3. 並列分散処理の実行\n\n### 3.1. Cloud Storage (GCS) へのファイルアップロード\n\n```bash\n$samle_bucket_name = \"sample-\u003c今日の日時\u003e\"\n$samle_user_id = \"user-0001\"\ngsutil mb -c STANDARD -l ${compute_region} gs://${samle_bucket_name}/\ngsutil cp sample/01-task/input.csv gs://${samle_bucket_name}/${samle_user_id}/\ngsutil cp sample/01-task/parameters.csv gs://${samle_bucket_name}/${samle_user_id}/\n```\n\n### 3.2. GKE から GCS へアクセスするための設定\n\nGCP へのアクセス権限をもつサービスアカウントと、そのアクセスキーを作ります。\n\n```bash\ngcloud iam service-accounts create batch-sample\ngcloud projects add-iam-policy-binding ${project_id} --member \"serviceAccount:batch-sample@${project_id}.iam.gserviceaccount.com\" --role roles/storage.admin\ngcloud iam service-accounts keys create key.json --iam-account \"batch-sample@${project_id}.iam.gserviceaccount.com\"\n```\n\nそれを GKE 上の Secret に格納します。\n\n```bash\nkubectl create secret generic batch-sample --from-file=key.json=key.json\nkubectl describe secrets batch-sample\n```\n\n### 3.3. アプリケーションの build, ship \u0026 deploy\n\nsample/01-task/task.yaml を以下の値に置き換え、後続のコマンドを実行します。\n\n- @your-project-id \u003e ${project_id}\n- @your-bucket \u003e ${samle_bucket_name}\n- @your-user \u003e ${samle_user_id}\n\n```bash\ncd sample/01-task\ndocker run --rm -it -v \"\u003cカレントディレクトリ\u003e\":C:\\go\\src\\github.com\\pottava\\windows-container-sample -w C:\\go\\src\\github.com\\pottava\\windows-container-sample golang:1.14.4-nanoserver-1809 cmd.exe\n$ go mod vendor\n$ go build\n$ exit\ndocker build -t \"gcr.io/${project_id}/sample-apps:01\" .\ndocker push \"gcr.io/${project_id}/sample-apps:01\"\nkubectl apply -f sample/01-task/task.yaml\n```\n\n### 3.3. 結果の確認とお掃除\n\n```bash\nopen \"https://console.cloud.google.com/kubernetes/workload\"\nkubectl describe job.batch.volcano.sh task01\nkubectl delete job.batch.volcano.sh task01\n```\n\n## 4. サンプルのカスタマイズ\n\nsample/02-task/task.yaml の値を置き換えます。\n\n- @your-project-id \u003e ${project_id}\n- @your-bucket \u003e ${samle_bucket_name}\n- @your-user \u003e ${samle_user_id}\n\n### 4.1. ジョブ定義の基本\n\n- `metadata.name`: ジョブ名として識別されます (ex. [user-id]-[project-id]-[start-date]-[seq], 0001-a-200615-01)\n- `spec.plugins.env`: 必須。コンテナ側に `VK_TASK_INDEX` という環境変数が渡り、何個目のタスクかを判定できます\n- `spec.affinity`: 計算クラスターの特定ノードで計算されるよう調整できます\n\n```bash\nkubectl apply -f sample/02-task/task.yaml\nkubectl describe job.batch.volcano.sh 0001-a-200615-01\nkubectl delete job.batch.volcano.sh 0001-a-200615-01\n```\n\n### 4.2. 並列数の調整、ジョブ投入\n\n- `spec.tasks[].replicas`: 並列処理したいタスク数 (ex. 10000)\n- `spec.minAvailable`: 処理開始並列数 (ex. 100 -\u003e 100 並列流せるリソースがあれば処理開始、9900 は待機)\n- `spec.maxRetry`: タスク失敗時のリトライ数上限\n\n```bash\nkubectl apply -f sample/02-task/task.yaml\n```\n\n### 4.3. 自動スケール\n\n待機ジョブが増えてくるとクラスタのノードがスケールします。Windows ノードプールの `min/max-nodes` で事前に調整してください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpottava%2Fwindows-container-sample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpottava%2Fwindows-container-sample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpottava%2Fwindows-container-sample/lists"}