服務商如允許用戶修改服務的配置參數,可在創建服務時開啟運行時參數按鈕。配置相關參數后,計算巢將為用戶提供圖形化編輯運行時參數的界面,以降低用戶變更運行時參數的門檻。
背景信息
在實際服務使用過程中,經常有需要修改服務運行參數的場景。例如,用戶需修改部署服務的端口或最大連接數。通常,用戶需自行登錄服務部署的ECS實例或ACK集群修改相關的配置文件或ConfigMap。為降低用戶編輯配置文件的門檻,您可開啟運行時參數功能,并配置相關內容,計算巢將為用戶提供圖形化編輯參數的界面。
使用方式
點擊
。根據服務需求,編輯各配置項與服務的ros模板。
在ros模板里的Parameters模塊下,新增ConfigParam參數,可將下面代碼直接復制到您的ros模板中。
ConfigParam: Type: String Default: ''
在編輯頁面服務運維(選填)模塊找到運行時參數,打開按鈕。
運行時參數支持多模板,多文件配置。您需要首先定義參數分組名,用以在多配置文件的情況下供計算巢區分不同的文件內容。同時需指定該配置文件的指令配置文件格式,計算巢支持cnf、json、yaml、properties、xml等常見格式的配置文件。參數文件內容則需要填寫該配置文件的全部內容,例如下圖。
定義可修改的參數。配置文件中參數眾多,可供用戶編輯的可能只是其中一部分。服務商需要定義這部分參數,同時需要定義這些參數的約束。下面內容請重點關注:
配置可編輯參數時。參數名需要與參數文件內容中的參數名一致。對于json、yaml、xml這些參數有層次結構的文件格式,可使用英文句號“.”分割各層。例如,yaml格式的參數。
root: properties: value: 1
參數名可填寫為:root.properties.value。
參數類型支持String、Number、List、Boolean、Json。
不同的參數類型支持不同的參數約束規則。其中json和boolean兩種不可約束;string類型的參數支持“可選參數”和“匹配表達式”兩種約束;number類型的參數支持“可選參數”和“參數極值”兩種約束;list類型的參數僅支持“可選參數”一種約束。您可根據自己的情況酌情選擇。
可選參數指的是服務商可定義幾個備選值供用戶選擇,不可填寫這些值之外的值。例如:
匹配表達式指的是您可以輸入一個正則表達式,用戶必須填寫符合該正則表達式的內容才能夠通過校驗。同時您需要提供這個表達式的含義供用戶參考。例如:
參數極值指的是用戶可填寫的數字的最大值和最小值。服務商可根據情況限制最大值,或限制最小值,或同時限制最大最小值。例如:
在ros模板中定義資源,將配置文件的內容寫入您的配置文件。根據您部署的方式不同,需要定義不同的ros資源。例如:服務商在運行時參數模塊配置了一個叫mysql的參數分組。
如果您的軟件部署在ECS實例上。此時通常需要將配置文件寫入到ECS機器的特定文件中,可使用ros的RunCommand資源執行寫入腳本:
Resources: InstanceRunCommand: Type: ALIYUN::ECS::RunCommand Properties: Sync: true CommandContent: Fn::Sub: - | cat > /root/mysql.cnf << "EOF" ${Mysql} EOF - Mysql: Fn::Select: - mysql - Ref: ConfigParam Type: RunShellScript InstanceIds: Fn::GetAtt: - EcsInstanceGroup - InstanceIds Timeout: '300'
上面內容測含義是,定義一個腳本,該腳本向/root/mysql.cnf覆蓋式寫入內容。而寫入的內容則是通過
Mysql: Fn::Select: - mysql - Ref: ConfigParam
獲取的。Fn::Select:的含義是,從ConfigParam的眾多參數分組中篩選參數組名是mysql的參數分組內容。
如果您的軟件部署在ACK集群上。這種情況一般是通過ConfigMap存儲配置內容,例如:
Resources: ClusterApplication: Type: ALIYUN::CS::ClusterApplication Properties: YamlContent: Fn::Sub: - | apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql-demo spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:latest ports: - containerPort: 3306 volumeMounts: - name: mysql-config mountPath: /etc/mysql/conf.d volumes: - name: mysql-config configMap: name: mysql-config --- apiVersion: v1 kind: ConfigMap metadata: name: mysql-config data: my.cnf: | ${ConfigParam} - ConfigParam: Fn::Indent: - Fn::Select: - mysql - Ref: ConfigParam - 2 ClusterId: c989ca998e381************* DefaultNamespace: mysql-demo
上文通過yaml部署了一個StatefulSet,同時該StatefulSet掛載了一個ConfigMap存儲運行時參數信息。該ConfigMap的key是my.cnf,內容是ConfigParam的內容。
在服務運維(選填)模塊的運維模塊,點擊添加運維操作。進入基礎運維項的tab頁,勾選重啟選項點擊確定。更多內容,請參考自定義運維操作說明的基礎運維項相關內容。
完成其他內容編輯,保存服務。