Lai uzstādītu Nextcloud uz Ku­ber­ne­tes, iesakām kā datu uz­gla­bā­ša­nas sistēmu izmantot S3 un kā datu bāzi — MariaDB. Veicot dažas izmaiņas kon­fi­gu­rā­ci­jā, varat uzlabot sistēmas veikt­spē­ju.

Nextcloud un Ku­ber­ne­tes ir lieliska kom­bi­nā­ci­ja

Nextcloud un Ku­ber­ne­tes ap­vie­no­jums ar S3 datu uz­gla­bā­ša­nai ir daudz­so­lošs ri­si­nā­jums privātajā un biznesa sektorā. Šī ne­ko­mer­ciā­lā mā­koņprog­ram­ma­tū­ra ir piemērota darbam gan ar vietējiem serveriem, gan ārējiem resursiem, un, sa­lī­dzi­not ar daudzajām Nextcloud al­ter­na­tī­vām, tā var lepoties ar izcilu drošības ar­hi­tek­tū­ru. Ku­ber­ne­tes ir atvērtā koda pār­val­dī­bas sistēma kon­tei­ne­ru lie­to­jum­prog­ram­mām, ko var izmantot gan vietējai lie­to­ša­nai, gan mā­koņ­da­to­ša­nai. Šī sistēma tiek uzskatīta par elastīgu, ļoti skalējamu un drošu pret kļūmēm. Lasiet tālāk, lai uzzinātu, kā uzstādīt Nextcloud uz Ku­ber­ne­tes.

Kādi no­sa­cī­ju­mi ir jāizpilda?

Pirms sākt Nextcloud kon­fi­gu­rē­ša­nu Ku­ber­ne­tes vidē, ir jāizpilda daži no­sa­cī­ju­mi. Jums ir ne­pie­cie­ša­ma pie­tie­ka­ma uz­gla­bā­ša­nas vieta, un jau ir jābūt iz­vei­do­tam Ku­ber­ne­tes klasterim. Atkarībā no pieejamās ka­pa­ci­tā­tes varat iz­vē­lē­ties to izveidot savā lokālajā datorā vai izmantot mā­ko­ņuz­gla­bā­ša­nu. Turklāt pār­lie­ci­nie­ties, ka Ku­ber­ne­tes vidē ir kon­fi­gu­rēts Helm pakotņu pār­vald­nieks. Kad viss ir sa­ga­ta­vots, varat turpināt ar turp­mā­ka­jiem soļiem.

Kā soli pa solim uzstādīt Nextcloud uz Ku­ber­ne­tes

Kad būsiet iz­vei­do­ju­ši at­bil­sto­šu pamatu, varat sākt Nextcloud kon­fi­gu­rē­ša­nu Ku­ber­ne­tes vidē. Galvenie soļi ir apkopoti turp­mā­ka­jās sadaļās.

Kon­fi­gu­rēt DNS

Pirmais solis ir izveidot A ierakstu ap­akš­do­mē­nam, kas norāda uz vēlamo IP adresi. Ja iz­man­to­jat lokālo ri­si­nā­ju­mu, par galamērķi jānorāda jūsu publiskā IP adrese; citā gadījumā ievadiet IP adresi, ko sniedzis jūsu mā­koņ­pa­kal­po­ju­ma sniedzējs. Atkarībā no DNS pa­kal­po­ju­ma sniedzēja šim nolūkam ne­pie­cie­ša­mie soļi var nedaudz at­šķir­ties.

Pievienot un at­jau­ni­nāt Helm

Ku­ber­ne­tes tiek izvietots, iz­man­to­jot Helm pakotņu pār­val­dnie­ku, kas jābūt in­sta­lē­tam jūsu klientā. Turklāt pār­lie­ci­nie­ties, ka jums ir sa­vie­no­jums ar Ku­ber­ne­tes klasteri. Ja tas tā ir, pie­vie­no­jiet Helm re­po­zi­to­ri­ju un at­jau­ni­niet to, iz­man­to­jot šādas komandas:

helm repo add nextcloud https://nextcloud.github.io/helm/
helm repo update
shell

Iz­vei­do­jiet failu values.yaml

Tagad iz­vei­do­jiet jaunu Helm diagrammu, iz­man­to­jot šādu komandu:

nano values.yaml
shell

Tad pie­vie­no­jiet šim failam šādas spe­ci­fi­kā­ci­jas.

Iestatīt cron uzdevumus

Vispirms noteikt cronjobu izpildes intervālu. Unix tipa ope­rē­tājsis­tē­mās cronjobi ir uzdevumi, kas au­to­mā­tis­ki tiek izpildīti fonā pēc iepriekš no­teik­tiem in­ter­vā­liem. Nextcloud vidē uz Ku­ber­ne­tes plat­for­mas tie gal­ve­no­kārt ir uz­tu­rē­ša­nas uzdevumi. Šajā piemērā mēs iestatām, lai cronjobs tiktu izpildīts ik pēc piecām minūtēm. Ja datu apjoms ir lielāks, varētu būt ieteicams veikt biežāku uz­tu­rē­ša­nu. Iz­man­to­jiet šādu kodu:

cronjob:
    annotations: {}
    curlInsecure: false
    enabled: true
    failedJobsHistoryLimit: 5
    image: {}
    schedule: '*/5*     *** '
    successfulJobsHistoryLimit: 2
shell

Aktivizēt HPA

Tagad at­spē­jo­jiet Ho­ri­zon­tal Pod Au­tosca­ler (HPA), kas au­to­mā­tis­ki maina podu skaitu. Ja iz­man­to­jat ReadWri­teOn­ce Nextcloud va­ja­dzī­bām un vēlaties mērogu regulēt manuāli, jums vajadzētu atspējot HPA un kon­cen­trē­ties uz vienu podu. Šī pieeja ir ērtāka, ja piekļuve ir ne­pie­cie­ša­ma tikai ne­dau­dziem lie­to­tā­jiem. At­bil­sto­šais kods ir:

hpa:
    cputhreshold: 60
    enabled: false
    maxPods: 10
    minPods: 1
shell

Pār­rak­stīt attēla tagu

Lai no­dro­ši­nā­tu, ka tiek ņemta vērā pa­šrei­zē­jā Helm versija, pār­rak­stiet attēla tagu. Lai to izdarītu, iz­man­to­jiet šo kodu:

image:
    repositor: nextcloud
    tag: 28.0.2-apache
    pullPolicy: IfNotPresent
shell

Tagad ir izvēlēta versija 28.0.2 vai jaunāka versija.

Iz­vē­lie­ties datu bāzi

Iz­vē­lo­ties datubāzi, jums ir trīs iespējas: MariaDB, PostgreSQL vai SQLite. Šajā piemērā iz­vē­la­mies MariaDB. Kon­fi­gu­rē­jiet šo datubāzi šādi un at­spē­jo­jiet pārējās divas sistēmas:

internalDatabase:
    enabled: false
mariadb:
    db:
        name: nextcloud
        password: db-password
        user: nextcloud
    enabled: true
    master:
        persistence:
            accessMode: ReadWriteOnce
            enabled: true
            size: 8Gi
    replication:
        enabled: false
    rootUser:
        password: root-db-password
        forcePassword: true
postgresql:
    enabled: false
shell

Rādītāju rīks Rī rīks Rī rī rī rī rī rī rī rī rī r

Lai veiktu uz­rau­dzī­bu, iz­man­to­jot Pro­metheus vai Grafana, ie­vie­to­jiet šādu kodu. Tas ir fa­kul­ta­tīvs solis.

metrics:
    enabled: true
    https: false
    image:
        pullPolicy: IfNotPresent
        repository: xperimental/nextcloud-exporter
        tag: v0.3.0
    replicaCount: 1
    service:
        annotations:
            prometheus.io/port: '9205'
            prometheus.io/scrape: 'true'
        labels: {}
        type: ClusterIP
    timeout: 5s
shell

Atļaujiet izmantot savus kon­fi­gu­rā­ci­jas failus

Pēc no­klu­sē­ju­ma Nextcloud kon­fi­gu­rā­ci­jai Ku­ber­ne­tes vidē izmanto arī failu ar nosaukumu config.php. Lai vien­kār­šo­tu šo procesu vai padarītu to elas­tī­gā­ku, varat ievietot savus kon­fi­gu­rā­ci­jas failus, iz­man­to­jot šādu kodu:

nextcloud:
    configs:
        custom.config.php: |-
            <?php
            $CONFIG = array (
                'overwriteprotocol' => 'https',
                'overwrite.cli.url' => 'https://drive.example.com',
                'filelocking.enabled' => 'true',
                'loglevel' => '2',
                'enable_previews' => true,
                'trusted_domains' =>
                     [
                        'nextcloud',
                        'drive.example.com'
                     ]
            );
shell

Aiz­stā­jiet vietas turētāju „example.com“ ar savu domēnu.

Redis kon­fi­gu­rē­ša­na

Lai uzlabotu kešēšanu ar Redis un pa­lie­li­nā­tu kopējo veikt­spē­ju, varat iekļaut pielāgotu kon­fi­gu­rā­ci­jas failu. Pēc no­klu­sē­ju­ma Helm Redis tiek instalēts bez paroles aiz­sar­dzī­bas, taču ir ieteicams pievienot papildu drošības slāni. Iz­man­to­jiet šo kodu, lai kon­fi­gu­rē­tu Redis ar paroles aiz­sar­dzī­bu un integrētu to ar Nextcloud:

redis.config.php: |-
    <?php
    $CONFIG = array (
      'memcache.local' => '\\OC\\Memcache\\Redis',
      'memcache.distributed' => '\OC\Memcache\Redis',
      'memcache.locking' => '\OC\Memcache\Redis',
      'redis' => array(
        'host' => getenv('REDIS_HOST'),
        'port' => getenv('REDIS_HOST_PORT') ?: 6379,
        'password' => getenv('your-password-for-redis')
      )
    );
shell

Uz­gla­bā­ša­nas sistēmas kon­fi­gu­rē­ša­na

Pēdējais kon­fi­gu­rā­ci­jas fails ir pie­vie­nots datu uz­gla­bā­ša­nas backendam S3. Tas kodā ir saglabāts šādi:

s3.config.php: |-
    <?php
    $CONFIG = array (
      'objectstore' => array(
        'class' => '\\OC\\Files\\ObjectStore\\S3',
        'arguments' => array(
        'bucket'     => 'bucket-name',
        'autocreate' => true,
        'key'      => 's3-access-key',
        'secret'     => 's3-secret-key',
        'region'     => 's3-region',
        'hostname'   => 's3-endpoint',
        'use_ssl'    => true,
        'use_path_style' => true
        )
      )
    );
shell

Atvienot Redis kon­fi­gu­rā­ci­ju

Tā kā iepriekš esat pār­rak­stī­jis Redis no­klu­sē­ju­ma kon­fi­gu­rā­ci­ju, tagad tā ir jāatspējo, lai iz­vai­rī­tos no kļūdām, iz­man­to­jot šādu kodu:

defaultConfigs:
    .htaccess: true
    apache-pretty-urls.config.php: true
    apcu.config.php: true
    apps.config.php: true
    autoconfig.php: false
    redis.config.php: false
    smtp.config.php: true
shell

Iestatiet serveri, ad­mi­nis­tra­to­ra vārdu un paroli

Tagad ievadiet servera nosaukumu, ad­mi­nis­tra­to­ra vārdu un at­bil­sto­šo paroli, lai izmantotu Nextcloud Ku­ber­ne­tes vidē. Šim nolūkam iz­man­to­jiet šo kodu:

host: drive.example.com
password: your-password
username: name-of-admin
shell

Aiz­stā­jiet vietu aiz­vie­to­tā­jus ar saviem datiem.

Iestatīt e-pasta pa­zi­ņo­ju­mus

Pēc izvēles varat kon­fi­gu­rēt SMTP pa­kal­po­ju­mu (Simple Mail Transfer Protocol), lai saņemtu pa­zi­ņo­ju­mus no Nextcloud:

mail:
    domain: example.com
    enabled: false
    fromAddress: user
    smtp:
      authtype: LOGIN
      host: example.com
      name: username
      password: your-password 
      port: 465
      secure: ssl
shell

Kon­fi­gu­rē­jiet pa­stā­vī­gās uz­gla­bā­ša­nas disku

Šī datu sa­gla­bā­ša­nas kon­fi­gu­rā­ci­ja ir paredzēta datiem, kurus Nextcloud glabā at­tie­cī­ga­jā datu nesējā. Tas neietekmē jūsu lietotāju datus, kuri tiek regulāri saglabāti S3:

persistence:
    accessMode: ReadWriteOnce
    annotations: {}
    enabled: true
    size: 8Gi
shell

Aizsargāt Redis ar paroli

Ieteicams aizsargāt Redis ar paroli. Tas novērš kļūdas au­ten­ti­fi­kā­ci­jas laikā. Lai to izdarītu, iz­man­to­jiet šādu kodu, at­tie­cī­ga­jās vietās aizstājot savu paroli:

redis:
    enabled: true
    password: 'your-password-for-redis'
    usePassword: true
shell

Ierobežot at­kār­to­ju­mus

Tā kā jūs jau esat at­spē­jo­jis HPA, jums vajadzētu ierobežot iespējamo rep­li­kā­ci­ju skaitu līdz 1:

replicaCount: 1
shell

Nextcloud in­sta­lē­ša­na Ku­ber­ne­tes vidē

Vis­bei­dzot, in­sta­lē­jiet Nexcloud uz Ku­ber­ne­tes un pie­vie­no­jiet arī MariaDB un Redis:

kubectl create ns nextcloud
helm upgrade --install --namespace nextcloud -f your-values.yaml nextcloud nextcloud/nextcloud
shell
Go to Main Menu