在K8S上跑一個helloworld


建立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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM