官术网_书友最值得收藏!

1.3.2 啟動MySQL服務

首先,為MySQL服務創建一個Deployment定義文件mysql-deploy.yaml,下面給出了該文件的完整內容和說明:

img

以上YAML定義文件中的kind屬性用來表明此資源對象的類型,比如這里的屬性值表示這是一個Deployment;spec部分是Deployment的相關屬性定義,比如spec.selector是Deployment的Pod選擇器,符合條件的Pod實例受到該Deployment的管理,確保在當前集群中始終有且僅有replicas個Pod實例在運行(這里設置replicas=1,表示只能運行一個MySQL Pod實例)。當在集群中運行的Pod數量少于replicas時,Deployment控制器會根據在spec.template部分定義的Pod模板生成一個新的Pod實例,spec.template.metadata.labels指定了該Pod的標簽,labels必須匹配之前的spec.selector。

創建好mysql-deploy.yaml文件后,為了將它發布到Kubernetes集群中,我們在Master上運行如下命令:

img

接下來,運行kubectl命令查看剛剛創建的Deployment:

img

查看Pod的創建情況時,可以運行下面的命令:

img

可以看到一個名稱為mysql-85f4b4cdf4-k97wh的Pod實例,這是Kubernetes根據mysql這個Deployment的定義自動創建的Pod。由于Pod的調度和創建需要花費一定的時間,比如需要確定調度到哪個節點上,而且下載Pod所需的容器鏡像也需要一段時間,所以一開始Pod的狀態為Pending。在Pod成功創建啟動完成后,其狀態最終會更新為Running。

我們可以在Kubernetes節點的服務器上通過docker ps指令查看正在運行的容器,發現提供MySQL服務的Pod容器已創建且正常運行,并且MySQL Pod對應的容器多創建了一個Pause容器,該容器就是Pod的根容器。

img
img

最后,創建一個與之關聯的Kubernetes Service—MySQL的定義文件(文件名為mysql-svc.yaml),完整的內容和說明如下:

img

其中,metadata.name是Service的服務名(ServiceName);spec.ports屬性定義了Service的虛端口;spec.selector確定了哪些Pod副本(實例)對應本服務。類似地,我們通過kubectl create命令創建Service對象:

img

運行kubectl get命令,查看剛剛創建的Service對象:

img

可以發現,MySQL服務被分配了一個值為10.245.161.22的ClusterIP地址(在不同環境中分配的IP地址可能不同)。隨后,在Kubernetes集群中新創建的其他Pod就可以通過Service的ClusterIP+端口號3306來連接和訪問它了。

通常,ClusterIP地址是在Service創建后由Kubernetes系統自動分配的,其他Pod無法預先知道某個Service的ClusterIP地址,因此需要一個服務發現機制來找到這個服務。為此,Kubernetes最初巧妙地使用了Linux環境變量(Environment Variable)來解決這個問題。根據Service的唯一名稱,容器可以從環境變量中獲取Service對應的ClusterIP地址和端口號,從而發起TCP/IP連接請求。

主站蜘蛛池模板: 抚宁县| 慈利县| 舟山市| 闸北区| 陕西省| 宣化县| 大洼县| 阿克陶县| 呼伦贝尔市| 青冈县| 鄂尔多斯市| 阿合奇县| 蓬溪县| 阳西县| 丰县| 伊通| 瑞丽市| 沐川县| 厦门市| 阳曲县| 齐河县| 运城市| 北碚区| 阿城市| 广河县| 新建县| 改则县| 长顺县| 阿克陶县| 隆化县| 南澳县| 澄江县| 报价| 修水县| 平江县| 叙永县| 屏边| 黑龙江省| 广水市| 马关县| 大竹县|