目標
環境に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 サイトの他の関連記事を参照してください。