>  기사  >  Java  >  Kubernetes 서비스 - 단일 인스턴스 상태 저장 서비스를 실행하는 간단한 예

Kubernetes 서비스 - 단일 인스턴스 상태 저장 서비스를 실행하는 간단한 예

巴扎黑
巴扎黑원래의
2017-07-22 15:21:212039검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.