iT邦幫忙

0
鐵人賽 神助攻 Nutanix

在 Karbon 平台服務上部署Stateful MySQL 應用程序

https://ithelp.ithome.com.tw/upload/images/20201007/20129565Qzwv20wWV2.jpg

Karbon平台服務(KPS)是基於Kubernetes的多雲PaaS,可在任何雲上快速開發和部署微服務的應用程序,從簡單的容器化應用程序到復雜的AI、IoT和混合應用程序。
本文章將詳細指導您使用KPS上的Nutanix CSI卷驅動程序和多節點服務,來部署示範Kubernetes應用程序。本文使用《Karbon Platform Services管理指南》中的多節點服務域,並且配置服務域和工作站之間的直接網路連接(以查看示範Web應用程序輸出),透過My Nutanix帳戶可以觀看管理指南

Nutanix CSI卷驅動程序概述

KPS使用Kubernetes容器存儲接口,CSI卷驅動程序使Nutanix提供可擴展的持久存儲。
Kubernetes是一個開放資源編碼平台,可以協調跨主機群集的應用程序容器的部署、擴展和操作。KPS服務域被部署為Nutanix託管的VM並組成一個集群。
Kubernetes包含CSI卷插件,該插件允許Nutanix CSI卷驅動程序獲得對容器的使用權限並提供持久存儲。該插件在pod中運行,並使用Nutanix Volumes動態儲存配置的PersistentVolumes(PV)。

瀏覽Karbon平台服務

    • 移到Cloud Services部分,然後點擊啟動以瀏覽Karbon Platform Services雲管理控制台。
      此時,您應該擁有一個儀表板,帶有默認用戶(您)、項目、類別三大區塊。

目標

  • 在多節點服務域的共享Nutanix上自動創建PersistentVolumes和PersistentVolumeClaims
    -配置
    -MySQL資源
    -WordPress資源
    -在Karbon平台服務上部署

創建PersistentVolumes和PersistentVolumeClaims

MySQL和Wordpress都需要一個PersistentVolume(PV)來存儲數據。將在應用程序部署階段創建PersistentVolumeClaims(PVC)並動態設置PersistentVolume。KPS多節點服務的Kubernetes集群,默認為Nutanix存儲容器。這樣可以節省管理員手動配置CSI Volume Driver和其他Kubernetes組件的步驟。
本文章中,未在MySQL Statefulset的volumeClaimTemplates和Wordpress應用程序的PersistentVolumeClaim中指定特定的StorageClass,因此兩者均使用了服務域的默認StorageClass(AOS容器)。
您可以在此處找到有關在Nutanix管理PersistentVolumeClaims的更多訊息。

配置資源

MySQL

下面的YAML描述了MySQL部署的實例。

注意StatefulSet配置和volumeClaimTemplates。

apiVersion:v1
類型:秘密
元數據:
  名稱:bloganalytics-mysql
  標籤:
     app:mysql
    圖表:mysql-6.10.4
    版本:bloganalytics
    遺產:耕種機
類型:不透明
數據:
   mysql-root-password:“ UjAwdE15c3Fs ”
   mysql-password:“ d29yZHByZXNz “

---
#來源:mysql / templates / master-configmap.yaml

apiVersion:V1
種類:ConfigMap
元數據:
  名稱:bloganalytics MySQL的主
  標籤:
    應用程序:MySQL的
    圖表:MySQL的-6.10.4
    釋放:bloganalytics
    遺產:分蘗
    部件:主
數據:
   my.cnf中:| - 
    [mysqld的] 
    default_authentication_plugin = mysql_native_password
    跳過名稱解析
    explicit_defaults_for_timestamp 
    BASEDIR = /選擇/ bitnami / MySQL的
    plugin_dir = / opt / bitnami / mysql / plugin 
    port = 3306 
    socket = / opt / bitnami / mysql / tmp / mysql.sock 
    datadir = / bitnami / mysql / data 
    tmpdir = / opt / bitnami / mysql / tmp 
    max_allowed_pa​​cket = 16M
    綁定地址= 0.0.0.0 
    pid文件= / opt / bitnami / mysql / tmp / mysqld.pid
    日誌錯誤= / opt / bitnami / mysql / logs / mysqld.log
    字符集服務器= UTF8
    整理服務器= utf8_general_ci 
    [客戶端]    端口= 3306    套接字= / opt / bitnami / mysql / tmp / mysql.sock    默認字符集= UTF8     plugin_dir = / opt / bitnami / mysql / plugin     [管理器]    端口= 3306    套接字= / opt / bitnami / mysql /tmp/mysql.sock    





    



    pid文件= / opt / bitnami / mysql / tmp / mysqld.pid
---
 #來源:MySQL的/模板/主svc.yaml 
apiVersion:V1
樣:服務
元數據:
  名稱:bloganalytics-mysql的
  標籤:
    應用程序:MySQL的
    圖表:的mysql-6.10.4
    版本:bloganalytics
    遺產:分蘗
    成分:主
  註解:
     prometheus.io/port:' 9104 '
     prometheus.io/scrape:“真”
    
規格:
  類型:ClusterIP
  端口:
    -名稱:mysql
      端口:3306 
      targetPort:mysql
  選擇器:
     app:mysql
    版本:bloganalytics
    組件:master

---
#來源:MySQL的/模板/主statefulset.yaml 
apiVersion:應用/ V1
種類: StatefulSet
元數據:
  名稱: bloganalytics MySQL的主
  標籤:
    應用程序: MySQL的
    圖表: MySQL的-6.10.4
    釋放: bloganalytics
    遺產:分蘗
    部件:主
規格:
  選擇器:
     matchLabels:
      應用程序: mysql
      發布: bloganalytics
      部件:主
  服務名:bloganalytics MySQL的主
  複本:1 
  updateStrategy:
    類型:RollingUpdate
  模板:
    元數據:
      標籤:
        應用程序:MySQL的
        圖表:MySQL的-6.10.4
        釋放:bloganalytics
        遺產:分蘗
        部件:主
    規格:      
       SecurityContext的:
         fsGroup:1001 
        runAsUser:1001個
      容器:
        -名稱:mysql
          映像:docker.io/bitnami/mysql
           : 8.0.19- debian -10- r58 imagePullPolicy:“ IfNotPresent ”
           env:
            -名稱:BITNAMI_DEBUG
              值:“假” 
            -名稱:MYSQL_ROOT_PASSWORD_FILE
              值:“ /選擇/ bitnami / MySQL的/秘密/ MySQL的root用戶口令” 
            -名稱:MYSQL_USER
              值:“ WordPress的” 
            -名稱:MYSQL_PASSWORD 
              valueFrom:
                 secretKeyRef:
                  名稱:bloganalytics-mysql
                  密鑰:MySQL的密碼
            -名稱:MYSQL_DATABASE
              值:“ wordpress_db ”
          端口:
            -名稱:mysql 
              containerPort:3306 
          livenessProbe:
             exec:
               command:
                - SH 
                - - C 
                - | 
                  如果[-f“ $ {MYSQL_ROOT_PASSWORD_FILE:-}”],則                  password_aux =“ $ {MYSQL_ROOT_PASSWORD:-}” 
;然後
                      password_aux = $(cat $ MYSQL_ROOT_PASSWORD_FILE)
                  fi 
                  mysqladmin status -uroot -p $ password_aux
            initialDelaySeconds:120 
            periodSeconds:10
            設置的時間:1 
            successThreshold:1 
            failureThreshold:3 
          readinessProbe:
             EXEC:
              命令:
                - SH 
                - - C 
                - | 
                  如果[-f“ $ {MYSQL_ROOT_PASSWORD_FILE:-}”],則                  password_aux =“ $ {MYSQL_ROOT_PASSWORD:-}” 
;然後
                      password_aux = $(cat $ MYSQL_ROOT_PASSWORD_FILE)
                  fi 
                  mysqladmin status -uroot -p $ password_aux
            initialDelaySeconds:30 
            periodSeconds:10
            設置的時間:1 
            successThreshold:1 
            failureThreshold:3
          資源:
            限制:{}
            請求:{}
            
          volumeMounts:
            -名稱:數據
              裝載路徑:/ bitnami / MySQL的
            -名:配置
              裝載路徑:/opt/bitnami/mysql/conf/my.cnf 
              SUBPATH:my.cnf中
            -名稱:mysql的-憑證
              裝載路徑:/選擇/ bitnami / MySQL的/秘密/
      卷數:
        -名稱:配置
          configMap:
            名稱:bloganalytics MySQL的主
        -名稱:mysql的-憑證
          秘密:
             secretName:bloganalytics-mysql的
            項目:
              -鍵:mysql-root-password
                路徑:mysql-root-password 
  volumeClaimTemplates:
    -元數據:
        名稱:數據
        標籤:
          應用程序:MySQL的
          組成部分:主
          版本:bloganalytics
          遺產:翻土機
      規格:
         accessModes:
          - “ ReadWriteOnce ”
        資源:
          請求:
            存儲:“ 8Gi ”

以下YAML描述了單實例WordPress部署。
-所述WORDPRESS_DATABASE_NAME環境變量設置上面定義的MySQL的服務的名稱
-WordPress將通過Service訪問數據庫
-批量聲明是在 PersistentVolumeClaim 描述的資源中提出的。

---
 #來源:wordpress / templates / externaldb-secrets.yaml

apiVersion:V1
樣:秘密
元數據:
  名稱:bloganalytics-externaldb
  標籤:
     app.kubernetes.io/name:WordPress的
    helm.sh/chart:WordPress的-9.0.4 
    app.kubernetes.io/instance:bloganalytics 
    app.kubernetes.io/託管由:分蘗
類型:不透明
數據:
   MariaDB的密碼:“ d29yZHByZXNz ”

---
#來源:WordPress的/模板/ secrets.yaml 
apiVersion: V1
樣:秘密
元數據:
  名稱: bloganalytics - WordPress的
  標籤:
     app.kubernetes.io/name: WordPress的
    helm.sh/chart: WordPress的-9.0.4 
    app.kubernetes.io /實例: bloganalytics 
    app.kubernetes.io/managed-by:分蘗
類型:不透明
數據:
   WordPress的密碼: “ d29yZHByZXNz ”

---
#來源:wordpress / templates / pvc.yaml

種:PersistentVolumeClaim 
apiVersion:V1
元數據:
  名稱:bloganalytics - WordPress的
  標籤:
     app.kubernetes.io/name:WordPress的
    helm.sh/chart:WordPress的-9.0.4 
    app.kubernetes.io/instance:bloganalytics 
    app.kubernetes.io/管理-通過:翻土機
規格:
   accessModes:
    - “ ReadWriteOnce ”
  資源:
    請求:
      存儲:“ 10Gi ”
  

---
#來源:WordPress的/模板/ svc.yaml 
apiVersion: V1
樣:服務
元數據:
  名稱: bloganalytics - WordPress的
  標籤:
     app.kubernetes.io/name: WordPress的
    helm.sh/chart: WordPress的-9.0.4 
    app.kubernetes.io /例如: bloganalytics 
    app.kubernetes.io/managed-by:翻土機
規格:
  型號: ClusterIP
  端口:
    -名稱:HTTP
      端口:80 
      TARGETPORT:HTTP 
    -名稱:HTTPS
      端口:443 
      TARGETPORT:HTTPS
  選擇:
     app.kubernetes.io/name:WordPress的
    app.kubernetes.io/instance:bloganalytics

---
#來源:WordPress的/模板/ deployment.yaml 
apiVersion:應用程序/ V1
樣:部署
元數據:
  名稱: bloganalytics - WordPress的
  標籤:
     app.kubernetes.io/name: WordPress的
    helm.sh/chart: WordPress的-9.0.4 
    app.kubernetes .IO /實例: bloganalytics 
    app.kubernetes.io/managed-by:分蘗
規格:
  選擇:
     matchLabels:
       app.kubernetes.io/name: WordPress的
      app.kubernetes.io/instance:bloganalytics
  策略: 
    類型:RollingUpdate
    
  副本:1
  模板:
    元數據:
      標籤:
         app.kubernetes.io/name:WordPress的
        helm.sh/chart:WordPress的-9.0.4 
        app.kubernetes.io/instance:bloganalytics 
        app.kubernetes.io/managed-by:分蘗
    規範:      
       hostAliases:
        - IP:“ 127.0.0.1 ”
          主機名:
            - “ status.localhost ”
       securityContext:
         runAsUser:1001 
        fsGroup:1001
      容器:
        -名稱:wordpress
          圖片:docker.io/bitnami/wordpress
           : 5.3.2- debian -10- r48 imagePullPolicy:“ IfNotPresent ”
           env:
            -名稱:ALLOW_EMPTY_PASSWORD
              值:“是” 
            -名稱:MARIADB_HOST
              值:“ bloganalytics-mysql ” 
            -名稱:MARIADB_PORT_NUMBER
              值:“ 3306 ” 
            -名稱:WORDPRESS_DATABASE_NAME
              值:“ wordpress_db ” 
            -名稱:WORDPRESS_DATABASE_USER
              值:“WordPress的“ 
            -名稱:WORDPRESS_DATABASE_PASSWORD 
              valueFrom:
                 secretKeyRef:
                  名稱:bloganalytics-externaldb
                  鍵:MariaDB的密碼
            -名稱:WORDPRESS_USERNAME
              值:”用戶“ 
            -名:WORDPRESS_PASSWORD 
              valueFrom:
                 secretKeyRef:
                  名稱:bloganalytics - WordPress的
                  關鍵:wordpress密碼
            -名稱:WORDPRESS_EMAIL
              值:“ user@example.com ” 
            -名稱:WORDPRESS_FIRST_NAME
              值:“ FirstName ” 
            -名稱:WORDPRESS_LAST_NAME
              值:“ LastName ” 
            -名稱:WORDPRESS_HTACCESS_OVERRIDE_NONE
              值:“ no ” 
            -名稱:WORDPRESS_BLOG_NAME
              值:“”用戶博客!“ 
            -名稱:WORDPRESS_SKIP_INSTALL
              值:”否“ 
            -名稱:WORDPRESS_TABLE_PREFIX
              值:” wp_ “ 
            -名稱:WORDPRESS_SCHEME
              值:” http “
          端口:
            -名稱:HTTP 
              containerPort:8080 
            -名稱:HTTPS 
              containerPort:8443 
          livenessProbe:
             initialDelaySeconds:120 
            periodSeconds:10
            設置的時間:5 
            successThreshold:1 
            failureThreshold:6 
            HTTPGET:
              路徑:/wp-login.php
              端口:HTTP 
          readinessProbe:
             initialDelaySeconds:30 
            periodSeconds:10
            設置的時間:5 
            successThreshold:1 
            failureThreshold:6 
            HTTPGET:
              路徑:/wp-login.php
              端口:HTTP 
          volumeMounts:
            -裝載路徑:/ bitnami / WordPress的
              名稱:WordPress的數據
              子路徑:WordPress的
          資源:
            限制:{}
            請求:
               CPU:300米
              存儲器:512Mi
            
      卷數:
        -名稱:WordPress的數據
          persistentVolumeClaim:
             claimName:bloganalytics,WordPress的

---
#來源:wordpress / templates / ingress.yaml

apiVersion:networking.k8s.io/v1beta1
一種:入口
的元數據:
  名稱:bloganalytics - WordPress的
  標籤:
     app.kubernetes.io/name:WordPress的
    helm.sh/chart:WordPress的-9.0.4 
    app.kubernetes.io/instance:bloganalytics 
    app.kubernetes.io/managed-by:分蘗
規格:
  規則:
    -主持人:bloganalytics.karbon.nutanix.com 
      HTTP:
        路徑:
          -路徑://
            後端:
               serviceName:bloganalytics-wordpress 
              servicePort:http

應用部署

以下步驟將說明如何在Karbon Platform Services上部署MySQL應用程序。

創建一個項目

在KPS中,用於分割Kubernetes Apps和其他服務,以便只有特定用戶才能查看和修改。這使不同的部門或團隊可以利用共享的服務域或雲資源,而不會干擾彼此的應用程序或業務邏輯。

創建一個新項目以部署範例應用程序:

  1. 登錄到Karbon Platform Services雲管理控制台後,進入「項目」。

  2. 創建項目,將其命名為Database Application,將自己添加為User,然後單擊Next。
    https://ithelp.ithome.com.tw/upload/images/20201005/20129565vDHPSS7oSY.png

  3. 在「資源分配」Resources Assignment,選擇應用程序的服務域,然後點擊下一步。
    KPS可以本地發送到多個公共雲服務,例如AWS S3或GCP Cloud Datastore。
    「雲配置文件選擇」可以保留為空白,因為不會使用任何雲資源。
    KPS可以使用存儲在公共或私人註冊表中的圖像來執行Kubernetes Apps。
    由於本示範使用的是公共註冊表中託管的容器,因此「容器註冊表選擇」可以保留為空白。

  4. 在最後一部分中,啟用Nginx-Ingress並點擊Create。

MySQL應用

在本部分中,您將上傳一個YAML文件,該文件將在多節點服務域上部署MySQL單實例所需的微服務。MySQL部署是具持久需求的高度可操作企業應用程序的。

在新的瀏覽器中,下載標記為 mysql.yaml 的文件。

在項目下拉選單中,切換到數據庫應用程序,然後點擊Kubernetes Apps

創建一個新的Kubernetes應用並將其命名為mysql。在服務域選擇部分中,確保選擇為項目選擇的服務域,然後點擊下一步

在“配置”對話框上,點擊“選擇文件”以上傳先前下載的mysql.yaml文件。查看YAML的內容,然後點擊創建
https://ithelp.ithome.com.tw/upload/images/20201005/201295651V7ymsJ8A3.png

WordPress的應用

上傳下一個YAML文件將部署Wordpress的實例。Wordpress不僅用於示範PVC部署,還用作範例MySQL成功部署到其PV中的前端。

  1. 下載標有wordpress.yamlYAML文件。
  2. 在Database Application項目的上下文中再次點擊Kubernetes Apps
  3. 創建一個新的Kubernetes應用並將其命名為wordpress
  4. 選擇為項目選擇的相同服務域,然後點擊下一步
  5. 配置對話框上,點擊選擇文件以上傳先前下載的wordpress.yaml文件。查看YAML的內容,然後點擊創建
    https://ithelp.ithome.com.tw/upload/images/20201005/20129565RR9AfWCZM2.png

訪問應用程序

創建一個新的DNS記錄,將主機名bloganalytics.karbon.nutanix.com反應到您的服務域的虛擬IP地址。為簡單起見,在您的本地工作站上,將主機名添加到**/ etc / hosts**文件中。

MacOS / Linux

echo "<Service Domain VIP> bloganalytics.karbon.nutanix.com" | sudo tee -a /etc/hosts

視窗

echo <Service Domain VIP> bloganalytics.karbon.nutanix.com >> %WINDIR%\System32\Drivers\Etc\Hosts

驗證應用程序部署

訪問 bloganalytics.karbon.nutanix.com 並確認該應用程序正在成功運行。

https://ithelp.ithome.com.tw/upload/images/20201005/20129565z6z2InZNGO.png

恭喜你!已經能夠使用KPS上的Nutanix CSI卷驅動程序和多節點服務域,成功部署了範例有狀態Kubernetes應用程序。

重點回顧

  • Karbon Platform Servicse 使可擴展的持久性存儲上輕鬆部署有狀態應用程序變得容易。
  • 使用Karbon Platform Services創建項目細分諸如Kubernetes Apps和其他服務之類的資源,以便特別的用戶查看和修改。
  • KSP支持從一個平台管理應用程序服務,例如Kafka、Prometheus、Istio和Traefik。
  • 可以使用KPS中使用Kubernets格式的 YAML 或 Helm 圖表來創建 Kubernetes 應用程序。
  • KPS允許使用基於雲的SaaS控制平面大規模部署容器化的應用程序和服務。

尚未有邦友留言

立即登入留言