ホームページ  >  記事  >  Java  >  Kubernetes サービス -- 単一インスタンスのステートフル サービスを実行する簡単な例

Kubernetes サービス -- 単一インスタンスのステートフル サービスを実行する簡単な例

巴扎黑
巴扎黑オリジナル
2017-07-22 15:21:212082ブラウズ

目標

環境にPVを作成する
MySQlデプロイメントを作成する
DNS名を使用してクラスター内の他のポッドにMySQLを公開する

始める前に

Kubernetesクラスターとクラスターに接続できるkubectlコマンドラインツールが必要です。クラスターがない場合は、Minikube を使用してクラスターを作成できます。
データ保存用のPV(Persistent Volume)を作成します。ここをクリックして、サポートされている PV タイプを表示します。このガイドでは GCEPersistentDisk を使用して説明しますが、どの PV タイプでも正常に動作します。 GCEPersistentDisk は Google Compute Engine (GCE) 上でのみ動作します。

環境内にディスクを作成します

Google Compute Engine で、次のコマンドを実行します:

gcloud compute disks create --size=20GB mysql-disk

次に、作成したばかりの mysql ディスクを指す PV を作成します。以下は、PV を作成するための構成ファイルで、上記の GCE ディスクを指します。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:- ReadWriteOnce
  gcePersistentDisk:
    pdName: mysql-disk
    fsType: ext4

行 pdName: mysql-disk は、上記の GCE 環境によって作成されたディスクの名前と一致することに注意してください。他の環境で PV を作成する場合は、永続ボリュームで詳細を確認してください。
PV の作成:

kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml

MySQL のデプロイ

Kubernetes デプロイメントを通じてステートフル サービスを作成し、PVC (Persistent VolumeClaim) を使用して既存のサービスに接続できますPV。たとえば、次の YAML ファイルは、MySQL を実行し、PVC を使用するデプロイメントを記述します。このファイルは、/var/lib/mysql にマウントされるボリュームを定義し、20G のボリューム サイズを必要とする PVC を作成します。
注: パスワードは YAML 構成ファイルで定義されていますが、安全ではありません。より安全なソリューションについては、Kubernetes Secrets を確認してください。

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:- port: 3306
  selector:
    app: mysql
  clusterIP: None---apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  accessModes:- ReadWriteOnce
  resources:
    requests:
      storage: 20Gi---apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:      - image: mysql:5.6name: mysql
        env:
          # Use secret in real usage- name: MYSQL_ROOT_PASSWORD
          value: password
        ports:- containerPort: 3306  name: mysql
        volumeMounts:- name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

1. YAML ファイルのコンテンツをデプロイします。

kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml

2. 導入情報を表示します。

kubectl describe deployment mysql

 Name:                 mysql
 Namespace:            default
 CreationTimestamp:    Tue, 01 Nov 2016 11:18:45 -0700
 Labels:               app=mysql
 Selector:             app=mysql
 Replicas:             1 updated | 1 total | 0 available | 1 unavailable
 StrategyType:         Recreate
 MinReadySeconds:      0
 OldReplicaSets:       <none>
 NewReplicaSet:        mysql-63082529 (1/1 replicas created)
 Events:
   FirstSeen    LastSeen    Count    From                SubobjectPath    Type        Reason            Message   ---------    --------    -----    ----                -------------    --------    ------            -------
   33s          33s         1        {deployment-controller }             Normal      ScalingReplicaSet Scaled up replica set mysql-63082529 to 1

3. デプロイメントによって作成されたポッドを表示します。

kubectl get pods -l app=mysql

 NAME                   READY     STATUS    RESTARTS   AGE
 mysql-63082529-2z3ki   1/1       Running   0          3m

4. PVをチェック。

 kubectl describe pv mysql-pv

 Name:            mysql-pv
 Labels:          <none>
 Status:          Bound
 Claim:           default/mysql-pv-claim
 Reclaim Policy:  Retain
 Access Modes:    RWO
 Capacity:        20Gi
 Message:    
 Source:
     Type:        GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
     PDName:      mysql-disk
     FSType:      ext4
     Partition:   0 ReadOnly:    false
 No events.

5. PVCを確認します。

 kubectl describe pvc mysql-pv-claim

 Name:         mysql-pv-claim
 Namespace:    default
 Status:       Bound
 Volume:       mysql-pv
 Labels:       <none>
 Capacity:     20Gi
 Access Modes: RWO
 No events.

MySQL インスタンスへのアクセス

前の YAML ファイルは、クラスター内の他の Pod がデータベースにアクセスできるようにするサービスを作成します。サービス オプションclusterIP:Noneを使用すると、サービスのDNS名がポッドのIPアドレスに直接解決されます。これは、サービスに Pod が 1 つしかなく、Pod の数を増やす予定がない場合に使用するのに最適な方法です。
Mysql クライアントを実行して Mysql サービスに接続します:

kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h <pod-ip> -ppassword

上記のコマンドはクラスター内に新しいポッドを作成します。これは Mysql クライアントを実行し、上記のサービスの Mysql サーバーに接続されます。正常に接続された場合は、ステートフル MySQL データベースが正常に起動して実行されていることを意味します。

Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: falseIf you don't see a command prompt, try pressing enter.mysql>

Update

デプロイメントのイメージやその他の部分の更新は、通常どおり kubectl apply コマンドを使用して行うこともできます。ステートフル アプリケーションを使用するときに注意すべき点がいくつかあります:

アプリケーションをスケーリングしないでください。このアプリケーションはシングルトン アプリケーション専用です。次の PV は 1 つの Pod にのみマッピングできます。クラスター化されたステートフル アプリケーションについては、StatefulSet のドキュメントを確認してください。
デプロイメントの YAML 構成ドキュメントで戦略を使用: type: Recreate します。これにより、Kubernetes にローリング アップデートを使用しないよう指示されます。ローリング アップデートは機能しないため、複数の Pod が同時に実行されることはありません。 Recreate 戦略では、更新された構成で新しい Pod を作成するときに、以前の Pod が削除されます。

デプロイメントの削除

デプロイメントオブジェクトを名前で削除します:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv

另外,如果你使用的是GCE disk,还需要删除对应的disk:

gcloud compute disks delete mysql-disk

 

文章转自:

以上がKubernetes サービス -- 単一インスタンスのステートフル サービスを実行する簡単な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。