建立docker鏡像
為了方便起見,這里直接使用一個js網頁作為應用,以此創建鏡像
hello world網頁
創建server.js,輸入以下代碼創建helloworld網頁:
var http = require('http');
var handleRequest = function(request, response) {
console.log('Received request for URL: ' + request.url);
response.writeHead(200);
response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);
Dockerfile
創建Dockerfile文件,配置鏡像:
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
其中,FROM是從官方鏡像庫取得node的鏡像,EXPOSE表示暴露本容器的8080端口,COPY將server.js加入容器,CMD為容器中執行的命令
更詳細的Dockerfile寫法見官方文檔
創建鏡像
配置好Dockerfile后,就可以使用docker的build命令根據Dockerfile的內容創建一個鏡像:
docker build -t hello-node:v1 .
這里注意不要遺漏最后的.
在Kubernetes上以該鏡像創建一個POD
在K8S集群配置完畢后,執行
kubectl run hello-node --image=hello-node:v1 --port=8080 --image-pull-policy=Never
即可在K8S上建立一個新的運行剛剛建立的鏡像的POD
但是此時由於POD默認不暴露在外部,因此我們無法觀察到node的輸出,為此需要創建一個service將該POD的端口暴露出來
訪問該POD
Kubernetes Service
Service有幾個種類,默認的是cluster-ip,即只能通過pod在集群內部的IP地址進行對service的訪問
第二種是nodeport,即在每一個Node上暴露出一個端口:nodePort,外部網絡可以通過(任一Node)[NodeIP]:[NodePort]訪問到后端的Service。
第三種是loadbalancer,請求底層雲平台創建一個負載均衡器,將每個Node作為后端,進行服務分發。該模式需要底層雲平台(例如GCE)支持
最簡單的就是直接開啟一個默認的clusterip的service,在master上直接通過集群內部IP訪問helloworld:
kubectl expose deployment hello-node --port=8080 --target-port=8080
其他方式比如NodePort可以通過--type=NodePort
參數指定
進行訪問
在創建好service之后,就可以使用kubectl get service
查看當前運行的service,其中可以看到hello-node的ClusterIP,在瀏覽器中訪問該IP:8080即可看到hello world!