Kubernetes的Endpoints
阿新 • • 發佈:2017-06-10
kuberntes
在之前的博文中,我們演示過如何通過ceph來實現kubernetes的持久存儲,以使得像mysql這種有狀態服務可以在kubernetes中運行並保存數據。這看起來很美妙,然而在實際的生產環境使用中,通過分布式存儲來實現的磁盤在mysql這種IO密集性應用中,性能問題會顯得非常突出。所以在實際應用中,一般不會把mysql這種應用直接放入kubernetes中管理,而是使用專用的服務器來獨立部署。而像web這種無狀態應用依然會運行在kubernetes當中,這個時候web服務器要連接kubernetes管理之外的數據庫,有兩種方式:一是直接連接數據庫所在物理服務器IP,另一種方式就是借助kubernetes的Endpoints直接將外部服務器映射為kubernetes內部的一個服務。
我們來看一個簡單的示例:
apiVersion: v1 kind: Service metadata: name: plat-dev spec: ports: - port: 3306 protocol: TCP targetPort: 3306---apiVersion: v1 kind: Endpoints metadata: name: plat-dev subsets: - addresses: - ip: "10.5.10.109" ports: - port: 3306
這個示例定義了兩種資源對象,分別是Service和Endpoints。其中Service的定義並沒有使用標簽選擇器,而在後面定義了一個與Service同名的Endpoints,以使得它們能自動關聯。Endpoints的subsets中指定了需要連接的外部服務器的IP和端口。
我們可以通過kubectl get svc來進行查看:
[[email protected] EXTERNAL--dev . <none> /
我們可以再啟動一個示例容器,在容器中執行如下操作來嘗試連接外部的服務:
[[email protected] test]# kubectl exec -it nginx /bin/bash [[email protected] nginx]# nslookup plat-dev Server: 10.254.0.100Address: 10.254.0.100#53Name: plat-dev.default.svc.cluster.local Address: 10.254.4.76[[email protected] nginx]# mysql -uxxx -pxxx -hplat-dev Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 349446Server version: 5.6.14 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> show databases;
本文出自 “我的天空” 博客,請務必保留此出處http://sky66.blog.51cto.com/2439074/1934006
Kubernetes的Endpoints