Karbon平台服務(KPS)是基於Kubernetes的多雲PaaS,可在任何雲上快速開發和部署微服務的應用程序,從簡單的容器化應用程序到復雜的AI、IoT和混合應用程序。
本文章將詳細指導您使用KPS上的Nutanix CSI卷驅動程序和多節點服務,來部署示範Kubernetes應用程序。本文使用《Karbon Platform Services管理指南》中的多節點服務域,並且配置服務域和工作站之間的直接網路連接(以查看示範Web應用程序輸出),透過My Nutanix帳戶可以觀看管理指南
KPS使用Kubernetes容器存儲接口,CSI卷驅動程序使Nutanix提供可擴展的持久存儲。
Kubernetes是一個開放資源編碼平台,可以協調跨主機群集的應用程序容器的部署、擴展和操作。KPS服務域被部署為Nutanix託管的VM並組成一個集群。
Kubernetes包含CSI卷插件,該插件允許Nutanix CSI卷驅動程序獲得對容器的使用權限並提供持久存儲。該插件在pod中運行,並使用Nutanix Volumes動態儲存配置的PersistentVolumes(PV)。
MySQL和Wordpress都需要一個PersistentVolume(PV)來存儲數據。將在應用程序部署階段創建PersistentVolumeClaims(PVC)並動態設置PersistentVolume。KPS多節點服務的Kubernetes集群,默認為Nutanix存儲容器。這樣可以節省管理員手動配置CSI Volume Driver和其他Kubernetes組件的步驟。
本文章中,未在MySQL Statefulset的volumeClaimTemplates和Wordpress應用程序的PersistentVolumeClaim中指定特定的StorageClass,因此兩者均使用了服務域的默認StorageClass(AOS容器)。
您可以在此處找到有關在Nutanix管理PersistentVolumeClaims的更多訊息。
下面的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_packet = 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和其他服務,以便只有特定用戶才能查看和修改。這使不同的部門或團隊可以利用共享的服務域或雲資源,而不會干擾彼此的應用程序或業務邏輯。
創建一個新項目以部署範例應用程序:
登錄到Karbon Platform Services雲管理控制台後,進入「項目」。
創建項目,將其命名為Database Application,將自己添加為User,然後單擊Next。
在「資源分配」Resources Assignment,選擇應用程序的服務域,然後點擊下一步。
KPS可以本地發送到多個公共雲服務,例如AWS S3或GCP Cloud Datastore。
「雲配置文件選擇」可以保留為空白,因為不會使用任何雲資源。
KPS可以使用存儲在公共或私人註冊表中的圖像來執行Kubernetes Apps。
由於本示範使用的是公共註冊表中託管的容器,因此「容器註冊表選擇」可以保留為空白。
在最後一部分中,啟用Nginx-Ingress並點擊Create。
在本部分中,您將上傳一個YAML文件,該文件將在多節點服務域上部署MySQL單實例所需的微服務。MySQL部署是具持久需求的高度可操作企業應用程序的。
在新的瀏覽器中,下載標記為 mysql.yaml 的文件。
在項目下拉選單中,切換到數據庫應用程序,然後點擊Kubernetes Apps。
創建一個新的Kubernetes應用並將其命名為mysql。在服務域選擇部分中,確保選擇為項目選擇的服務域,然後點擊下一步。
在“配置”對話框上,點擊“選擇文件”以上傳先前下載的mysql.yaml文件。查看YAML的內容,然後點擊創建。
上傳下一個YAML文件將部署Wordpress的實例。Wordpress不僅用於示範PVC部署,還用作範例MySQL成功部署到其PV中的前端。
創建一個新的DNS記錄,將主機名bloganalytics.karbon.nutanix.com反應到您的服務域的虛擬IP地址。為簡單起見,在您的本地工作站上,將主機名添加到**/ etc / hosts**文件中。
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 並確認該應用程序正在成功運行。
恭喜你!已經能夠使用KPS上的Nutanix CSI卷驅動程序和多節點服務域,成功部署了範例有狀態Kubernetes應用程序。