Goal
Create a PV
Create a MySQlDeployment
DNS 이름을 사용하여 클러스터의 다른 포드에 MySQL 노출
시작하기 전에
Kubernetes 클러스터와 클러스터에 연결할 수 있는 kubectl 명령줄 도구가 필요합니다. 클러스터가 없으면 Minikube를 사용하여 클러스터를 만들 수 있습니다.
데이터 저장용 PV(PertantVolume)를 생성하겠습니다. 지원되는 PV 유형을 보려면 여기를 클릭하세요. 이 가이드에서는 GCEPerciousDisk를 사용하여 설명하지만 모든 PV 유형이 정상적으로 작동합니다. GCEPertantDisk는 Google Compute Engine(GCE)에서만 작동합니다.
사용자 환경에서 디스크 만들기
Google Compute Engine에서 다음을 실행합니다.
gcloud compute disks create --size=20GB mysql-disk
그런 다음 방금 만든 mysql 디스크를 가리키는 PV를 만듭니다. 다음은 위에서 언급한 GCE 디스크를 가리키는 PV 생성을 위한 구성 파일입니다.
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
Deploy MySQL
Kubernetes 배포를 통해 상태 저장 서비스를 생성한 후 PVC(PertantVolumeClaim)를 사용하여 기존 서비스 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가 하나만 있고 Pod 수를 늘릴 계획이 없는 경우 이를 사용하는 가장 좋은 방법입니다.
Mysql 클라이언트를 실행하여 Mysql 서비스에 연결합니다.
kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h <pod-ip> -ppassword
위 명령은 클러스터에 새 Pod를 생성합니다. 이 포드는 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는 하나의 포드에만 매핑될 수 있습니다. 클러스터링된 상태 저장 애플리케이션의 경우 StatefulSet 설명서를 확인하세요.
사용 전략: 배포의 YAML 구성 문서에서 다시 만들기를 입력하세요. Kubernetes에게 롤링 업데이트를 사용하지 말라고 지시합니다. 롤링 업데이트가 작동하지 않으므로 동시에 여러 포드가 실행되지 않습니다. Recreate 정책은 업데이트된 구성으로 새 포드를 생성할 때 이전 포드를 삭제합니다.
배포 삭제
이름별 배포 객체 삭제:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!