# Uruchomienie aplikacji

Na tej stronie przejdziemy przez przykład tego jak za pomocą kubectl i pobranego pliku kubeconfig skonfigurować w klastrze działającą aplikację Hello World.

# Uruchomienie deploymentu

Do uruchomienia aplikacji potrzebujemy obrazów kontenerów w rejestrze dostępnym dla klastra. W tym przykładzie posłużymy się publicznym rejestrem i uruchomimy w klastrze Wordpressa.

Pierwszym krokiem jest definicja poszczególnych deploymentów MySQLa i Wordpressa:

oks-mysql.yaml

# dodatkowa definicja serwisu MySQLa wewnątrz klastra
apiVersion: v1
kind: Service
metadata:
  name: hello-wordpress-mysql
  labels:
    app: hello-wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: hello-wordpress
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-wordpress-mysql
  labels:
    app: hello-wordpress
spec:
  selector:
    matchLabels:
      app: hello-wordpress
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: hello-wordpress
    spec:
      containers:
      - image: mysql:5.6
        name: hello-mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: YOUR_MYSQL_PASSWORD
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: hello-mysql-pv
          mountPath: /var/lib/mysql
      volumes:
      - name: hello-mysql-pv
        persistentVolumeClaim:
          claimName: hello-mysql-pvc

oks-wordpress.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-wordpress
  labels:
    app: hello-wordpress
spec:
  selector:
    matchLabels:
      app: hello-wordpress
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: hello-wordpress
    spec:
      containers:
      - image: wordpress:4.8-apache
        name: hello-wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: hello-wordpress-mysql
        - name: WORDPRESS_DB_PASSWORD
          value: YOUR_MYSQL_PASSWORD
        ports:
        - containerPort: 80
          name: hello-wordpress
        volumeMounts:
        - name: hello-wordpress-pv
          mountPath: /var/www/html
      volumes:
      - name: hello-wordpress-pv
        persistentVolumeClaim:
          claimName: hello-wordpress-pvc

Tak przygotowane pliki aplikujemy do klastra komendami:

$ kubectl apply -f oks-mysql.yaml
$ kubectl apply -f oks-wordpress.yaml

Klaster pobierze obrazy i utworzy deploymenty oraz pody aplikacji.

W tym wypadku aplikacja jeszcze nie uruchomi się prawidłowo bo definicja obu deploymentów oczekuje PersistentVolumeClaim oraz Service.

Przejdź do Load Balancer i Storage aby uzupełnić brakującą konfigurację.

# Weryfikacja działania aplikacji

Po zdefiniowaniu deploymentów (i podów), load balancera, storage'u i wewnętrznych serwisów klastra aplikacja zostanie uruchomiona.

Pierwszą weryfikacją jej działania jest sprawdzenie czy pody są aktywne:

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
hello-wordpress-7f566c5d66-8mmhr       1/1     Running   0          91s
hello-wordpress-mysql-b69bfd6d-6dpzh   1/1     Running   0          95s

Po kilku minutach od uruchomienia kontenerów powinny one zostać zainicjalizowane. Można wtedy przejść w przeglądarce pod adres IP nadany Load Balancerowi (hello-wordpress-lb), aby zobaczyć ekran powitalny Wordpressa:

$ kubectl get svc
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)        AGE
hello-wordpress-lb      LoadBalancer   10.110.222.198   195.149.198.165   80:31237/TCP   118s
hello-wordpress-mysql   ClusterIP      None             <none>            3306/TCP       2m3s
kubernetes              ClusterIP      10.96.0.1        <none>            443/TCP        9d