Kubernetes Init 容器:實現 Nginx 和 PHP 對 MySQL 的依賴檢查

在設計 Kubernetes Pod 時,如果需要在啟動?Nginx?和?PHP?之前等待?MySQL?啟動完成,可以通過?初始化容器(initC)?來實現。初始化容器可以用于檢查 MySQL 是否可用,只有在 MySQL 可用后,才會繼續啟動主容器(Nginx 和 PHP)。


設計思路

  1. 初始化容器(initC):

    • 使用一個簡單的腳本或工具(如?mysql-client)來檢查 MySQL 服務是否可用。

    • 如果 MySQL 可用,初始化容器成功退出(返回碼?0),Kubernetes 會繼續啟動主容器。

    • 如果 MySQL 不可用,初始化容器會失敗(返回碼非?0),Kubernetes 會重試,直到 MySQL 可用或超時。

  2. 主容器:

    • 主容器包括 Nginx 和 PHP,它們會在初始化容器成功完成后啟動。


具體實現

1. 編寫初始化容器的腳本

創建一個腳本(如?wait-for-mysql.sh),用于檢查 MySQL 是否可用。腳本內容如下:

#!/bin/sh
# wait-for-mysql.shset -ehost="$1"
port="$2"
shift 2
cmd="$@"until nc -z -v -w30 "$host" "$port"; doecho "Waiting for MySQL to be available at $host:$port..."sleep 5
doneecho "MySQL is up - executing command"
exec $cmd
  • 該腳本使用?nc(netcat)工具檢查 MySQL 的端口是否開放。

  • 如果 MySQL 不可用,腳本會每 5 秒重試一次,直到 MySQL 可用。


2. 創建 Kubernetes Pod 配置文件

以下是一個示例的 Pod 配置文件,包含初始化容器和主容器:

apiVersion: v1
kind: Pod
metadata:name: web-app
spec:initContainers:- name: wait-for-mysqlimage: busybox:latestcommand: ["sh", "-c", "/scripts/wait-for-mysql.sh mysql 3306"]volumeMounts:- name: scriptsmountPath: /scriptscontainers:- name: nginximage: nginx:latestports:- containerPort: 80- name: phpimage: php:7.4-fpmports:- containerPort: 9000volumes:- name: scriptsconfigMap:name: init-scripts

3. 創建 ConfigMap 存儲腳本

將?wait-for-mysql.sh?腳本存儲到 Kubernetes 的 ConfigMap 中:

apiVersion: v1
kind: ConfigMap
metadata:name: init-scripts
data:wait-for-mysql.sh: |#!/bin/shset -ehost="$1"port="$2"shift 2cmd="$@"until nc -z -v -w30 "$host" "$port"; doecho "Waiting for MySQL to be available at $host:$port..."sleep 5doneecho "MySQL is up - executing command"exec $cmd

4. 部署 Pod
  1. 創建 ConfigMap:

    kubectl apply -f init-scripts-configmap.yaml
  2. 創建 Pod:

    kubectl apply -f web-app-pod.yaml

5. 運行邏輯

  1. 初始化容器:

    • 初始化容器會運行?wait-for-mysql.sh?腳本,檢查 MySQL 服務是否可用。

    • 如果 MySQL 可用,初始化容器成功退出。

    • 如果 MySQL 不可用,初始化容器會不斷重試,直到 MySQL 可用或超時。

  2. 主容器:

    • 當初始化容器成功退出后,Kubernetes 會啟動主容器(Nginx 和 PHP)。

    • Nginx 和 PHP 可以安全地連接到 MySQL,因為 MySQL 已經可用。


6. 注意事項

  • MySQL 服務地址: 確保?wait-for-mysql.sh?腳本中的 MySQL 地址(mysql)是正確的。如果 MySQL 運行在另一個 Pod 或外部服務中,需要使用正確的服務名稱或 IP。

  • 超時機制: 如果 MySQL 長時間不可用,初始化容器會一直重試。可以通過設置?activeDeadlineSeconds?來限制初始化容器的最大運行時間。

  • 工具依賴: 確保初始化容器中安裝了?nc(netcat)工具,或者使用其他工具(如?curl?或自定義腳本)來檢查 MySQL 的可用性。


總結

通過初始化容器,可以確保 MySQL 服務可用后再啟動 Nginx 和 PHP。這種方式非常適合依賴外部服務的應用場景,能夠有效避免主容器啟動時依賴服務未就緒的問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74053.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSL/TLS 和 SSH 介紹以及他們的區別

目錄 SSL/TLS SSL/TLS工作原理的核心步驟握手階段(Handshake Protocol)加密通信階段(Encrypted Communication Phase)會話恢復(Session Resumption) SSH SSH 加密機制的核心步驟 SSH 和 SSL 區別 SSL/TLS …

QT二 QT使用generate form 生成常用UI,各種UI控件

一 。沒有使用general form 和 使用 general form 后,file層面和代碼層面的不同比較 file層面的不同 代碼層面的不同, 在 使用了general form之后,在主界面的構造方法中,使用ui->setupUi(this),就完成了所有UI的處理。 而之…

Qt中多線程

在Qt中實現多線程主要有兩種常用方式&#xff1a;基于QThread的子類化和QObjectmoveToThread的Worker模式。以下是詳細說明和示例代碼&#xff1a; 1. 傳統方法&#xff1a;繼承 QThread&#xff08;適用于簡單任務&#xff09; #include <QThread> #include <QDebug…

從PGC到AIGC:海螺AI多模態內容生成系統架構一站式剖析

海螺AI&#xff1a;基于多模態架構的下一代認知智能引擎 海螺AI核心模型架構基礎模型&#xff1a;abab-6.5語音模型&#xff1a;speech-01 視頻生成管線關鍵子系統快速接入海螺AI 藍耘MaaS平臺什么是MaaS平臺&#xff1f;支持的大模型藍耘搭載海螺AI的優勢 實戰應用教程如何注冊…

二分查找上下界問題的思考

背景 最近在做力扣hot100中的二分查找題目時&#xff0c;發現很多題目都用到了二分查找的變種問題&#xff0c;即二分查找上下界問題&#xff0c;例如以下題目&#xff1a; 35. 搜索插入位置 74. 搜索二維矩陣 34. 在排序數組中查找元素的第一個和最后一個位置 它們不同于查找…

android adjust 卸載與重裝監測

想要洞察應用內用戶的留存率,可以通過Adjust 的卸載與重裝進行監測 名詞解釋: 卸載:集成完成后,卸載應用,安裝狀態為:卸載 重裝:如果應用已經卸載,但一段時間后又進行安裝,則會被視為重裝。 ??????:adjust 文件中說到24 小時后,可以再 adjust 控制臺看安裝…

算法系列——有監督學習——4.支持向量機

一、概述 支持向量機&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一種應用范圍非常廣泛的算法&#xff0c;既可以用于分類&#xff0c;也可以用于回歸。 本文將介紹如何將線性支持向量機應用于二元分類問題&#xff0c;以間隔&#xff08;margin&#x…

【Mani_skill】success判斷的核心調用邏輯

1. 可視化調用流程&#xff08;from Deepseek-r1-Cursor&#xff09; [RL算法調用 env.step()]↓ 調用 env.get_info()↓ 調用 env.evaluate() → 返回包含 success 的字典↓ 將 success 存入 info 字典↓ 在 step() 中處理終止條件&#xff1a; terminated success | fail

【圖像處理基石】什么是HDR圖片?

1. 什么是HDR圖片&#xff1f; HDR&#xff08;高動態范圍圖像&#xff0c;High Dynamic Range&#xff09;是一種通過技術手段擴展照片明暗細節的成像方式。以下是關于HDR的詳細說明&#xff1a; 核心原理 動態范圍&#xff1a;指圖像中最亮和最暗區域之間的亮度差。人眼能…

嵌入式筆記 | 正點原子STM32F103ZET6 4 | 中斷補充

1. 外設引腳重映射 1.1 定義 在STM32中&#xff0c;每個外設的引腳都有默認的GPIO端口&#xff0c;但有些引腳可以通過重映射寄存器將功能映射到其他端口。這種機制稱為引腳重映射&#xff0c;主要用于解決引腳復用沖突或優化PCB布線。 1.2 重映射的類型 部分重映射&#x…

如何選擇合適的 AI 模型?(開源 vs 商業 API,應用場景分析)

1. 引言 在 AI 迅猛發展的今天&#xff0c;各類 AI 模型層出不窮&#xff0c;從開源模型&#xff08;如 DeepSeek、Llama、Qwen&#xff09;到商業 API&#xff08;如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini&#xff09;&#xff0c;每種方案都有其優勢與適用…

攻克 3D 模型網站建設難題,看迪威系統優勢

在當今數字化時代&#xff0c;3D 模型廣泛應用于建筑設計、游戲開發、工業制造、文化創意等諸多領域。擁有一個功能強大的 3D 模型網站&#xff0c;對于企業展示產品、設計師分享作品、教育機構開展教學等都具有重要意義。然而&#xff0c;構建這樣一個網站卻并非易事&#xff…

使用uniapp的vite版本進行微信小程序開發,在項目中使用mqtt連接、訂閱、發布信息

1、保證在微信公眾平臺配置socket合法域名 2、項目中使用mqtt 建議在package.json中配置"mqtt": “4.1.0”&#xff0c;使用這個版本的依賴 頁面中引入mqtt并配置連接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用這里面的const state reacti…

【FAQ】HarmonyOS SDK 閉源開放能力 —Map Kit(6)

1.問題描述&#xff1a; 使用華為內置的MapComponent&#xff0c; 發現顯示不出來。查看日志&#xff0c; MapRender底層有報錯。 解決方案&#xff1a; 麻煩按以下步驟檢查下地圖服務&#xff0c;特別是簽名證書指紋那部分。 1.一般沒有展示地圖&#xff0c;可能和沒有配置…

現代復古像素風品牌海報游戲排版設計裝飾英文字體 Psygen — Modern Pixel Font

Psygen 是一種像素化等寬字體&#xff0c;具有強烈的復古未來主義和網絡風格美學。塊狀的、基于網格的字體采用了早期的計算機界面、街機游戲排版和 ASCII 藝術。 該字體支持拉丁文、西里爾文和希臘文腳本&#xff0c;使其適用于多語言設計。擴展的字符集還具有唯一的符號和方…

小科普《DNS服務器》

DNS服務器詳解 1. 定義與核心作用 DNS&#xff08;域名系統&#xff09;服務器是互聯網的核心基礎設施&#xff0c;負責將人類可讀的域名&#xff08;如www.example.com&#xff09;轉換為機器可識別的IP地址&#xff08;如192.0.2.1&#xff09;&#xff0c;從而實現設備間的…

lunar是一款無第三方依賴的公歷 python調用

lunar是一款無第三方依賴的公歷(陽歷)、農歷(陰歷、老黃歷)、佛歷和道歷工具&#xff0c;支持星座、儒略日、干支、生肖、節氣、節日、彭祖百忌、吉神(喜神/福神/財神/陽貴神/陰貴神)方位、胎神方位、沖煞、納音、星宿、八字、五行、十神、建除十二值星、青龍名堂等十二神、黃道…

力扣hot100——三數之和(雙指針)

題目&#xff1a;三數之和 排序 雙指針 本題的難點在于如何去除重復解。 算法流程&#xff1a; 1、特判&#xff0c;對于數組長度 n&#xff0c;如果數組為 null 或者數組長度小于 3&#xff0c;返回 []。 2、對數組進行排序。 3、遍歷排序后數組&#xff1a; &#xff08…

操作系統為ubantu的服務器上部署nginx軟件基礎步驟總結

今天在這里&#xff0c;我們總結一下ubantu的服務器上部署nginx軟件&#xff0c;請按照以下步驟進行安裝&#xff1a; 1、更新包列表&#xff1a; 首先更新你系統中的可用軟件包列表&#xff0c;以確保你可以安裝最新版本。 sudo apt update2、 Ubuntu上更新已安裝軟件包&…

記錄一次,rabbitmq開啟stomp插件之后,還是連不上15674端口的問題

原因是裝在docker 里面的rabbitmq 沒有映射15674端口&#xff0c;需重新刪除容器之后重新運行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本號 進入docker容器開啟插件 docker exec -it rabbitm…