最近、kubernetesをさわりはじめました。

チュートリアルやってもあれなので、Redmineを立てたときのTips的なものを。

ローカルの操作PCとしてMac
Redmine構築先はGCP上のGKEでRedmineを立てます。

ローカルのMacにはgcloudコマンド、kubectlコマンドが入っているとします。
(kubectlが入ってない場合は、gcloud components install kubectlでインストールしてください)

dockerコマンドをMac上で実行するので、dockerコマンドを
実行できる環境を用意してください。

ローカルでもkubenetesをつかいたいので
私は、minikube(https://github.com/kubernetes/minikube)をインストールしました。

お手軽にGKE上でRedmineをたてたいので、
すでに作ってくれた人のものを利用します。

https://github.com/bitnami/bitnami-docker

手順はここに書いてある通りなのですが、いくつか修正したので、そこを解説
https://github.com/bitnami/bitnami-docker/tree/master/gke/redmine


まず、minikubeをいれるとはまるのが、contextです

とりあえず、向き先を確認します。

$ kubectl config current-context
minikube

となっていたら、ローカルを見ているので、GKE上を見るようにします。

ちなみに、先にGoogleのconsole上でclusterをつくっておいてください。


$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: https:/XXX.YYY.ZZZ.WWW
name: gke_example_asia-east1-a_cluster-1
- cluster:
certificate-authority: /Users/example/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
- cluster:
certificate-authority-data: REDACTED
server: https://192.168.1.10
name: vagrant
contexts:
- context:
cluster: gke_example_asia-east1-a_cluster-1
user: gke_example_asia-east1-a_cluster-1
name: gke_example_asia-east1-a_cluster-1
- context:
cluster: minikube
user: minikube
name: minikube
- context:
cluster: vagrant
user: vagrant
name: vagrant
current-context: minikube


で作成済みのclusterを確認します。

GKEのcontextはgke_*ではじまっているやつです

$ kubectl config set-context gke_example_asia-east1-a_cluster-1

でGKEを向くようにします。

手順にもどると

まず、cloneします。

$ git clone https://github.com/bitnami/bitnami-docker.git

作成するRedmineの環境は
フロントにWebrikでうごくRedmine
バックエンドにMariaDBのMaster、Slaveの構成です

READMEには、Redmine、MariaDBのSlaveのPodsを複数にしてますが(replica=3)、
そんなにいらないので、それぞれ1にして構築します

まず、DBのストレージを作成します。

$ gcloud compute disks create --size 100GB mariadb-disk

ディスクの名前は、kubenetesのYamlに記載してあるので、あわせておきます。(mariadb-disk)

sizeは200GBが推奨(200GB未満だと、パフォーマンスがおちる)ですが、
そんなにデータをつくらないので、今回100GBにします

データベースのMasterをつくります。

cloneしたディレクトリのgke/redmine配下に必要なファイルがあります。

cloneしたものは、ReplicationControllerをつかっていますが、
Deploymentを使う事にします。(今後Deploymentが主流だと思うので)

mariadb-master-deployment.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mariadb-master
spec:
replicas: 1
template:
metadata:
labels:
app: mariadb-master
spec:
containers:
- name: mariadb-master
image: bitnami/mariadb:10.1.13-r0
env:
- name: MARIADB_DATABASE
value: redmine_production
- name: MARIADB_USER
value: redmine
- name: MARIADB_PASSWORD
value: secretpassword
- name: MARIADB_REPLICATION_MODE
value: master
- name: MARIADB_REPLICATION_USER
value: replication
- name: MARIADB_REPLICATION_PASSWORD
value: secretpassword
ports:
- containerPort: 3306
name: mariadb-master
volumeMounts:
- name: mariadb-persistent-storage
mountPath: /bitnami/mariadb
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 30
timeoutSeconds: 1
volumes:
- name: mariadb-persistent-storage
gcePersistentDisk:
pdName: mariadb-disk
fsType: ext4


Deploymentを作ります

$ kubectl create -f mariadb-master-deployment.yml

正常に出来たかどうか確認します。


$ kubectl get pods -l app=mariadb-master
NAME READY STATUS RESTARTS AGE
mariadb-master-1674727184-ho215 1/1 Running 0 5s


つづいてサービスをつくります。
mariadb-master-service.yml

apiVersion: v1
kind: Service
metadata:
name: mariadb-master
labels:
app: mariadb-master
spec:
ports:
- port: 3306
targetPort: 3306
protocol: TCP
selector:
app: mariadb-master


$ kubectl create -f mariadb-master-service.yml

できたかどうか確認します。

$ kubectl get services mariadb-master
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mariadb-master 10.123.240.249 3306/TCP 5s


まずはここまで
つづきはまた書きます。