Trafic -> `Ingress Service` -> ClusterIP Service: Deployment(client)
|
| Deployment(worker)
| |
| ↓
-> ClusterIP Service: Deployment(server) -> ClusterIP Service: Deployment (Redis)
|
|
-> ClusterIP Service: Deployment(Postgres) -> Postgres PVC
- Create config files for each service and deployment
- Test locally on minikube
- Create a Github/Travis flow to build images and deploy
- Deploy app to a cloud provider
このクラスタを動作させるために secret を登録する必要がある。
kubectl create secret generic pgpassword --from-literal PGPASSWORD=XXXXX
https://kubernetes.github.io/ingress-nginx/deploy/#provider-specific-steps
から nginx ingress controller をインストールする。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml
minikube addons enable ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.47.0/deploy/static/provider/cloud/deploy.yaml
LoadBalancer が完全に作成されるまで EXTERNAL IP がとなる。 EXTERNAL-IP が作成されるのを待つ必要がある。
ただし、Kubernetes の Service type LoadBalancer に対応していないインフラストラクチャ上で type LoadBalancer な Service を作成するとずっとのままとなる。
kubectl get svc -n ingress-nginx
https://minikube.sigs.k8s.io/docs/drivers/docker/#known-issues
minikube delete
minikube start --driver=hyperkit
or
minikube start --driver=virtualbox
- create github repo
- tie repo to Travis CI
- create Google Cloud project
- Enabling billing for the project
- add deployment scripts to the repo
brew install travis
travis login --github-token $GITHUB_TOKEN_TRAVIS --pro
travis encrypt-file service-account.json -r Hironari-Saito/multi-k8s --pro
## 生成されたファイルをコミットし、元のファイルは削除する。.travis.ymlに生成されたコマンドを記載する。
gcloud config set project <project_id>
gcloud config set compute/zone <zone>
gcloud container clusters get-credentials <cluster_name>
kubectl create secret generic pgpassword --from-literal PGPASSWORD=<postgresql password>
# Helm v3
## link to the docs https://helm.sh/docs/intro/install/#from-script
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# install ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx
- checkout a branch
- make changes
- commit changes
- push to github branch
- create a PR
- wait for tests to show up 'green'
- merge the PR
- see changes appear on prod
# create the namespace for cert-manager
kubectl create namespace cert-manager
# add the jetstack helm repository
helm repo add jetstack https://charts.jetstack.io
# update your local helm chart repository cache
helm repo update
# install the cert-manager helm chart
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.2.0 \
--create-namespace
# install the CRDs
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.crds.yaml
参考: https://cert-manager.io/docs/installation/kubernetes/#installing-with-helm
Docker-compose ではローカルのコードと container を同期できる。 k8s ではできない。 -> 開発がめんどくさくなる
Skaffold
を用いることでその問題を解決できる。
ローカルディレクトリと kubernetes との間を仲介する。
- mode#1: rebuild client image from scratch, update k8s
- mode#2: inject updated files into the client pod, rely on react app to automatically update itself