ここでは、アプリケーションの作成のために Swarm クラスターで使用される YAML ファイルと Kubernetes クラスターで使用される YAML ファイルの関係を解説します。

背景情報

アプリケーション作成に使用される YAML ファイルのフォーマットは Swarm クラスターと Kubernetes クラスターでは異なります。
  • Kompose を使用して Swarm クラスター YAML ファイルを Kubernetes クラスター YAML ファイルに変換できます。 ただし、変換された YAML ファイルの確認が必要です。

    Kompose の取得は、 https://github.com/AliyunContainerService/komposeをご参照ください。
    Alibaba Cloud のカスタマイズラベルには Kompose が対応しないものがあります。 Alibaba Cloud Container Service チームは、Kompose がすべてのカスタマイズラベルに対応できるように解決法を開発しています。
  • Swarm クラスター YAML を手動で変更して Kubernetes クラスターと互換性のあるものにすることもできます。

ここでは、2 つのタイプのクラスターにおける YAML ファイル間の関係を解説します。 アプリケーションデプロイに必要な条件に応じて YAML ファイルを調整する必要があります。 ここでの YAML ファイルはサンプルとしてのみ使用されます。

アプリケーション作成用に Swarm で使用される YAML ファイルと Kubernetes クラスターで使用される YAML ファイルの比較

Container Service Swarm クラスター

Swarm クラスターで使用される wordpress-swarm.yaml ファイルは次のとおりです。 以下の YAML ファイルで数字によりマークされるそれぞれのパラメーターは、Kubernetes クラスターで使用される YAML ファイルで、同じ数字がマークされるパラメーターに対応していることに注意してください。
web:		#---1
  image: registry.aliyuncs.com/acs-sample/wordpress:4.5		#---2
  ports:		#---3
    - '80'
  environment:		#---4
    WORDPRESS_AUTH_KEY: changeme			#---5
    WORDPRESS_SECURE_AUTH_KEY: changeme		#---5
    WORDPRESS_LOGGED_IN_KEY: changeme		#---5
    WORDPRESS_NONCE_KEY: changeme			#---5
    WORDPRESS_AUTH_SALT: changeme			#---5
    WORDPRESS_SECURE_AUTH_SALT: changeme		#---5
    WORDPRESS_LOGGED_IN_SALT: changeme		#---5
    WORDPRESS_NONCE_SALT: changeme			#---5
    WORDPRESS_NONCE_AA: changeme			#---5
  restart: always		#---6
  links:			#---7
    - 'db:mysql'
  labels:			#---8
    aliyun.logs: /var/log/mysql
    aliyun.probe.url: http://container/license.txt		#---10
    aliyun.probe.initial_delay_seconds: '10'			#---10
    aliyun.routing.port_80: http://wordpress			#---11
    aliyun.scale: '3'							#---12
db: 			#---1
  image: registry.aliyuncs.com/acs-sample/mysql:5.7		#---2
  environment:		#---4
    MYSQL_ROOT_PASSWORD: password		#---5
  restart: always		#---6
  labels:		#---8
    aliyun.logs: /var/log/mysql		#---9

Container Service Kubernetes クラスター

Swarm クラスターで wordpress-swarm.yaml ファイルによりデプロイされた WordPress アプリケーションは Kubernetes クラスターでの 2 つのサービス、Web サービスと db サービスに対応しています。

Kubernetes クラスターでは 2 つのデプロイと 2 つのサービスが必要です。 それぞれのデプロイに 1 つのサービスを作成する必要があります。 2 つのアプリケーションに対して接続方法を公開するために 2 つのサービスが使用されます。

Kubernetes クラスターで、Swarm クラスターの Web アプリケーションに対応するデプロイおよびサービスは以下の YAML ファイルを使用することで作成されます。
以下の YAML ファイルは、 wordpress-swarm.yaml ファイルとの関係を解説するための例としてのみ使用されます。 これらのファイルをお使いのアプリケーションのデプロイに使用しないことを推奨します。
  • wordpress-kubernetes-web-deployment.yaml ファイル
    apiVersion: apps/v1     # API version
    kind: Deployment		# type of the resource that you want to create
    metadata:
      name: wordpress      #---1 
      labels:			#---8 This label is only used to mark the resource.
        app: wordpress
    spec:	#resource details
      replicas: 2        #---12 Indicates the number of replicas.
      selector:  
        matchLabels:
          app: wordpress
          tier: frontend
    strategy:
    type: Recreate
      template:   #Defines the pod details.
        metadata:
          labels:  #Keeps settings consistent with the preceding labels parameter.
            app: wordpress
            tier: frontend
        spec:    #Defines the container details in the pod.
          containers:    #
          - image: wordpress:4   #---2  Corresponds to the image name and version.
            name: wordpress
            env:    #---4 Indicates environment variable settings, including config maps and secrets in Kubernetes.
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql  #---7 Indicates the MySQL that you want to access.
            - name: WORDPRESS_DB_PASSWORD    #---5 Indicates a password. Note Kubernetes provides a secret to encrypt the password.
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password-wordpress
            ports:   #---3 Indicates the exposed port of the application within the container.
            - containerPort: 80
              name: wordpress
    livenessProbe:        #Add a health check setting   ---10 health check
              httpGet:
                path: /
                port: 8080
              initialDelaySeconds: 30
              timeoutSeconds: 5
              periodSeconds: 5
            readinessProbe:       #Add a health check setting  ---10 health check
              httpGet:
                path: /
                port: 8080
              initialDelaySeconds: 5
              timeoutSeconds: 1
              periodSeconds: 5
            volumeMounts:  #Mount the volume to the container.
            - name: wordpress-pvc
              mountPath: /var/www/html
          volumes:   #Indicates to obtain the volume. You need to first create a PV and a PVC.
          - name: wordpress-pvc
            persistentVolumeClaim:
              claimName: wordpress-pv-claim
  • wordpress-kubernetes-web-service.yaml ファイル
    apiVersion: v1   #version number
    kind: Service    #Indicates the type of the resource that you want to create. It is Service in this YAML file.
    metadata:
      name: wordpress
      labels:
        app: wordpress
    spec:
      ports:
        - port: 80   #service port
      selector:  #Indicates to associate the service with the application through the label.
        app: wordpress
        tier: frontend
      type: LoadBalancer  #---11 Defines the access method. This YAML file specifies an SLB service and an SLB instance will be created automatically.
Kubernetes クラスターで、Swarm クラスターの Web アプリケーションに対応するデプロイおよびサービスは以下の YAML ファイルを使用することで作成されます。
以下の YAML ファイルは wordpress-swarm.yaml ファイルとの関係を解説するための例としてのみ使用されます。 アプリケーションのデプロイにこれらのファイルを使用しないことを推奨します。
  • wordpress-kubernetes-db-deployment.yaml ファイル
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
          tier: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
            tier: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password-mysql
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: wordpress-mysql-pvc
              mountPath: /var/lib/mysql
          volumes:
          - name: wordpress-mysql-pvc
            persistentVolumeClaim:
              claimName: wordpress-mysql-pv-claim
  • wordpress-kubernetes-db-service.yaml ファイル
    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      ports:
        - port: 3306
      selector:
        app: wordpress
        tier: mysql
          clusterIP: None