Last active
February 28, 2020 11:22
-
-
Save kazuhito-m/10998e1bc41c25039fb5d6fba7161101 to your computer and use it in GitHub Desktop.
gke/k8sのマニフェスト例
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# k8sのアプリケーション群に与える環境変数のテンプレート | |
# | |
# 各環境ではこれを元として、書き換えたものを配置・参照するように。 | |
# | |
apiVersion: v1 | |
kind: ConfigMap | |
metadata: | |
name: thisproject-config | |
data: | |
ENVIRONMENT: local # 環境名 | |
DOMAIN_WEBAPP: xxx.webapp.thisproject.com | |
DOMAIN_EUCAPI: xxx.eucapi.thisproject.com | |
CONNECTIONSTRING_SERVER: x.x.x.x # DBサーバのIP(CloudSQL作成後に埋める) | |
CONNECTIONSTRING_PORT: "5432" | |
CONNECTIONSTRING_USER: postgres | |
CONNECTIONSTRING_PASS: postgres | |
MIGRATION_BEFORE_DESTROY_DATABASE: "false" # マイグレーション実行前にデータをクリアするか |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: webapp | |
spec: | |
replicas: 2 | |
selector: | |
matchLabels: | |
app: webapp | |
template: | |
metadata: | |
labels: | |
app: webapp | |
spec: | |
containers: | |
- name: webapp-container | |
image: asia.gcr.io/thisproject-development/webapp:latest | |
imagePullPolicy: Always | |
ports: | |
- containerPort: 80 | |
envFrom: | |
- configMapRef: | |
name: config | |
--- | |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: eucapi | |
spec: | |
replicas: 2 | |
selector: | |
matchLabels: | |
app: eucapi | |
template: | |
metadata: | |
labels: | |
app: eucapi | |
spec: | |
containers: | |
- name: eucapi-container | |
image: asia.gcr.io/thisproject-development/eucapi:latest | |
imagePullPolicy: Always | |
ports: | |
- containerPort: 80 | |
readinessProbe: # http:/localhost/ が 200 を返さないので要る設定 | |
httpGet: | |
path: /helth | |
port: 80 | |
initialDelaySeconds: 5 | |
periodSeconds: 5 | |
envFrom: | |
- configMapRef: | |
name: config | |
--- | |
apiVersion: batch/v1 | |
kind: Job | |
metadata: | |
name: migration-job | |
spec: | |
template: | |
spec: | |
containers: | |
- name: migration-job-container | |
image: asia.gcr.io/thisproject-development/migration:latest | |
envFrom: | |
- configMapRef: | |
name: config | |
restartPolicy: Never | |
backoffLimit: 5 | |
--- | |
apiVersion: "v1" | |
kind: "Service" | |
metadata: | |
name: "webapp-service" | |
annotations: | |
beta.cloud.google.com/backend-config: '{"ports": {"80":"thisproject-backend-config"}}' | |
spec: | |
type: NodePort | |
ports: | |
- name: http | |
protocol: "TCP" | |
port: 80 | |
targetPort: 80 | |
selector: | |
app: "webapp" | |
--- | |
apiVersion: "v1" | |
kind: "Service" | |
metadata: | |
name: "eucapi-service" | |
annotations: | |
beta.cloud.google.com/backend-config: '{"ports": {"80":"thisproject-backend-config"}}' | |
spec: | |
type: NodePort | |
ports: | |
- name: http | |
protocol: "TCP" | |
port: 80 | |
targetPort: 80 | |
selector: | |
app: "eucapi" | |
--- | |
apiVersion: networking.gke.io/v1beta1 | |
kind: ManagedCertificate | |
metadata: | |
name: cert-webapp | |
spec: | |
domains: | |
- __DOMAIN_WEBAPP__ # 自力書き換えする部分 | |
--- | |
apiVersion: networking.gke.io/v1beta1 | |
kind: ManagedCertificate | |
metadata: | |
name: cert-eucapi | |
spec: | |
domains: | |
- __DOMAIN_EUCAPI__ # 自力書き換えする部分 | |
--- | |
apiVersion: extensions/v1beta1 | |
kind: Ingress | |
metadata: | |
name: thisproject-ingress | |
annotations: | |
kubernetes.io/ingress.allow-http: "false" | |
kubernetes.io/ingress.global-static-ip-name: "ip-thisproject" | |
networking.gke.io/managed-certificates: "cert-webapp,cert-eucapi" | |
spec: | |
rules: | |
- host: __DOMAIN_WEBAPP__ # 自力書き換えする部分 | |
http: | |
paths: | |
- path: /* | |
backend: | |
serviceName: webapp-service | |
servicePort: 80 | |
- host: __DOMAIN_EUCAPI__ # 自力書き換えする部分 | |
http: | |
paths: | |
- path: /* | |
backend: | |
serviceName: eucapi-service | |
servicePort: 80 | |
--- | |
# あとで「Google Cloud Armor」等を差し挟むエントリポイント | |
apiVersion: cloud.google.com/v1beta1 | |
kind: BackendConfig | |
metadata: | |
name: thisproject-backend-config | |
spec: | |
timeoutSec: 600 | |
securityPolicy: | |
name: "" | |
--- | |
# あとで追加された「集計サービス」コンテナ | |
apiVersion: apps/v1 | |
kind: Deployment | |
metadata: | |
name: aggriegation | |
spec: | |
replicas: 2 | |
selector: | |
matchLabels: | |
app: aggriegation | |
template: | |
metadata: | |
labels: | |
app: aggriegation | |
spec: | |
containers: | |
- name: aggriegation-container | |
image: asia.gcr.io/thisproject-development/aggriegation:latest | |
imagePullPolicy: Always | |
ports: | |
- containerPort: 50500 | |
envFrom: | |
- configMapRef: | |
name: config | |
--- | |
apiVersion: "v1" | |
kind: "Service" | |
metadata: | |
name: "aggriegation-service" | |
spec: | |
type: NodePort | |
ports: | |
- name: http | |
protocol: "TCP" | |
port: 50500 | |
targetPort: 50500 | |
selector: | |
app: "aggriegation" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh -x | |
# | |
# 環境ごと情報をあつめ、アプリケーション用マニュフェストファイルを書き換えるスクリプト。 | |
# | |
# FIXME とてつもなく急場しのぎ&ダーティーな手段である…ことは自覚しているので、洗練されたソリューションに置き換える。 | |
# FIXME "kustomize" が有望だが…割と「ピンポイントで書き換える」に向いてないので、どうしたものか。 | |
# 引数から値収集 | |
CONTAINER_VERSION=${1} | |
CONFIGMAP_YAML_FILE=${2} | |
# 次に「各環境毎のk8sのConfigMapファイル」を読み出し、変数定義化する。 | |
for param in $(grep '^ [A-Z]*' ${CONFIGMAP_YAML_FILE} | sed 's/^ *//' | grep -v '^#.*' | sed 's/#.*//' | sed 's/: /=/'); do | |
export ${param} | |
done | |
# kickしたディレクトリから、このスクリプトのあるディレクトリに移動。 | |
cd $(cd $(dirname $0);pwd) | |
# マニフェストのyamlから「必要な部分」を書き換え。 | |
cat ./manifest.yaml \ | |
| sed "s/__DOMAIN_WEBAPP__/${DOMAIN_WEBAPP}/g" \ | |
| sed "s/__DOMAIN_EUCAPI__/${DOMAIN_EUCAPI}/g" \ | |
| sed "s/:latest/:${CONTAINER_VERSION}/g" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment