Kubernetes durum bilgisi olan bir uygulamayı Azure Stack Edge Pro cihazınızda PersistentVolume ile çalıştırmak için kubectl kullanma
ŞUNLAR IÇIN GEÇERLIDIR: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Bu makalede, Bir PersistentVolume (PV) ve bir dağıtım kullanarak Kubernetes'te durum bilgisi olan tek örnekli bir uygulamanın nasıl dağıtılacağı gösterilmektedir. Dağıtım, mevcut bir Kubernetes kümesindeki komutları kullanır kubectl
ve MySQL uygulamasını dağıtır.
Bu yordam, Azure Stack Edge Pro cihazında Kubernetes depolama alanını gözden geçiren ve Kubernetes depolama kavramları hakkında bilgi sahibi olan kişilere yöneliktir.
Azure Stack Edge Pro, Azure SQL Edge kapsayıcılarının çalıştırılmasını da destekler ve bunlar burada MySQL için ayrıntılı olarak açıklandığı gibi benzer bir şekilde dağıtılabilir. Daha fazla bilgi için bkz . Azure SQL Edge.
Önkoşullar
Durum bilgisi olan uygulamayı dağıtabilmeniz için önce cihazınızda ve cihaza erişmek için kullanacağınız istemcide aşağıdaki önkoşulları tamamlayın:
Cihaz için
- 1 düğümlü bir Azure Stack Edge Pro cihazında oturum açma kimlik bilgileriniz var.
Cihaza erişen istemci için
- Azure Stack Edge Pro cihazına erişmek için kullanılacak bir Windows istemci sisteminiz var.
İstemci Windows PowerShell 5.0 veya üzerini çalıştırıyor. Windows PowerShell'in en son sürümünü indirmek için Windows PowerShell'i Yükleme'ye gidin.
Desteklenen işletim sistemine sahip başka bir istemciniz de olabilir. Bu makalede, Bir Windows istemcisi kullanılırken yordam açıklanmaktadır.
Azure Stack Edge Pro cihazında Kubernetes kümesine erişme bölümünde açıklanan yordamı tamamladınız. Sahip olduğunuz:
- komutuyla
New-HcsKubernetesNamespace
biruserns1
ad alanı oluşturuldu. - komutuyla bir kullanıcı
user1
oluşturdunuzNew-HcsKubernetesUser
. user1
komutu aracılığıyla erişimuserns1
izniGrant-HcsKubernetesNamespaceAccess
verildi.- İstemciye yüklendi
kubectl
ve kullanıcı yapılandırmasıyla dosyayı C:\Users\<username>\.kube dosyasına kaydettikubeconfig
.
- komutuyla
İstemci sürümünün
kubectl
Azure Stack Edge Pro cihazınızda çalışan Kubernetes ana sürümünden en fazla bir sürümün çarpıtıldığından emin olun.- İstemcide çalışan kubectl sürümünü denetlemek için kullanın
kubectl version
. Tam sürümü not edin. - Azure Stack Edge Pro cihazınızın yerel kullanıcı arabiriminde Genel Bakış'a gidin ve Kubernetes yazılım numarasını not edin.
- Desteklenen Kubernetes sürümünde sağlanan eşlemeden uyumluluk için bu iki sürümü doğrulayın.
- İstemcide çalışan kubectl sürümünü denetlemek için kullanın
Azure Stack Edge Pro cihazınızda durum bilgisi olan bir uygulama dağıtmaya hazırsınız.
Statik PV sağlama
Pv'yi statik olarak sağlamak için cihazınızda bir paylaşım oluşturmanız gerekir. SMB paylaşımınızda pv sağlamak için bu adımları izleyin.
Not
- Bu nasıl yapılır makalesinde kullanılan belirli örnek NFS paylaşımlarıyla çalışmaz. Genel olarak, veritabanı olmayan uygulamalarla Azure Stack Edge cihazınızda NFS paylaşımları sağlanabilir.
- Kalıcı depolama sağlamak üzere depolama birimlerini kullanan durum bilgisi olan uygulamaları dağıtmak için kullanmanızı
StatefulSet
öneririz. Bu örnek yalnızca bir çoğaltma ile kullanırDeployment
ve geliştirme ve test için uygundur.
Edge paylaşımı mı yoksa Edge yerel paylaşımı mı oluşturmak istediğinizi seçin. Paylaşım oluşturmak için Paylaşım ekleme başlığındaki yönergeleri izleyin. Paylaşımı Edge işlemiyle kullan onay kutusunu seçtiğinizden emin olun.
Yeni bir paylaşım oluşturmak yerine, mevcut bir paylaşımı kullanmaya karar verirseniz, paylaşımı bağlamanız gerekir.
Azure Stack Edge kaynağınızın Azure portalında Paylaşımlar'a gidin. Mevcut paylaşım listesinden, kullanmak istediğiniz paylaşımı seçin ve tıklayın.
Bağla'yı seçin ve istendiğinde bağlamayı onaylayın.
Paylaşım adını not edin. Bu paylaşım oluşturulduğunda, oluşturduğunuz SMB paylaşımına karşılık gelen Kubernetes kümesinde otomatik olarak kalıcı bir birim nesnesi oluşturulur.
MySQL'i dağıtma
Şimdi bir Kubernetes Dağıtımı oluşturup bir PersistentVolumeClaim (PVC) kullanarak önceki adımda oluşturduğunuz PV'ye bağlayarak durum bilgisi olan bir uygulama çalıştıracaksınız.
Durum bilgisi olan uygulama dağıtımlarını oluşturmak ve yönetmek için kullandığınız tüm kubectl
komutların yapılandırmayla ilişkili ad alanını belirtmesi gerekir. Bir kubectl komutunda ad alanını belirtmek için kullanın kubectl <command> -n <your-namespace>
.
Ad alanınızdaki Kubernetes kümenizde çalışan podların listesini alın. Pod, Kubernetes kümenizde çalışan bir uygulama kapsayıcısı veya işlemdir.
kubectl get pods -n <your-namespace>
Aşağıda bir komut kullanımı örneği verilmiştir:
C:\Users\user>kubectl get pods -n "userns1" No resources found in userns1 namespace. C:\Users\user>
Çıktı, kümenizde çalışan hiçbir uygulama olmadığından kaynak (pod) bulunamadığını belirtmelidir.
Aşağıdaki YAML dosyalarını kullanacaksınız. Dosya,
mysql-deployment.yml
MySQL çalıştıran ve PVC'ye başvuran bir dağıtımı açıklar. Dosya, için/var/lib/mysql
bir birim bağlaması tanımlar ve ardından 20 GB'lık birimin arandığı bir PVC oluşturur.Bu talep, önceki adımda paylaşımı oluşturduğunuzda statik olarak sağlanan mevcut PV'lerden memnundur. Cihazınızda, her paylaşım için 32 TB'lık büyük bir PV oluşturulur. PV, PVC tarafından belirlenen gereksinimleri karşılar ve PVC bu PV'ye bağlı olmalıdır.
Aşağıdaki
mysql-deployment.yml
dosyayı kopyalayın ve Azure Stack Edge Pro cihazına erişmek için kullandığınız Windows istemcisinde bir klasöre kaydedin.apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - port: 3306 selector: app: mysql clusterIP: None --- apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - image: mysql:5.6 name: 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
dosyasını kopyalayıp kaydettiğiniz
mysql-pv.yml
klasöremysql-deployment.yml
kaydedin. ilekubectl
daha önce oluşturduğunuz SMB paylaşımını kullanmak için, PVC nesnesindeki alanı paylaşımın adına ayarlayınvolumeName
.Not
YAML dosyalarının doğru girintiye sahip olduğundan emin olun. Doğrulamak ve sonra kaydetmek için YAML lint ile kontrol edebilirsiniz.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: volumeName: <smb-share-name-here> storageClassName: "" accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
Dosyayı dağıtın
mysql-pv.yaml
.kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>
Dağıtımın örnek çıktısı aşağıda verilmişti.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pv.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim created C:\Users\user>
Oluşturulan PVC'nin adını not edin. Bunu sonraki bir adımda kullanacaksınız.
Dosyanın içeriğini dağıtın
mysql-deployment.yml
.kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>
Dağıtımın örnek çıktısı aşağıda verilmişti.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1 service/mysql created deployment.apps/mysql created
Dağıtım hakkındaki bilgileri görüntüleyin.
kubectl describe deployment <app-label> -n <your-user-namespace>
C:\Users\user>kubectl describe deployment mysql -n userns1 Name: mysql Namespace: userns1 CreationTimestamp: Tue, 18 Aug 2020 09:44:58 -0700 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"mysql","namespace":"userns1"},"spec":{"selector":{"matchL... Selector: app=mysql Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: Recreate MinReadySeconds: 0 Pod Template: Labels: app=mysql Containers: mysql: Image: mysql:5.6 Port: 3306/TCP Host Port: 0/TCP Environment: MYSQL_ROOT_PASSWORD: password Mounts: /var/lib/mysql from mysql-persistent-storage (rw) Volumes: mysql-persistent-storage: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: mysql-pv-claim ReadOnly: false Conditions: Type Status Reason ---- ------ ------ Progressing True NewReplicaSetAvailable Available True MinimumReplicasAvailable OldReplicaSets: <none> NewReplicaSet: mysql-c85f7f79c (1/1 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 10m deployment-controller Scaled up replica set mysql-c85f7f79c to 1 C:\Users\user>
Dağıtım tarafından oluşturulan podları listeleyin.
kubectl get pods -l <app=label> -n <your-user-namespace>
Aşağıda örnek bir çıkış verilmişti.
C:\Users\user>kubectl get pods -l app=mysql -n userns1 NAME READY STATUS RESTARTS AGE mysql-c85f7f79c-vzz7j 1/1 Running 1 14m C:\Users\user>
PersistentVolumeClaim öğesini inceleyin.
kubectl describe pvc <your-pvc-name>
Aşağıda örnek bir çıkış verilmişti.
C:\Users\user>kubectl describe pvc mysql-pv-claim -n userns1 Name: mysql-pv-claim Namespace: userns1 StorageClass: Status: Bound Volume: mylocalsmbshare1 Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"userns1"},"spec":{"acc... pv.kubernetes.io/bind-completed: yes Finalizers: [kubernetes.io/pvc-protection] Capacity: 32Ti Access Modes: RWO,RWX VolumeMode: Filesystem Mounted By: mysql-c85f7f79c-vzz7j Events: <none> C:\Users\user>
MySQL'in çalıştığını doğrulama
MySQL çalıştıran bir poddaki bir kapsayıcıya karşı komut çalıştırmak için şunu yazın:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql
Aşağıda örnek bir çıkış verilmişti.
C:\Users\user>kubectl exec mysql-c85f7f79c-vzz7j -i -t -n userns1 -- mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.49 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Dağıtımı silme
Dağıtımı silmek için dağıtılan nesneleri ada göre silin. Bu nesneler dağıtım, hizmet ve PVC'yi içerir.
kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>
Dağıtımı ve hizmeti sildiğinizde örnek çıktısını aşağıda bulabilirsiniz.
C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>
PVC'yi sildiğinizde örnek çıktısını aşağıda bulabilirsiniz.
C:\Users\user>kubectl delete pvc mysql-pv-claim -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>
PVC silindikçe PV artık PVC'ye bağlı değildir. Paylaşım oluşturulduğunda BD sağlandığından, paylaşımı silmeniz gerekir. Şu adımları izleyin:
Paylaşımı çıkarın. Azure portalında Azure Stack Edge kaynak > Paylaşımlarınıza gidin ve çıkarılmasını istediğiniz paylaşımı seçin ve tıklayın. Çıkar'ı seçin ve işlemi onaylayın. Paylaşım kaldırılana kadar bekleyin. Çıkarma, kubernetes kümesinden paylaşımı (ve dolayısıyla ilişkili PersistentVolume' yi) serbest bırakır.
Artık Sil'i seçip silme işlemini onaylayarak paylaşımınızı silebilirsiniz. Bu, paylaşımı ve ilgili BD'yi de silmelidir.
Sonraki adımlar
Depolamayı dinamik olarak sağlamayı anlamak için bkz . Azure Stack Edge Pro cihazında dinamik sağlama yoluyla durum bilgisi olan bir uygulama dağıtma