从《Kubernetes实践入门》书籍中学习的初学者Kubernetes入门指南(StatefulSet部分)

背景 – natively translated in Chinese, only need one option.

个人希望在不仅仅掌握基础架构知识的基础上,还能够创建并部署应用程序,并在今后掌握更多的知识。同时,我也希望能够进一步更新自己的知识。

在其中我遇到了这本书,从现在开始留下了一些我所做的事情,它也可以作为给未来自己的一封信,希望能重新审视它。

引用和参考以及本次我自己的学习用书籍的介绍。

关于实际学习

我想一边阅读书籍,一边逐章深入学习。
同时希望能够利用GitHub的源代码来进行学习。
这一章的学习可能主要是通过模仿书籍内容来进行的…

勉強开始 .

    1. 使用 StatefulSet 定义 MySQL (即在此处)

 

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

 

    1. 为主库和从库配置和布置设置文件

 

    1. 为备份分配外部存储

 

    在主从库之间同步数据

使用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

定义无头服务

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节的学习。

    1. 使用 StatefulSet 定义 MySQL

 

    1. 为 MySQL 数据存储分配内部存储(下次计划)

 

    1. 为 Master 和 Slave 分别配置并部署设置文件

 

    1. 为备份目的分配外部存储

 

    在 Master-Slave 之间同步数据

最终

由于上次没能顺利完成,给您带来了麻烦。希望下次能更加大胆地完成,我将努力写经。

之前的帖子

    1. 【Chinese Translation】:

初学者的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

广告
将在 10 秒后关闭
bannerAds