Tutor GCP k3s Deployment botocore.exceptions.ClientError

Info

OS: Latest Debian image on GCP
Kubernetes: K3s spread across 3 nodes

instance-7   Ready    <none>                 111m   v1.27.3+k3s1
instance-5   Ready    control-plane,master   126m   v1.27.3+k3s1
instance-6   Ready    <none>                 111m   v1.27.3+k3s1

Search Terms

Tried search terms in forums botocore and PutObject with no luck

Guesses

I suspect that the issues is between minio and the lms app but i have no idea what is going on here. I have checked GCP firewall and i ensured the ports are open. The minio page opens when i navigate to it. I suspect i am missing a dependency somewhere but i have no idea where. Thanks for any help yall can offer.

Software installation:

    1  curl -sfL https://get.k3s.io | sh -
    2  sudo cat /var/lib/rancher/k3s/server/node-token
    3  kubectl get nodes
    4  export KUBECONFIG=~/.kube/config
    5  mkdir ~/.kube 2> /dev/null
    6  sudo k3s kubectl config view --raw > "$KUBECONFIG"
    7  chmod 600 "$KUBECONFIG"
    8  kubectl get nodes
    9  watch kubectl get nodes
   10  ss -lnt
   11  watch kubectl get nodes
   12  pip install "tutor[full]"
   13  sudo apt install python3 python3-pip libyaml-dev
   14  pip install "tutor[full]"
   15  tutor k8s start caddy
   16  .local/bin/tutor k8s start caddy
   17  .local/bin/tutor config save --interactive
   18  sudo apt install docker.io
   19  .local/bin/tutor config save --interactive
   20  .local/bin/tutor k8s start caddy
   21  kubectl --namespace openedx get services/caddy
   22  watch kubectl --namespace openedx get services/caddy
   23  tutor k8s logs -f caddy
   24  .local/bin/tutor k8s logs -f caddy
   25  .local/bin/tutor plugins enable minio
   26  .local/bin/tutor k8s status
   27  .local/bin/tutor k8s launch

Attempted Launch:

I have tried it with and without SSL.

==================================================
        Interactive platform configuration
==================================================
Your website domain name for students (LMS) [lms.strixlabs.io] 
Your website domain name for teachers (CMS) [studio.lms.strixlabs.io] 
Your platform name/title [Strix Labs LMS] 
Your public contact email address [XXXXXXXXX@strixlabs.io] 
The default language code for the platform [en] 
Activate SSL/TLS certificates for HTTPS access? Important note: this will NOT work in a development environment. [y/N] n
Configuration saved to /home/koelslaw/.local/share/tutor/config.yml
Environment generated in /home/koelslaw/.local/share/tutor/env
=====================================
        Starting the platform
=====================================
kubectl get namespaces openedx
Error from server (NotFound): namespaces "openedx" not found
Namespace does not exist: now creating it...
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --wait --selector app.kubernetes.io/component=namespace
namespace/openedx created
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --wait --selector app.kubernetes.io/component=volume
persistentvolumeclaim/caddy created
persistentvolumeclaim/elasticsearch created
persistentvolumeclaim/minio created
persistentvolumeclaim/mongodb created
persistentvolumeclaim/mysql created
persistentvolumeclaim/redis created
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --selector 'app.kubernetes.io/component notin (job,volume,namespace)'
configmap/caddy-config-fhd2fhkk52 created
configmap/mfe-caddy-config-2t4bk6mgc9 created
configmap/openedx-config-5h655b7764 created
configmap/openedx-settings-cms-dt4m2ccgmf created
configmap/openedx-settings-lms-k4tdb9cgd9 created
configmap/openedx-uwsgi-config-f57k74k5cc created
configmap/redis-config-fccm65mh4m created
service/caddy created
service/cms created
service/elasticsearch created
service/lms created
service/mfe created
service/minio created
service/mongodb created
service/mysql created
service/redis created
service/smtp created
deployment.apps/caddy created
deployment.apps/cms created
deployment.apps/cms-worker created
deployment.apps/elasticsearch created
deployment.apps/lms created
deployment.apps/lms-worker created
deployment.apps/mfe created
deployment.apps/minio created
deployment.apps/mongodb created
deployment.apps/mysql created
deployment.apps/redis created
deployment.apps/smtp created
================================================
        Database creation and migrations
================================================
Initialising all services...
Running init task in lms
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --selector app.kubernetes.io/name=lms-job-20230726221734
job.batch/lms-job-20230726221734 created
Job lms-job-20230726221734 is running. To view the logs from this job, run:

    kubectl logs --namespace=openedx --follow $(kubectl get --namespace=openedx pods --selector=job-name=lms-job-20230726221734 -o=jsonpath="{.items[0].metadata.name}")

Waiting for job completion...
Job lms-job-20230726221734 successful.
Running init task in minio
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --selector app.kubernetes.io/name=minio-job-20230726221750
job.batch/minio-job-20230726221750 created
Job minio-job-20230726221750 is running. To view the logs from this job, run:

    kubectl logs --namespace=openedx --follow $(kubectl get --namespace=openedx pods --selector=job-name=minio-job-20230726221750 -o=jsonpath="{.items[0].metadata.name}")

Waiting for job completion...
Job minio-job-20230726221750 successful.
Running init task in mysql
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --selector app.kubernetes.io/name=mysql-job-20230726221759
job.batch/mysql-job-20230726221759 created
Job mysql-job-20230726221759 is running. To view the logs from this job, run:

    kubectl logs --namespace=openedx --follow $(kubectl get --namespace=openedx pods --selector=job-name=mysql-job-20230726221759 -o=jsonpath="{.items[0].metadata.name}")

Waiting for job completion...
Job mysql-job-20230726221759 successful.
Running init task in lms
kubectl apply --kustomize /home/koelslaw/.local/share/tutor/env --selector app.kubernetes.io/name=lms-job-20230726221808
job.batch/lms-job-20230726221808 created
Job lms-job-20230726221808 is running. To view the logs from this job, run:

    kubectl logs --namespace=openedx --follow $(kubectl get --namespace=openedx pods --selector=job-name=lms-job-20230726221808 -o=jsonpath="{.items[0].metadata.name}")

Waiting for job completion...
Error: Job lms-job-20230726221808 failed. View the job logs to debug this issue.

Result:

kubectl logs --namespace=openedx --follow $(kubectl get --namespace=openedx pods --selector=job-name=lms-job-20230726221808 -o=jsonpath="{.items[0].metadata.name}")
2023/07/26 22:18:12 Ready: tcp://mysql:3306.
2023/07/26 22:18:12 Ready: tcp://mongodb:27017.
Loading settings lms.envs.tutor.production
Operations to perform:
  Apply all migrations: admin, agreements, announcements, api_admin, assessment, auth, badges, blackboard, block_structure, bookmarks, branding, bulk_email, bulk_grades, bundles, calendar_sync, canvas, catalog, celery_utils, certificates, commerce, completion, consent, content_libraries, content_type_gating, contentserver, contenttypes, cornerstone, cors_csrf, course_action_state, course_apps, course_date_signals, course_duration_limits, course_goals, course_groups, course_home_api, course_live, course_modes, course_overviews, courseware, crawlers, credentials, credit, dark_lang, database_fixups, degreed, degreed2, demographics, discounts, discussions, django_celery_results, django_comment_common, django_notify, edx_name_affirmation, edx_proctoring, edx_when, edxval, email_marketing, embargo, enterprise, entitlements, experiments, external_user_ids, grades, instructor_task, integrated_channel, learner_pathway_progress, learning_sequences, lms_xblock, lti1p3_tool_config, lti_consumer, milestones, mobile_api, moodle, oauth2_provider, oauth_dispatch, organizations, outcome_surveys, program_enrollments, programs, redirects, rss_proxy, sap_success_factors, save_for_later, schedules, sessions, site_configuration, sites, social_django, splash, split_modulestore_django, staffgrader, static_replace, status, student, submissions, super_csv, support, survey, survey_report, system_wide_roles, teams, theming, third_party_auth, thumbnail, track, user_api, user_authn, user_tours, util, verify_student, video_config, video_pipeline, waffle, waffle_utils, wiki, workflow, xapi, xblock_django
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying agreements.0001_initial... OK
  Applying announcements.0001_initial... OK
  Applying sites.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying api_admin.0001_initial... OK
  Applying api_admin.0002_auto_20160325_1604... OK
  Applying api_admin.0003_auto_20160404_1618... OK
  Applying api_admin.0004_auto_20160412_1506... OK
  Applying api_admin.0005_auto_20160414_1232... OK
  Applying api_admin.0006_catalog... OK
  Applying api_admin.0007_delete_historical_api_records... OK
  Applying assessment.0001_initial... OK
  Applying assessment.0002_staffworkflow... OK
  Applying assessment.0003_expand_course_id... OK
  Applying assessment.0004_historicalsharedfileupload_sharedfileupload... OK
  Applying assessment.0005_add_filename_to_sharedupload... OK
  Applying assessment.0006_TeamWorkflows... OK
  Applying assessment.0007_staff_workflow_blank... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying instructor_task.0001_initial... OK
  Applying certificates.0001_initial... OK
  Applying certificates.0002_data__certificatehtmlviewconfiguration_data... OK
2023-07-26 22:18:45,188 INFO 17 [botocore.vendored.requests.packages.urllib3.connectionpool] [user None] [ip None] connectionpool.py:202 - Starting new HTTP connection (1): files.lms.strixlabs.io
Traceback (most recent call last):
  File "./manage.py", line 106, in <module>
    execute_from_command_line([sys.argv[0]] + django_args)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/base.py", line 89, in wrapped
    res = handle_func(*args, **kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 244, in handle
    post_migrate_state = executor.migrate(
  File "/openedx/venv/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/openedx/venv/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/openedx/venv/lib/python3.8/site-packages/django/db/migrations/executor.py", line 227, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/openedx/venv/lib/python3.8/site-packages/django/db/migrations/migration.py", line 123, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/openedx/venv/lib/python3.8/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/openedx/edx-platform/lms/djangoapps/certificates/migrations/0003_data__default_modes.py", line 20, in forwards
    conf.icon.save(
  File "/openedx/venv/lib/python3.8/site-packages/django/db/models/fields/files.py", line 89, in save
    self.name = self.storage.save(name, content, max_length=self.field.max_length)
  File "/openedx/venv/lib/python3.8/site-packages/django/core/files/storage.py", line 54, in save
    name = self._save(name, content)
  File "/openedx/venv/lib/python3.8/site-packages/storages/backends/s3boto3.py", line 495, in _save
    self._save_content(obj, content, parameters=parameters)
  File "/openedx/venv/lib/python3.8/site-packages/storages/backends/s3boto3.py", line 510, in _save_content
    obj.upload_fileobj(content, ExtraArgs=put_parameters)
  File "/openedx/venv/lib/python3.8/site-packages/boto3/s3/inject.py", line 511, in object_upload_fileobj
    return self.meta.client.upload_fileobj(
  File "/openedx/venv/lib/python3.8/site-packages/boto3/s3/inject.py", line 431, in upload_fileobj
    return future.result()
  File "/openedx/venv/lib/python3.8/site-packages/s3transfer/futures.py", line 73, in result
    return self._coordinator.result()
  File "/openedx/venv/lib/python3.8/site-packages/s3transfer/futures.py", line 233, in result
    raise self._exception
  File "/openedx/venv/lib/python3.8/site-packages/s3transfer/tasks.py", line 126, in __call__
    return self._execute_main(kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/s3transfer/tasks.py", line 150, in _execute_main
    return_value = self._main(**kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/s3transfer/upload.py", line 692, in _main
    client.put_object(Bucket=bucket, Key=key, Body=body, **extra_args)
  File "/openedx/venv/lib/python3.8/site-packages/botocore/client.py", line 314, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/openedx/venv/lib/python3.8/site-packages/botocore/client.py", line 612, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (404) when calling the PutObject operation: Not Found