<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Upgrading PostgreSQL for Auto DevOps > 原文:[https://docs.gitlab.com/ee/topics/autodevops/upgrading_postgresql.html](https://docs.gitlab.com/ee/topics/autodevops/upgrading_postgresql.html) * [Prerequisites](#prerequisites) * [Take your application offline](#take-your-application-offline) * [Backup](#backup) * [Retain persistent volumes](#retain-persistent-volumes) * [Install new PostgreSQL](#install-new-postgresql) * [Restore](#restore) * [Reinstate your application](#reinstate-your-application) # Upgrading PostgreSQL for Auto DevOps[](#upgrading-postgresql-for-auto-devops "Permalink") Auto DevOps 為您的應用程序提供[集群內 PostgreSQL 數據庫](customize.html#postgresql-database-support) . 用于配置 PostgreSQL 的圖表的版本: * 在 GitLab 12.8 及更早版本中為 0.7.1. * 在 GitLab 12.9 及更高版本中可以設置為 0.7.1 至 8.2.1. GitLab 鼓勵用戶將其數據庫遷移到較新的 PostgreSQL 圖表. 本指南提供有關如何遷移 PostgreSQL 數據庫的說明,其中包括: 1. 對數據進行數據庫轉儲. 2. 使用圖表的較新版本 8.2.1 安裝新的 PostgreSQL 數據庫,并刪除舊的 PostgreSQL 安裝. 3. 將數據庫轉儲還原到新的 PostgreSQL 中. ## Prerequisites[](#prerequisites "Permalink") 1. Install [`kubectl`](https://kubernetes.io/docs/tasks/tools/install-kubectl/). 2. 確保您可以使用`kubectl`訪問 Kubernetes 集群. 這取決于 Kubernetes 提供者. 3. 準備停機. 下面的步驟包括使應用程序脫機,以便在創建數據庫轉儲后不修改集群內數據庫. 4. 確保尚未將`POSTGRES_ENABLED`設置為`false` ,因為此設置將刪除任何現有的通道 1 數據庫. 有關更多信息,請參見[檢測到現有的 PostgreSQL 數據庫](index.html#detected-an-existing-postgresql-database) . **提示:**如果已將 Auto DevOps 配置為具有暫存,請考慮先嘗試暫存并還原備份和還原步驟,或者在審閱應用程序中嘗試此步驟. ## Take your application offline[](#take-your-application-offline "Permalink") 如果需要,請使應用程序脫機,以防止在創建數據庫轉儲后修改數據庫. 1. 獲取環境的 Kubernetes 命名空間. 它通常看起來像`<project-name>-<project-id>-<environment>` . 在我們的示例中,名稱空間稱為`minimal-ruby-app-4349298-production` . ``` $ kubectl get ns NAME STATUS AGE minimal-ruby-app-4349298-production Active 7d14h ``` 2. 為了易于使用,請導出名稱空間名稱: ``` export APP_NAMESPACE=minimal-ruby-app-4349298-production ``` 3. 使用以下命令獲取應用程序的部署名稱. 在我們的示例中,部署名稱為`production` . ``` $ kubectl get deployment --namespace "$APP_NAMESPACE" NAME READY UP-TO-DATE AVAILABLE AGE production 2/2 2 2 7d21h production-postgres 1/1 1 1 7d21h ``` 4. 為了防止數據庫被修改,請使用以下命令將副本的副本數設置為 0\. 我們使用上一步中的部署名稱( `deployments/<DEPLOYMENT_NAME>` ). ``` $ kubectl scale --replicas=0 deployments/production --namespace "$APP_NAMESPACE" deployment.extensions/production scaled ``` 5. 如果有的話,還需要將 worker 的副本設置為零. ## Backup[](#backup "Permalink") 1. 獲取 PostgreSQL 的服務名稱. 服務的名稱應以`-postgres` . 在我們的示例中,服務名稱為`production-postgres` . ``` $ kubectl get svc --namespace "$APP_NAMESPACE" NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE production-auto-deploy ClusterIP 10.30.13.90 <none> 5000/TCP 7d14h production-postgres ClusterIP 10.30.4.57 <none> 5432/TCP 7d14h ``` 2. 使用以下命令獲取 PostgreSQL 的 pod 名稱. 在我們的示例中,吊艙名稱為`production-postgres-5db86568d7-qxlxv` . ``` $ kubectl get pod --namespace "$APP_NAMESPACE" -l app=production-postgres NAME READY STATUS RESTARTS AGE production-postgres-5db86568d7-qxlxv 1/1 Running 0 7d14h ``` 3. 通過以下方式連接到吊艙: ``` kubectl exec -it production-postgres-5db86568d7-qxlxv --namespace "$APP_NAMESPACE" bash ``` 4. 連接后,使用以下命令創建轉儲文件. * `SERVICE_NAME`是在上一步中獲得的服務名稱. * `USERNAME`是您為 PostgreSQL 配置的用戶名. 默認值為`user` . * `DATABASE_NAME`通常是環境名稱. * 系統將要求您輸入數據庫密碼,默認`testing-password`是`testing-password` . ``` ## Format is: # pg_dump -h SERVICE_NAME -U USERNAME DATABASE_NAME > /tmp/backup.sql pg_dump -h production-postgres -U user production > /tmp/backup.sql ``` 5. 備份轉儲完成后,使用`Control-D` `exit` Kubernetes exec 進程或`exit` . 6. 使用以下命令下載轉儲文件: ``` kubectl cp --namespace "$APP_NAMESPACE" production-postgres-5db86568d7-qxlxv:/tmp/backup.sql backup.sql ``` ## Retain persistent volumes[](#retain-persistent-volumes "Permalink") 默認情況下,當`Delete`使用該卷的 Pod 和 Pod 聲明時,用于存儲 PostgreSQL 基礎數據的[持久卷](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)將標記為`Delete` . 這很重要,因為當您選擇使用較新的 8.2.1 PostgreSQL 時,會刪除較舊的 0.7.1 PostgreSQL,從而導致永久卷也被刪除. 您可以使用以下命令進行驗證: ``` $ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-0da80c08-5239-11ea-9c8d-42010a8e0096 8Gi RWO Delete Bound minimal-ruby-app-4349298-staging/staging-postgres standard 7d22h pvc-9085e3d3-5239-11ea-9c8d-42010a8e0096 8Gi RWO Delete Bound minimal-ruby-app-4349298-production/production-postgres standard 7d22h ``` 為了保留持久卷,即使刪除了較舊的 0.7.1 PostgreSQL,我們也可以將保留策略更改為`Retain` . 在此示例中,我們通過查看聲明名稱來找到持久卷名稱. 由于我們有興趣保留用于`minimal-ruby-app-4349298`應用程序的階段和生產的卷,因此此處的卷名稱為`pvc-0da80c08-5239-11ea-9c8d-42010a8e0096`和`pvc-9085e3d3-5239-11ea-9c8d-42010a8e0096` : ``` $ kubectl patch pv pvc-0da80c08-5239-11ea-9c8d-42010a8e0096 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/pvc-0da80c08-5239-11ea-9c8d-42010a8e0096 patched $ kubectl patch pv pvc-9085e3d3-5239-11ea-9c8d-42010a8e0096 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' persistentvolume/pvc-9085e3d3-5239-11ea-9c8d-42010a8e0096 patched $ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-0da80c08-5239-11ea-9c8d-42010a8e0096 8Gi RWO Retain Bound minimal-ruby-app-4349298-staging/staging-postgres standard 7d22h pvc-9085e3d3-5239-11ea-9c8d-42010a8e0096 8Gi RWO Retain Bound minimal-ruby-app-4349298-production/production-postgres standard 7d22h ``` ## Install new PostgreSQL[](#install-new-postgresql "Permalink") **注意:**使用較新版本的 PostgreSQL 將刪除較舊的 0.7.1 PostgreSQL. 為了防止基礎數據被刪除,您可以選擇保留[持久卷](#retain-persistent-volumes) .**提示:**您還可以將`AUTO_DEVOPS_POSTGRES_CHANNEL` , `AUTO_DEVOPS_POSTGRES_DELETE_V1`和`POSTGRES_VERSION`變量的[作用域](../../ci/environments/index.html#scoping-environments-with-specs)設置為特定環境,例如`staging` . 1. 將`AUTO_DEVOPS_POSTGRES_CHANNEL`設置為`2` . 選擇使用較新的基于 8.2.1 的 PostgreSQL,并刪除較舊的基于 0.7.1 的 PostgreSQL. 2. 將`AUTO_DEVOPS_POSTGRES_DELETE_V1`設置為非空值. 此標志是防止意外刪除數據庫的保護措施. 3. 將`POSTGRES_VERSION`設置為`11.7` . 這是支持的最低 PostgreSQL 版本. 4. 將`PRODUCTION_REPLICAS`設置為`0` . 對于其他環境, `REPLICAS`在[環境范圍內](../../ci/environments/index.html#scoping-environments-with-specs)使用`REPLICAS` . 5. 如果已設置`DB_INITIALIZE`或`DB_MIGRATE`變量,請刪除變量,或將變量臨時重命名為`XDB_INITIALIZE`或`XDB_MIGRATE`以有效地禁用它們. 6. Run a new CI pipeline for the branch. In this case, we run a new CI pipeline for `master`. 7. 一旦管道成功,您的應用程序現在將安裝新的 PostgreSQL 進行升級. 復制品也將為零,這意味著將不為您的應用程序提供任何流量(以防止新數據進入). ## Restore[](#restore "Permalink") 1. 獲取新 PostgreSQL 的容器名稱,在我們的示例中,容器名稱為`production-postgresql-0` : ``` $ kubectl get pod --namespace "$APP_NAMESPACE" -l app=postgresql NAME READY STATUS RESTARTS AGE production-postgresql-0 1/1 Running 0 19m ``` 2. 將轉儲文件從備份步驟復制到 Pod: ``` kubectl cp --namespace "$APP_NAMESPACE" backup.sql production-postgresql-0:/tmp/backup.sql ``` 3. 連接到吊艙: ``` kubectl exec -it production-postgresql-0 --namespace "$APP_NAMESPACE" bash ``` 4. 連接到 Pod 后,運行以下命令來還原數據庫. * 系統將要求您輸入數據庫密碼,默認`testing-password`是`testing-password` . * `USERNAME`是您為 PostgreSQL 配置的用戶名. 默認值為`user` . * `DATABASE_NAME`通常是環境名稱. ``` ## Format is: # psql -U USERNAME -d DATABASE_NAME < /tmp/backup.sql psql -U user -d production < /tmp/backup.sql ``` 5. 現在,您可以檢查還原完成后是否已正確還原數據. 您可以使用`psql`對數據進行抽查. ## Reinstate your application[](#reinstate-your-application "Permalink") 對數據庫已還原感到滿意后,請運行以下步驟來恢復您的應用程序: 1. 如果先前已刪除或禁用了`DB_INITIALIZE`和`DB_MIGRATE`變量,則將其還原. 2. 將`PRODUCTION_REPLICAS`或`REPLICAS`變量恢復為其原始值. 3. 為分支運行新的 CI 管道. 在這種情況下,我們為`master`運行新的 CI 管道. 管道成功后,您的應用程序應該像以前一樣提供流量.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看