Kubernetes 下的程式設計及佈署流程

事前準備

$>kubectl cluster-info
// 要看到成功執行的訊息,才算安裝完成

撰寫程式(以node.js為範例)

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

FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js

建立應用程式 container image

docker build -t hello-node:v1 .

建立佈署(Kubernetes Deployment)

create deployment

$>kubectl version // 查看版本
$>kubectl cluster-info  // 查看目前cluster資訊
$>kubectl get nodes  // 查看目前 nodes
// 佈署 POD 中的  app
$>kubectl run hello-node --image=docker.io/justjii/hello-node:v1 --port=8080

檢視佈署是否成功

$>kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-node   1         1         1            1           3m

Pods overview

檢視POD

$>kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-node-714049816-ztzrb   1/1       Running   0          6m

建立服務(Service)

由於建立POD之後,並無法對外開始服務,因此,需要透過Kubernetes service來將此container開放並對外提供服務。

kubectl expose deployment hello-node --type=LoadBalancer

查看服務是否已建立

$>kubectl get services
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-node   10.0.0.71    <pending>     8080/TCP   6m
kubernetes   10.0.0.1     <none>        443/TCP    14d

更新程式內容

docker build -t hello-node:v2 .
kubectl set image deployment/hello-node hello-node=hello-node:v2
kubectl  service hello-node

移除服務

kubectl delete service hello-node
kubectl delete deployment hello-node