
This commit introduces the prototype for the app-distributed-cloud All dcmanager services are being containerized, and the app will utilize Keystone, certmanager, and rabbitmq from the platform. The prototype is in its initial phase, and DC functionalities/services have not yet been thoroughly tested. In this first phase, the subcloud add command is functional. This commit includes the dcmanager and dc-vault helm charts, and a a structure of dcorch, that will be added in a following commit. Before testing the app, the platform must be configured. Refer to the README file for details. Test Plan: PASS: Execute a subcloud add successfully. Story: 2011312 Task: 51841 Change-Id: Ifa6dbbb39d5bdd48eedd06c732d24d26a48f6ae8 Co-Authored-By: Matt Peters <matt.peters@windriver.com> Co-Authored-By: Enzo Candotti <enzo.candotti@windriver.com> Co-Authored-By: Yuxing Jiang <yuxing.jiang@windriver.com> Signed-off-by: Hugo Brito <hugo.brito@windriver.com>
438 lines
10 KiB
Markdown
438 lines
10 KiB
Markdown
# app-distributed-cloud (Prototype)
|
|
|
|
This tutorial provides a step-by-step guide on containerizing DC Services using the
|
|
app-distributed-cloud prototype.
|
|
|
|
> **Note:** All dcmanager operations are not fully tested or operational.
|
|
|
|
## Disable Service Management
|
|
|
|
Disable the dcmanager services on the platform
|
|
|
|
```bash
|
|
source /etc/platform/openrc
|
|
|
|
sudo sm-unmanage service dcmanager-manager
|
|
sudo sm-unmanage service dcmanager-api
|
|
sudo sm-unmanage service dcmanager-audit
|
|
sudo sm-unmanage service dcmanager-audit-worker
|
|
sudo sm-unmanage service dcmanager-orchestrator
|
|
sudo sm-unmanage service dcmanager-state
|
|
|
|
sudo sm-unmanage service dcorch-engine
|
|
sudo sm-unmanage service dcorch-engine-worker
|
|
sudo sm-unmanage service dcorch-sysinv-api-proxy
|
|
sudo sm-unmanage service dcorch-patch-api-proxy
|
|
sudo sm-unmanage service dcorch-identity-api-proxy
|
|
|
|
sudo sm-unmanage service dcdbsync-api
|
|
|
|
|
|
sudo pkill -f ^".*/bin/dcmanager.*"
|
|
sudo pkill -f ^".*/bin/dcorch.*"
|
|
sudo pkill -f ^".*/bin/dcdbsync.*"
|
|
```
|
|
|
|
## Platform Setup
|
|
|
|
```bash
|
|
system host-label-assign controller-0 starlingx.io/distributed-cloud=enabled
|
|
system host-label-assign controller-1 starlingx.io/distributed-cloud=enabled
|
|
```
|
|
|
|
> **Note:** If you have issues with downloading the nginx image for dc-vault-nginx,
|
|
assign the distributed-cloud label just for the controller-0
|
|
|
|
## Create the namespace and root-ca secret
|
|
|
|
```bash
|
|
# Create distributed-cloud namespace
|
|
|
|
kubectl create namespace distributed-cloud
|
|
|
|
# Create system-local-ca secret
|
|
|
|
cp /etc/ssl/certs/dc-adminep-root-ca.pem /home/sysadmin/root-ca.pem
|
|
|
|
kubectl -n distributed-cloud create secret generic root-ca --from-file=ca.crt=/home/sysadmin/root-ca.pem
|
|
```
|
|
|
|
## Distributed Cloud Application Deployment (development)
|
|
|
|
```bash
|
|
# Configure Docker Image
|
|
# Create or download the docker image used for the dcmanager pods
|
|
DOCKER_IMAGE=registry.local:9001/docker.io/starlingx/stx-distributed-cloud:master-debian-stable-latest
|
|
|
|
sudo docker login registry.local:9001
|
|
|
|
sudo docker image pull <POD_IMAGE>
|
|
sudo docker image tag <POD_IMAGE> ${DOCKER_IMAGE}
|
|
sudo docker image push ${DOCKER_IMAGE}
|
|
|
|
# Upload the prototype
|
|
system application-upload /usr/local/share/applications/helm/distributed-cloud-25.09-0.tgz
|
|
```
|
|
|
|
```bash
|
|
# Set Password Variables
|
|
ADMIN_KS_PASSWORD=$(keyring get CGCS admin)
|
|
RABBITMQ_PASSWORD=$(keyring get amqp rabbit)
|
|
DCMANAGER_DB_PASSWORD=$(keyring get dcmanager database)
|
|
DCMANAGER_KS_PASSWORD=$(keyring get dcmanager services)
|
|
DCORCH_DB_PASSWORD=$(keyring get dcorch database)
|
|
DCORCH_KS_PASSWORD=$(keyring get dcorch services)
|
|
|
|
# Create dcmanager and dcorch overrides
|
|
cat<<EOF>dcmanager.yaml
|
|
images:
|
|
tags:
|
|
dcmanager: ${DOCKER_IMAGE}
|
|
ks_user: ${DOCKER_IMAGE}
|
|
ks_service: ${DOCKER_IMAGE}
|
|
ks_endpoints: ${DOCKER_IMAGE}
|
|
dcmanager_db_sync: ${DOCKER_IMAGE}
|
|
db_init: ${DOCKER_IMAGE}
|
|
db_drop: ${DOCKER_IMAGE}
|
|
pullPolicy: Always
|
|
pod:
|
|
image_pull_secrets:
|
|
default:
|
|
- name: default-registry-key
|
|
tolerations:
|
|
dcmanager:
|
|
enabled: true
|
|
conf:
|
|
dcmanager:
|
|
DEFAULT:
|
|
log_config_append: /etc/dcmanager/logging.conf
|
|
transport_url: rabbit://guest:${RABBITMQ_PASSWORD}@controller.internal:5672
|
|
auth_strategy: keystone
|
|
playbook_timeout: 3600
|
|
use_usm: False
|
|
workers: 1
|
|
orch_workers: 1
|
|
state_workers: 1
|
|
audit_workers: 1
|
|
audit_worker_workers: 1
|
|
cache:
|
|
auth_uri: http://controller.internal:5000/v3
|
|
admin_tenant: admin
|
|
admin_username: admin
|
|
admin_password: ${ADMIN_KS_PASSWORD}
|
|
endpoint_cache:
|
|
auth_uri: http://controller.internal:5000/v3
|
|
auth_plugin: password
|
|
username: dcmanager
|
|
password: ${DCMANAGER_KS_PASSWORD}
|
|
project_name: services
|
|
user_domain_name: Default
|
|
project_domain_name: Default
|
|
http_connect_timeout: 15
|
|
database:
|
|
connection_recycle_time: 3600
|
|
max_pool_size: 105
|
|
max_overflow: 100
|
|
keystone_authtoken:
|
|
auth_version: v3
|
|
auth_type: password
|
|
dependencies:
|
|
static:
|
|
api:
|
|
jobs:
|
|
- dcmanager-ks-user
|
|
- dcmanager-ks-service
|
|
- dcmanager-ks-endpoints
|
|
ks_endpoints:
|
|
jobs:
|
|
- dcmanager-ks-user
|
|
- dcmanager-ks-service
|
|
endpoints:
|
|
cluster_domain_suffix: cluster.local
|
|
oslo_db:
|
|
auth:
|
|
admin:
|
|
username: admin-dcmanager
|
|
password: ${DCMANAGER_DB_PASSWORD}
|
|
dcmanager:
|
|
username: admin-dcmanager
|
|
password: ${DCMANAGER_DB_PASSWORD}
|
|
hosts:
|
|
default: postgresql
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
port:
|
|
postgresql:
|
|
default: 5432
|
|
path: /dcmanager
|
|
scheme: postgresql+psycopg2
|
|
oslo_messaging:
|
|
auth:
|
|
admin:
|
|
username: guest
|
|
password: ${RABBITMQ_PASSWORD}
|
|
dcmanager:
|
|
username: guest
|
|
password: ${RABBITMQ_PASSWORD}
|
|
hosts:
|
|
default: rabbitmq
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
path: /
|
|
scheme: rabbit
|
|
port:
|
|
amqp:
|
|
default: 5672
|
|
http:
|
|
default: 15672
|
|
identity:
|
|
name: keystone
|
|
auth:
|
|
admin:
|
|
username: admin
|
|
password: ${ADMIN_KS_PASSWORD}
|
|
region_name: RegionOne
|
|
project_name: admin
|
|
user_domain_name: Default
|
|
project_domain_name: Default
|
|
dcmanager:
|
|
role: admin
|
|
username: dcmanager
|
|
password: ${DCMANAGER_KS_PASSWORD}
|
|
region_name: RegionOne
|
|
project_name: services
|
|
user_domain_name: Default
|
|
project_domain_name: Default
|
|
hosts:
|
|
default: keystone-api
|
|
public: keystone
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
path:
|
|
default: /v3
|
|
scheme:
|
|
default: http
|
|
port:
|
|
api:
|
|
default: 80
|
|
internal: 5000
|
|
dcmanager:
|
|
name: dcmanager
|
|
hosts:
|
|
default: dcmanager-api
|
|
public: dcmanager
|
|
host_fqdn_override:
|
|
default: null
|
|
path:
|
|
default: /v1.0
|
|
scheme:
|
|
default: 'http'
|
|
port:
|
|
api:
|
|
default: 8119
|
|
public: 80
|
|
EOF
|
|
|
|
cat<<EOF>dcorch.yaml
|
|
images:
|
|
tags:
|
|
dcorch: ${DOCKER_IMAGE}
|
|
ks_user: ${DOCKER_IMAGE}
|
|
ks_service: ${DOCKER_IMAGE}
|
|
ks_endpoints: ${DOCKER_IMAGE}
|
|
dcorch_db_sync: ${DOCKER_IMAGE}
|
|
db_init: ${DOCKER_IMAGE}
|
|
db_drop: ${DOCKER_IMAGE}
|
|
pullPolicy: Always
|
|
pod:
|
|
image_pull_secrets:
|
|
default:
|
|
- name: default-registry-key
|
|
tolerations:
|
|
dcorch:
|
|
enabled: true
|
|
replicas:
|
|
dcorch_engine_worker: 1
|
|
dcorch_sysinv_api_proxy: 1
|
|
keystone_api_proxy: 1
|
|
dcorch_patch_api_proxy: 1
|
|
dcorch_usm_api_proxy: 1
|
|
conf:
|
|
dcorch:
|
|
DEFAULT:
|
|
log_config_append: /etc/dcorch/logging.conf
|
|
transport_url: rabbit://guest:${RABBITMQ_PASSWORD}@controller.internal:5672
|
|
auth_strategy: keystone
|
|
playbook_timeout: 3600
|
|
use_usm: False
|
|
endpoint_cache:
|
|
password: ${DCMANAGER_KS_PASSWORD}
|
|
database:
|
|
connection_recycle_time: 3600
|
|
max_pool_size: 105
|
|
max_overflow: 100
|
|
keystone_authtoken:
|
|
auth_version: v3
|
|
auth_type: password
|
|
dependencies:
|
|
static:
|
|
api:
|
|
jobs:
|
|
- dcorch-ks-user
|
|
- dcorch-ks-service
|
|
- dcorch-ks-endpoints
|
|
ks_endpoints:
|
|
jobs:
|
|
- dcorch-ks-user
|
|
- dcorch-ks-service
|
|
|
|
endpoints:
|
|
cluster_domain_suffix: cluster.local
|
|
oslo_db:
|
|
auth:
|
|
admin:
|
|
username: admin-dcorch
|
|
password: ${DCORCH_DB_PASSWORD}
|
|
dcorch:
|
|
username: admin-dcorch
|
|
password: ${DCORCH_DB_PASSWORD}
|
|
dcmanager:
|
|
username: admin-dcmanager
|
|
password: ${DCMANAGER_DB_PASSWORD}
|
|
hosts:
|
|
default: postgresql
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
port:
|
|
postgresql:
|
|
default: 5432
|
|
path: /dcorch
|
|
scheme: postgresql+psycopg2
|
|
oslo_messaging:
|
|
auth:
|
|
admin:
|
|
username: guest
|
|
password: ${RABBITMQ_PASSWORD}
|
|
dcmanager:
|
|
username: guest
|
|
password: ${RABBITMQ_PASSWORD}
|
|
hosts:
|
|
default: rabbitmq
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
path: /
|
|
scheme: rabbit
|
|
port:
|
|
amqp:
|
|
default: 5672
|
|
http:
|
|
default: 15672
|
|
identity:
|
|
name: keystone
|
|
auth:
|
|
admin:
|
|
username: admin
|
|
password: ${ADMIN_KS_PASSWORD}
|
|
region_name: RegionOne
|
|
project_name: admin
|
|
user_domain_name: Default
|
|
project_domain_name: Default
|
|
dcorch:
|
|
role: admin
|
|
username: dcorch
|
|
password: ${DCORCH_KS_PASSWORD}
|
|
region_name: RegionOne
|
|
project_name: services
|
|
user_domain_name: Default
|
|
project_domain_name: Default
|
|
hosts:
|
|
default: keystone-api
|
|
public: keystone
|
|
host_fqdn_override:
|
|
default: controller.internal
|
|
path:
|
|
default: /v3
|
|
scheme:
|
|
default: http
|
|
port:
|
|
api:
|
|
default: 80
|
|
internal: 5000
|
|
dcorch:
|
|
name: dcorch
|
|
hosts:
|
|
default: dcorch-api
|
|
public: dcorch
|
|
host_fqdn_override:
|
|
default: null
|
|
path:
|
|
default: /v1.0
|
|
scheme:
|
|
default: 'http'
|
|
port:
|
|
api:
|
|
default: 8118
|
|
public: 80
|
|
EOF
|
|
```
|
|
|
|
```bash
|
|
system helm-override-update distributed-cloud dcmanager distributed-cloud --values dcmanager.yaml
|
|
system helm-override-update distributed-cloud dcorch distributed-cloud --values dcorch.yaml
|
|
|
|
system helm-override-show distributed-cloud dcmanager distributed-cloud
|
|
system helm-override-show distributed-cloud dcorch distributed-cloud
|
|
```
|
|
|
|
## Apply app-distributed-cloud
|
|
|
|
```bash
|
|
system application-apply distributed-cloud
|
|
system application-show distributed-cloud
|
|
```
|
|
|
|
## To remove
|
|
|
|
```bash
|
|
system application-remove distributed-cloud
|
|
system application-delete distributed-cloud
|
|
```
|
|
|
|
## Check dcmanager endpoints
|
|
|
|
```bash
|
|
openstack endpoint list | grep dcmanager
|
|
```
|
|
|
|
## Check if dcmanager-api endpoint works
|
|
|
|
```bash
|
|
kubectl get svc dcmanager-api -n distributed-cloud
|
|
kubectl get endpoints dcmanager-api -n distributed-cloud
|
|
|
|
# Get Token
|
|
openstack token issue
|
|
|
|
curl -i http://<endpoint>/v1.0/subclouds -X GET -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token:${TOKEN}"
|
|
```
|
|
|
|
## Configure dcmanager-client
|
|
|
|
Edit file: /usr/lib/python3/dist-packages/dcmanagerclient/api/v1/client.py
|
|
|
|
```python
|
|
_DEFAULT_DCMANAGER_URL = (
|
|
"http://dcmanager-api.distributed-cloud.svc.cluster.local:8119/v1.0"
|
|
)
|
|
|
|
# delete if not dcmanager_url: to always set default
|
|
dcmanager_url = _DEFAULT_DCMANAGER_URL
|
|
```
|
|
|
|
## Check dcmanager-manager is working
|
|
|
|
```bash
|
|
dcmanager subcloud-group add --name test
|
|
dcmanager subcloud update --group 2 subcloud2-stx-latest
|
|
```
|