背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。
その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。
引用や参考と今回の自分の勉強用の書籍の紹介
技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方
実際の学びについて
書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
この章の勉強は本当に書籍の写経が主になるかもしれません・・・
勉強開始
- StatufulSet を使った MySQL を定義
- MySQL のデータ格納用に内部ストレージを割り当て
- 設定ファイルを Master、Slave 用に設定し配置 ※いまここ
- バックアップ用に外部ストレージを割り当て
- Master-Slave 間でデータを同期
@superbrothers さんからこの書籍の勉強では minikube でやることが良いということでコメントを頂いてちょっと今回の内容ぐらいから裏で minikube 環境を書籍前半の minikube のインストールの部分やうまく行ったりつまずいた場所は今後別の内容を掲載していきます
使用するリポジトリ
https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.7.5/manifests/mattermost
前回からの続きです
Pod の内容を確認
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-scripts
data:
setup.sh: |
#!/bin/bash
set -e
[[ $(hostname) =~ -([0-9]+)$ ]]
serverid=${BASH_REMATCH[1]}
CONF='/mnt/conf.d/server-id.cnf'
# Create server-id.cnf
echo [mysqld] > ${CONF}
if [ "${serverid}" -eq 0 ]; then
echo "log-bin=mysql-bin" >> ${CONF}
echo "server-id=$((100+serverid))" >> ${CONF}
else
echo "read_only" >> ${CONF}
echo "server-id=$((100+serverid))" >> ${CONF}
fi
# Copy init-slave.sh from scripts to initdb directory
cp /mnt/scripts/init-slave.sh /mnt/initdb/
chmod +x /mnt/initdb/init-slave.sh
exit 0
$ kubectl exec -it mysql-0 cat /etc/mysql/conf.d/server-id.cnf
[mysqld]
log-bin=mysql-bin
server-id=100
$ kubectl exec -it mysql-1 cat /etc/mysql/conf.d/server-id.cnf
[mysqld]
read_only
server-id=101
バックアップ用に外部ストレージを割り当て
〜抜粋〜
volumeMounts:
- name: data
mountPath: /var/lib/mysql
- name: initdb
mountPath: /docker-entrypoint-initdb.d
- name: confd
mountPath: /etc/mysql/conf.d
+ - name: backup
+ mountPath: /mnt/backup
volumes:
- name: initdb
emptyDir: {}
- name: confd
emptyDir: {}
- name: scripts
configMap:
name: mysql-scripts
+ - name: backup
+ persistentVolumeClaim:
+ claimName: backup-mysql
$ kubectl apply -f mysql-sts.yaml
statefulset.apps/mysql created
マウント状態を確認
$ kubectl exec -it mysql-0 bash
root@mysql-0:/# df -h
Filesystem Size Used Avail
192.168.3.4:/System/Volumes/Data/Users/user_name/study/share 113G 47G 54G 47% root@mysql-0:/# exit
$ kubectl exec -it mysql-1 bash
root@mysql-1:/# df -h
Filesystem Size Used Avail
192.168.3.4:/System/Volumes/Data/Users/user_name/study/share 113G 47G 54G 47% root@mysql-1:/# exit
Master-Slave 間でデータを同期
+ - name: initdb
+ mountPath: /mnt/initdb
containers:
- name: mysql
image: k8spracticalguide/mysql:5.7.22
envFrom:
- configMapRef:
name: common-env
- secretRef:
name: common-env
volumeMounts:
- name: data
mountPath: /var/lib/mysql
+ - name: initdb
+ mountPath: /docker-entrypoint-initdb.d
- name: confd
mountPath: /etc/mysql/conf.d
- name: backup
mountPath: /mnt/backup
volumes:
+ - name: initdb
+ emptyDir: {}
- name: confd
emptyDir: {}
- name: scripts
configMap:
name: mysql-scripts
- name: backup
persistentVolumeClaim:
claimName: backup-mysql
次は 3.7.6 章をやっていきます。
スケールする MySQL の動作検証をやっていきます
今回までの内容の MySQL の動作を確認するになります。
最後に
今回はコマンド自体もうまく通って結果を見ることができたと思います。
今までの投稿
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Pod編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)NameSpace 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Label 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)ReplicaSet 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Deployment 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Service 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)ConfigMap 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Secret 編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)操作編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート2
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート3(Label操作)
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート3(OwnerReference 操作)
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)マニュフェスト編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)マニュフェスト(ConfigMap)編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)通信編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)通信編 パート2
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)通信編 パート3
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)通信編 パート4
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)公開編パート1(NodePort)
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)公開編パート2(LoadBalancer)
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)公開編パート3(Ingress)
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)外部ストレージ編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)外部ストレージ編パート2
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)StatfulSet編
- 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)StatfulSet編 パート2