kubernetes의 상태를 이용하여 고장 방지 강력한pod ② 세트 제작

개시하다


그를 쓰러뜨리기 위해 이번에는kubernetes의 상태를 활용해 고장 방지가 강한pod를 만드는 방법을 조사했다!(^^)/

개요


■ 테스트 환경
■하고 싶은 것
■ 선언문 작성
■ 상태 전체 세트를 삭제해도 영구 암호화 볼륨이 유지되는지 확인
요약(^^)/

■ 테스트 환경


이번에는 미니쿠버가 로컬(Windows)에 설치되었습니다.
테스트해 봤어!
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/
https://minikube.sigs.k8s.io/docs/start/
↑ 참고로 이곳에 환경을 만들었습니다(^^)/

■하고 싶은 일


이번에 상태 전체 MySQL 서버를 이용하여 통합된pod와 몇 개의 지속량을 구축하여 데이터가 보호되었는지 확인하였다.

■ 선언문 작성


https://kubernetes.io/ja/docs/tasks/run-application/run-replicated-stateful-application/
참조↑.
전체 상태 사용 시 피쳐
① ClusterIP: None, 헤드 없음 모드 사용
② 서비스Name: 모든 합작의 상태를 기술하는 서비스 이름
③ template: 마운트 지점 지정
④ voluumeClaim Templates: 복제품 수량만 설정하면 영구 볼륨으로 설정

① 헤드 없는 서비스를 시작한다.


① ClusterIP: None, 헤드 없음 모드 사용
무두 서비스를 사용하지 않으면 상태 전체를 사용할 수 없기 때문에 서비스 선언을 작성한다.헤드 없는 서비스를 제공하기 위해 "cluster IP:None"으로 설정합니다.
mysql-services.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql-sts
spec:
  ports:
  - name: mysql
    port: 3306
  clusterIP: None
  selector:
    app: mysql-sts
설정된 서비스를 시작합니다.
$  kubectl apply -f .\mysql-services.yaml
service/mysql created

② 복제본이 있는 상태 전체 세트를 시작합니다.


statefulSet.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql-sts     # serviceのラベルと一致させること
  serviceName: mysql     # serviceNameを指定すること
  replicas: 3    # レプリカ数の設定で連動する永続ボリュームも作成される
  template:     # podテンプレート
    metadata:
      labels:
        app: mysql-sts     # serviceのラベルと一致させること
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: qwerty
        ports:
        - name: mysql
          containerPort: 3306
        volumeMounts:       # マウントポイントを指定すること
        - name: pvc
          mountPath: /var/lib/mysql
          subPath: data
        resources:
          requests:
            cpu: 500m
            memory: 1Gi
        livenessProbe:     #Mysql稼働チェック
          exec:
            command: ["mysqladmin", "ping"]
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
  volumeClaimTemplates:    # 永続ボリューム要求テンプレート
  - metadata:
      name: pvc
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
전체 상태 세트 시작
$ kubectl apply -f .\statefulSet.yml                                             statefulset.apps/mysql created
서비스, 상태 전체 집합,pod, PVC와 PV를 만들었는지 확인합니다.
$ kubectl get svc  # service                                                                                                                                                     NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    3d16h
mysql        ClusterIP   None         <none>        3306/TCP   3d15h
$ kubectl get sts     # ステートフルセット                                                                                                                                              NAME    READY   AGE
mysql   3/3     2m3s
$ kubectl get po    # pod                                                                                                                                                NAME      READY   STATUS    RESTARTS   AGE
mysql-0   1/1     Running   0          2m17s
mysql-1   1/1     Running   0          85s
mysql-2   1/1     Running   0          78s
$ kubectl get pvc   # 永続ボリューム要求                                                                                                                                              NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-mysql-0   Bound    pvc-31e68565-a134-4143-8f26-fd7e0ce6e0d8   10Gi       RWO            standard       2m38s
pvc-mysql-1   Bound    pvc-e0455e8e-26a1-4db2-8e5f-c63340474e74   10Gi       RWO            standard       106s
pvc-mysql-2   Bound    pvc-1ef1292c-5d21-46db-8665-64b8783ac656   10Gi       RWO            standard       99s
$ kubectl get pv    # 永続ボリューム                                                                                                                                           NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
pvc-1ef1292c-5d21-46db-8665-64b8783ac656   10Gi       RWO            Delete           Bound    default/pvc-mysql-2   standard                104s
pvc-31e68565-a134-4143-8f26-fd7e0ce6e0d8   10Gi       RWO            Delete           Bound    default/pvc-mysql-0   standard                2m43s
pvc-e0455e8e-26a1-4db2-8e5f-c63340474e74   10Gi       RWO            Delete           Bound    default/pvc-mysql-1   standard                111s

■ 상태 전체 세트를 삭제해도 영구 암호화 볼륨이 유지되는지 확인


① mySQL 서버에 쓰기


자세에 들어간다
kubectl exec -it mysql-0 bash                                                ``` ```
```^^:書き込みをする
root@mysql-0:/# mysql -u root -pqwerty
mysql> create database hello;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hello              |     ←入れた
| mysql              |
| performance_schemsa |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
exit(podをでる)

② 상태 전체 세트, 서비스 삭제


$ kubectl.exe delete -f statefulSet.yml                                          statefulset.apps "mysql" deleted
$ kubectl.exe delete -f mysql-services.yaml                                     service "mysql" deleted

③ 남은 것 확인


서비스, 상태 전체 집합,pod를 삭제했는지 확인하십시오.
$ kubectl get svc,sts,po                                                                                                                                            NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   3d17h
# 削除されている
지속 볼륨 요청 및 지속 볼륨이 남아 있는지 확인합니다.
$ kubectl get pvc                                                                                                                                                   NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-mysql-0   Bound    pvc-31e68565-a134-4143-8f26-fd7e0ce6e0d8   10Gi       RWO            standard       52m
pvc-mysql-1   Bound    pvc-e0455e8e-26a1-4db2-8e5f-c63340474e74   10Gi       RWO            standard       51m
pvc-mysql-2   Bound    pvc-1ef1292c-5d21-46db-8665-64b8783ac656   10Gi       RWO            standard       51m
$ kubectl get pv                                                                                                                                                    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS   REASON   AGE
pvc-1ef1292c-5d21-46db-8665-64b8783ac656   10Gi       RWO            Delete           Bound    default/pvc-mysql-2   standard                51m
pvc-31e68565-a134-4143-8f26-fd7e0ce6e0d8   10Gi       RWO            Delete           Bound    default/pvc-mysql-0   standard                52m
pvc-e0455e8e-26a1-4db2-8e5f-c63340474e74   10Gi       RWO            Delete           Bound    default/pvc-mysql-1   standard                52m

④ MySql-0 Pord가 영구 볼륨을 상속받았는지 확인합니다.


서비스 재배치 상태 전체 집합
$ kubectl apply -f .\mysql-services.yaml                                     service/mysql created
$ kubectl apply -f .\statefulSet.yml                                             statefulset.apps/mysql created
확인.
$ kubectl get svc,sts,po                                                                                                                                                NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    3d17h
service/mysql        ClusterIP   None         <none>        3306/TCP   64s

NAME                     READY   AGE
statefulset.apps/mysql   3/3     51s

NAME          READY   STATUS    RESTARTS   AGE
pod/mysql-0   1/1     Running   0          51s
pod/mysql-1   1/1     Running   0          46s
pod/mysql-2   1/1     Running   0          44s
아까 mysql-0의pod에 들어가기
$ kubectl exec -it mysql-0 bash                                                
방금 한 내용이 살아 있는지 확인하세요.
root@mysql-0:/# mysql -u root -pqwerty
略
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hello              |  ←いた
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
그나저나 다른pod는?
$ kubectl exec -it mysql-1 bash                                                 
---
root@mysql-1:/# mysql -u root -pqwerty
略
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
독립된 지속량이 있는 것 같다(^^)/

총결산


와--!

좋은 웹페이지 즐겨찾기