初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)StatefulSet編
背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。
その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。
引用や参考と今回の自分の勉強用の書籍の紹介
技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方
実際の学びについて
書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
この章の勉強は本当に書籍の写経が主になるかもしれません・・・
勉強開始
- StatufulSet を使った MySQL を定義 ※いまここ
- MySQL のデータ格納用に内部ストレージを割り当て
- 設定ファイルを Master、Slave 用に設定し配置
- バックアップ用に外部ストレージを割り当て
- Master-Slave 間でデータを同期
StatefulSet を使った MySQL を定義
以前写経で学んだ、 ConfigMap / Secret マニュフェストを使って、MySQL のコンフィグ情報を各 yaml ファイルに定義します。
apiVersion: v1
data:
MYSQL_DATABASE: mattermost
MYSQL_USER: myuser
kind: ConfigMap
metadata:
creationTimestamp: null
name: common-env
apiVersion: v1
data:
MYSQL_PASSWORD: bXlwYXNzd29yZA==
MYSQL_ROOT_PASSWORD: cm9vdHBhc3N3b3Jk
kind: Secret
metadata:
creationTimestamp: null
name: common-env
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
selector:
matchLabels:
app: mysql
updateStrategy:
type: RollingUpdate
replicas: 2
template:
metadata:
labels:
app: mysql
spec:
initContainers:
- name: init-mysql
image: k8spracticalguide/mysql:5.7.22
command: ["bash", "/mnt/scripts/setup.sh"]
volumeMounts:
- name: confd
mountPath: /mnt/conf.d
- name: scripts
mountPath: /mnt/scripts
- 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
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
$ kubectl apply -f cm.yaml -f secret.yaml -f mysql-sts.yaml
configmap/common-env created
secret/common-env created
statefulset.apps/mysql created
$ kubectl get statefulsets
NAME READY AGE
mysql 2/2 74s
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mysql-0 1/1 Running 0 77s
mysql-1 1/1 Running 0 73s
Headless Service を定義する
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
name: mysql
clusterIP: None # None にすることで Headless Serviceになる
selector:
app: mysql
$ kubectl apply -f mysql-svc.yaml
service/mysql created
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
mysql ClusterIP None <none> 3306/TCP 7s
ちゃんと動いているか確認する
$ kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-0 1/1 Running 0 5m3s 10.1.1.9 docker-desktop <none> <none>
mysql-1 1/1 Running 0 4m59s 10.1.1.10 docker-desktop <none> <none>
kubectl run -ti --image=k8spracticalguide/busybox:1.28 dns-test --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # nslookup mysql-0.mysql
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: mysql-0.mysql
Address 1: 10.1.1.9 mysql-0.mysql.default.svc.cluster.local
/ # nslookup mysql-1.mysql
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: mysql-1.mysql
Address 1: 10.1.1.10 mysql-1.mysql.default.svc.cluster.local
次は 3.7.5 章をやっていきます。
- StatufulSet を使った MySQL を定義
- MySQL のデータ格納用に内部ストレージを割り当て ※次回
- 設定ファイルを Master、Slave 用に設定し配置
- バックアップ用に外部ストレージを割り当て
- Master-Slave 間でデータを同期
最後に
前回うまくできなかったので、ご迷惑おかけしてしまいました。
次回以降はもっと大胆にうまくできることを祈りながら、写経 がんばります
今までの投稿
- 初心者の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
Author And Source
この問題について(初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)StatefulSet編), 我々は、より多くの情報をここで見つけました https://qiita.com/nodokaodayaka/items/9cd9cff01b15d7ab3e01著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .