「クラウドネイティブな最新アプリケーションのデリバリを、使いやすい CI/CD ソリューションによって自動化したいお客様との間に接点ができることは、私たちにとってうれしいことです。Jenkins ベースの CI/CD Kubernetes アプリケーションである CloudBees Core を使用すれば、GCP Marketplace からオンプレミスにもクラウドにもデプロイできます。」 ―― Rob Davies 氏、CloudBees の技術担当 VP
「私たち Ubisoft の目標は、プレーヤーの皆さんがゲームに集中できるような最高品質のシームレスなサービスを提供する新しい方法を絶えず見つけ出すことです。Agones は、ゲーム専用サーバーを任意のデータセンターで運用可能にする柔軟性をもたらし、私たちのチームが必要とするリソースを今までよりもしっかり管理できるようにしてくれました。Google とのコラボレーションにより、Kubernetes を大規模にデプロイできる Google Cloud の専門的な能力と、ゲーム開発のパイプラインや技術に関する私たちの深い知識を組み合わせることが可能になったのです。」 — Carl Dionne 氏、Ubisoft のオンライン テクノロジー グループ開発ディレクター
kubectl
Dockerfile
FROM debian:stretch RUN useradd -m server COPY ./bin/game-server /home/server/game-server RUN chown -R server /home/server && \ chmod o+x /home/server/game-server USER server ENTRYPOINT ["/home/server/game-server"]
gameserver.yaml
apiVersion: "stable.agon.io/v1alpha1" kind: GameServer metadata: name: my-game-server spec: containerPort: 7654 # Pod template template: spec: containers: - name: my-game-server-container image: gcr.io/agon-images/my-game-server:0.1
$ kubectl apply -f gamesever.yaml gameserver "my-game-server" created
GameServer
State
$ kubectl describe gameserver my-game-server Name: my-game-server Namespace: default Labels: Annotations: API Version: stable.agones.dev/v1alpha1 Kind: GameServer Metadata: Cluster Name: Creation Timestamp: 2018-02-09T05:02:18Z Finalizers: stable.agones.dev Generation: 0 Initializers: Resource Version: 13422 Self Link: /apis/stable.agones.dev/v1alpha1/namespaces/default/gameservers/my-game-server UID: 6760e87c-0d56-11e8-8f17-0800273d63f2 Spec: Port Policy: dynamic Container: my-game-server-container Container Port: 7654 Health: Failure Threshold: 3 Initial Delay Seconds: 5 Period Seconds: 5 Host Port: 7884 Protocol: UDP Template: Metadata: Creation Timestamp: Spec: Containers: Image: gcr.io/agones-images/my-game-server:0.1 Name: my-game-server-container Resources: Status: Address: 192.168.99.100 Node Name: agones Port: 7884 State: Ready Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal PortAllocation 3s gameserver-controller Port allocated Normal Creating 3s gameserver-controller Pod my-game-server-q98sz created Normal Starting 3s gameserver-controller Synced Normal Ready 1s gameserver-controller Address and Port populated
--num-nodes
$ gcloud beta container clusters create my-regional-cluster --region=us-central1 --num-nodes=2
#Your project ID PROJECT_ID= #Your Zone. E.g. us-west1-c ZONE= #New service account we will create. Can be any string that isn't an existing service account. E.g. min-priv-sa SA_NAME= #Name for your cluster we will create or modify. E.g. example-secure-cluster CLUSTER_NAME= #Name for a node-pool we will create. Can be any string that isn't an existing node-pool. E.g. example-node-pool NODE_POOL=
gcloud iam service-accounts create "${SA_NAME}" \ --display-name="${SA_NAME}" gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/logging.logWriter gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/monitoring.metricWriter gcloud projects add-iam-policy-binding "${PROJECT_ID}" \ --member "serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/monitoring.viewer #if your cluster already exists, you can now create a new node pool with this new service account. gcloud container node-pools create "${NODE_POOL}" \ --service-account="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --cluster="${CLUSTER_NAME}"
gcloud container clusters update "${CLUSTER_NAME}" \ --update-addons=KubernetesDashboard=DISABLED
gcloud container clusters update "${CLUSTER_NAME}" \ --no-enable-legacy-authorization
gcloud container clusters create "${CLUSTER_NAME}" \ --service-account="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --no-enable-legacy-authorization \ --disable-addons=KubernetesDashboard
gcloud beta container clusters create "${CLUSTER_NAME}" \ --project="${PROJECT_ID}" \ --zone="${ZONE}" \ --enable-network-policy
「(Google Kubernetes Engine によって)弊社の Kubernetes クラスタは自己回復力とスケーラブルなパフォーマンスを手に入れました。Google が完全にサポートし、管理してくれるので、他のクラウド プロバイダーのコンテナ サービスよりも魅力的です。」 — Arya Asemanfar 氏、Mixpanel のエンジニアリング マネジャー
「私たち Shopify は、本番環境に送り込むすべてのコンテナを監視、統制する包括的な方法を探していました。私たちは毎営業日に 6,000 ものビルドを出荷し、33 万種以上のコンテナ イメージを含むレジストリを保守しています。弊社の Kubernetes パイプラインに Grafeas と Kritis を導入すれば、弊社で作るすべてのコンテナ イメージの脆弱性とビルドの情報を自動的に保存し、Shopify ビルド コンテナのポリシーを徹底させることができます。弊社の Kubernetes クラスタは、ビルダーが署名したイメージしか実行しません。Grafeas と Kritis は、デベロッパーをコード開発に専念させつつ、今まで以上のセキュリティ保護に本当に役に立ちます。より多くの企業が Grafeas と Kritis をプロジェクトに組み込むことを期待しています。」 — Jonathan Pulsifer 氏、Shopify のシニア セキュリティ エンジニア(Shopify のブログもご覧ください)