从书籍《Kubernetes实践入门》的实践部分学习,这是初学者的Kubernetes入门,主题是StatefulSet,第三部分

背景 – (Background)

个人对于建立并部署应用程序运行环境的知识远远超过基础设施知识,我希望能够获得更多关于未来应用程序开发的知识,并更新提升自己的技能水平。

在其中,我遇到了这本书,并决定慢慢地记录下我所经历的事情,也希望它能成为给未来自己的一封信,让我重新审视。

这里引用和参考了一些与我这次学习相关的书籍。

关于实际学习的事实

我希望在阅读书籍的同时,能够逐章前进一点点。
我也想边学习边使用GitHub的源代码。
这一章的学习可能主要是通过照抄书籍来进行的…

勉強開始 – 开始勉强 shǐ)

    1. 使用StatefulSet定义MySQL

 

    1. 为存储MySQL数据分配内部存储

 

    1. 将配置文件设置为主节点和从节点并进行部署 *当前在此处*

 

    1. 为备份分配外部存储

 

    在主从节点之间同步数据

@superbrothers さんからのコメントによると、この書籍の勉強の際には minikube を使用すると良いそうです。今回の内容から裏で minikube 環境を構築し、書籍前半の minikube のインストールについて順調に進んだ箇所や問題が発生した箇所については、今後別の内容として掲載していきます。

使用的存储库

请将以下内容用中文进行表述:https://github.com/kubernetes-practical-guide/examples/tree/master/ch3.7.5/manifests/mattermost

这是一个链接,指向一个名为”mattermost”的文件夹,位于GitHub上的”kubernetes-practical-guide/examples”项目的”ch3.7.5/manifests”目录下。

从上次开始的延续

请确认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

主从之间同步数据

+        - 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的操作是否與此前的內容一致。

最后

我认为这次命令本身是成功的,并且可以看到结果。

过去发布的帖子

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Pod章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)NameSpace章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Label章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)ReplicaSet章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Deployment章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Service章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)ConfigMap章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Secret章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)操作章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)體感章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)體感第二部分

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)體感第三部分(標籤操作)

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)體感第三部分(OwnerReference操作)

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Manifest編輯

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)Manifest(ConfigMap)編輯

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)通訊章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)通訊第二部分

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)通訊第三部分

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)通訊第四部分

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)公開第一部分(NodePort)

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)公開第二部分(LoadBalancer)

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)公開第三部分(Ingress)

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)外部儲存章節

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)外部儲存第二部分

 

    1. 個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)StatefulSet章節

 

    個人初學者指南Kubernetes(從書籍《Kubernetes實踐入門》的實作中學習)StatefulSet第二部分
bannerAds