国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

帶你理解Kubernetes,部署一個Node應(yīng)用

qqlcbb / 3174人閱讀

摘要:應(yīng)用實例創(chuàng)建完成后,會持續(xù)監(jiān)視這些實例。創(chuàng)建時,會創(chuàng)建了一個來托管應(yīng)用。通過請求,可以從集群的外部訪問一個服務(wù)。使用云提供商的負載均衡器如果支持,可以向外部暴露服務(wù)。使用在中部署第一個應(yīng)用本文以為例進行。目標(biāo)是將簡單的應(yīng)用部署在上運行。

Kubernetes是什么?

Kubernetes是容器集群管理系統(tǒng),是一個開源的平臺,可以實現(xiàn)容器集群的自動化部署、自動擴縮容、維護等功能??梢栽谖锢砘蛱摂M機的Kubernetes集群上運行容器化應(yīng)用,Kubernetes能提供一個以“容器為中心的基礎(chǔ)架構(gòu)”。如果你曾經(jīng)用過Docker容器技術(shù)部署容器,那么可以將Docker看成Kubernetes內(nèi)部使用的低級別組件。Kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術(shù)。

通過Kubernetes你可以:

自動化容器的部署和復(fù)制

快速擴展應(yīng)用

將容器組織成組,并且提供容器間的負載均衡

無縫對接新的應(yīng)用功能

想理解Kubernetes集群,需要先搞明白其中的幾個重要概念。

Deployment

Deployment負責(zé)創(chuàng)建和更新應(yīng)用,當(dāng)創(chuàng)建Deployment后,Kubernetes master 會將Deployment創(chuàng)建好的應(yīng)用實例調(diào)度到集群中的各個節(jié)點。
應(yīng)用實例創(chuàng)建完成后,Kubernetes Deployment Controller會持續(xù)監(jiān)視這些實例。如果管理實例的節(jié)點被關(guān)閉或刪除,那么 Deployment Controller將會替換它們,實現(xiàn)自我修復(fù)能力。

Pod

創(chuàng)建Deployment時,Kubernetes會創(chuàng)建了一個Pod來托管應(yīng)用。Pod是Kubernetes中一個抽象化概念,由一個或多個容器組合在一起得共享資源。Pod是獨立運行的基本單位,包含一組容器和卷。同一個Pod里的容器共享同一個網(wǎng)絡(luò)命名空間,可以使用localhost互相通信。Pod是短暫的,不是持續(xù)性實體。
當(dāng)在Kubernetes上創(chuàng)建Deployment時,該Deployment將會創(chuàng)建具有容器的Pods(而不會直接創(chuàng)建容器),每個Pod將被綁定調(diào)度到Node節(jié)點上,并一直保持在那里直到被終止(根據(jù)配置策略)或刪除。在節(jié)點出現(xiàn)故障的情況下,群集中的其他可用節(jié)點上將會調(diào)度之前相同的Pod。

Node

一個Pod總是在一個(Node)節(jié)點上運行,Node是Kubernetes中的工作節(jié)點,可以是虛擬機或物理機。每個Node由 Master管理,Node上可以有多個pod,Kubernetes Master會自動處理群集中Node的pod調(diào)度,同時Master的自動調(diào)度會考慮每個Node上的可用資源。

Replication Controller

Replication Controller確保任意時間都有指定數(shù)量的Pod“副本”在運行。如果為某個Pod創(chuàng)建了Replication Controller并且指定3個副本,它會創(chuàng)建3個Pod,并且持續(xù)監(jiān)控它們。如果某個Pod不響應(yīng),那么Replication Controller會替換它。如果在運行中將副本總數(shù)改為5,Replication Controller會立刻啟動2個新Pod,保證總數(shù)為5。

Service

事實上,Pod是有生命周期的。當(dāng)一個工作節(jié)點(Node)銷毀時,節(jié)點上運行的Pod也會銷毀,然后通過ReplicationController動態(tài)創(chuàng)建新的Pods來保持應(yīng)用的運行。
舉個例子,考慮一個圖片處理 backend,它運行了3個副本,這些副本是可互換的 —— 前端不需要關(guān)心它們調(diào)用了哪個 backend 副本。也就是說,Kubernetes集群中的每個Pod都有一個獨立的IP地址,因此需要有一種方式來自動協(xié)調(diào)各個Pod之間的變化,以便應(yīng)用能夠持續(xù)運行。
Kubernetes中的Service 是一個抽象的概念,它定義了Pod的邏輯分組和一種可以訪問它們的策略,讓你的這組Pods能被Service訪問。借助Service,可以方便的實現(xiàn)服務(wù)發(fā)現(xiàn)與負載均衡。
Service可以被指定四種類型:

ClusterIP - 在集群中內(nèi)部IP上暴露服務(wù)。此類型使Service只能從群集中訪問。

NodePort - 通過每個 Node 上的 IP 和靜態(tài)端口(NodePort)暴露服務(wù)。NodePort 服務(wù)會路由到 ClusterIP 服務(wù),這個 ClusterIP 服務(wù)會自動創(chuàng)建。通過請求 :,可以從集群的外部訪問一個 NodePort 服務(wù)。

LoadBalancer - 使用云提供商的負載均衡器(如果支持),可以向外部暴露服務(wù)。外部的負載均衡器可以路由到 NodePort 服務(wù)和 ClusterIP 服務(wù)。(一般常用此類型向外暴露端口,并做負載均衡)

ExternalName - 通過返回 CNAME 和它的值,可以將服務(wù)映射到 externalName 字段的內(nèi)容,沒有任何類型代理被創(chuàng)建。

Label

你可以賦予標(biāo)簽(鍵值對)來標(biāo)識你的Pod、Deployment、Service。之后就可以通過選擇標(biāo)簽來做具體的指令。

使用Minikube在kubernetes中部署第一個應(yīng)用

本文以 MAC OS X 為例進行。目標(biāo)是將簡單的Hello World Node.js應(yīng)用部署在Kubernetes上運行。因此你可能需要Node.js環(huán)境。
Minikube 是一個使我們很容易在本地運行 kubernetes 的工具,由Kubernetes社區(qū)開發(fā)。

準(zhǔn)備工作

Node.js

Docker

VM - VirtualBox

Minikube

Kubectl

對于Node.js、Docker、VirtualBox的安裝,在這里不做詳細介紹。可以直接到官網(wǎng)下載安裝最新穩(wěn)定版本。

創(chuàng)建Minikube集群

使用curl下載并安裝最新版本Minikube:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && 
  chmod +x minikube && 
  sudo mv minikube /usr/local/bin/

使用Homebrew下載kubectl命令管理工具:

$ brew install kubectl

默認的VM驅(qū)動程序VirtualBox,因此可直接啟動Minikube:

$ minikube start

接下來會打印出類似信息...

Starting local Kubernetes v1.9.4 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

驗證kubectl是否安裝成功:

$ kubectl cluster-info

會打印出類似的信息:

Kubernetes master is running at https://192.168.99.100:8443
創(chuàng)建Node.js應(yīng)用

編寫應(yīng)用程序。將這段代碼保存在一個名為hellonode的文件夾中,文件名server.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(3000);

啟動應(yīng)用:

$ node server.js

現(xiàn)在可以在 http://localhost:3000 中查看到“Hello World!”消息。
Ctrl-C停止正在運行的Node.js服務(wù)器。

創(chuàng)建Docker容器鏡像

在hellonode文件夾中創(chuàng)建一個Dockerfile命名的文件。

FROM node:8.10.0
EXPOSE 3000
COPY server.js .
CMD node server.js

我們使用Minikube,而不是將Docker鏡像push到registry,可以使用與Minikube VM相同的Docker主機構(gòu)建鏡像,以使鏡像自動存在。為此,請確保使用Minikube Docker守護進程:

$ eval $(minikube docker-env)

注意:如果不在使用Minikube主機時,可以通過運行eval $(minikube docker-env -u)來撤消此更改。

使用Minikube Docker守護進程build Docker鏡像:

$ docker build -t hello-node:v1 .
創(chuàng)建Deployment

Kubernetes Deployment 是檢查Pod的健康狀況,如果它終止,則重新啟動一個Pod的容器,Deployment管理Pod的創(chuàng)建和擴展。

使用kubectl run命令創(chuàng)建Deployment來管理Pod。

$ kubectl run hello-node --image=hello-node:v1 --port=3000

查看Deployment:

$ kubectl get deployments

輸出:

NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-node   1         1         1            1           5s

查看Pod:

$ kubectl get pods

輸出:

NAME                          READY     STATUS    RESTARTS   AGE
hello-node-6ddb5576c9-644xn   1/1       Running   0          1m

查看deployment的詳細信息:

$ kubectl describe deployment
創(chuàng)建Service

Pod只能通過Kubernetes群集內(nèi)部IP訪問。要使hello-node容器能從Kubernetes虛擬網(wǎng)絡(luò)外部訪問,須要使用Kubernetes Service暴露Pod。

我們可以使用kubectl expose命令將Pod暴露到外部環(huán)境:

$ kubectl expose deployment hello-node --type=LoadBalancer

查看Service:

$ kubectl get services

輸出:

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hello-node   LoadBalancer   10.110.94.17        8080:32081/TCP   2m
kubernetes   ClusterIP      10.96.0.1              443/TCP          6d

查看詳細信息:

$ kubectl describe service hello-node

輸出:

Name:                     hello-node
Namespace:                default
Labels:                   run=hello-node
Annotations:              
Selector:                 run=hello-node
Type:                     LoadBalancer
IP:                       10.110.94.17
Port:                       8080/TCP
TargetPort:               8080/TCP
NodePort:                   32081/TCP
Endpoints:                172.17.0.5:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   

通過--type=LoadBalancer 來在群集外暴露Service,在支持負載均衡的云提供商上,將配置外部IP(EXTERNAL-IP,在Minikube顯示為:)地址來訪問Service。在Minikube上,該LoadBalancer type使服務(wù)可以通過minikube Service 命令訪問。

$ minikube service hello-node

將打開瀏覽器,在本地IP地址為應(yīng)用提供服務(wù),顯示“Hello World”的消息。

可以查看到日志:

$ kubectl logs   //exp: kubectl logs hello-node-6ddb5576c9-644xn
// 可通過 kubectl get pods 查看pod-name
擴展實例

根據(jù)線上需求,擴容和縮容是常會遇到的問題。Scaling 是通過更改 Deployment 中的副本數(shù)量實現(xiàn)的。一旦有多個實例,就可以滾動更新,而不會停止服務(wù)。通過kubectl scale指令來擴容和縮容。

$ kubectl scale deployments/hello-node --replicas=4

在查看pods:

$ kubectl get pods

輸出:

NAME                         READY     STATUS    RESTARTS   AGE
hello-node-9f5f775d6-6qdmn   1/1       Running   0          3s
hello-node-9f5f775d6-9mrm6   1/1       Running   0          3s
hello-node-9f5f775d6-jxb8z   1/1       Running   0          3s
hello-node-9f5f775d6-tx8kg   1/1       Running   0          11m

總共有4個實例,那么就可通過Service 的 --type=LoadBalancer 進行負載均衡。

更新應(yīng)用程序

編輯server.js文件以返回新消息:

response.end("Hello World Again!");

docker build新版本鏡像:

$ docker build -t hello-node:v2 .

Deployment更新鏡像:

$ kubectl set image deployment/hello-node hello-node=hello-node:v2

再次在瀏覽器查看消息:

$ minikube service hello-node
清理刪除

刪除在群集中創(chuàng)建的資源:

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

查看pods:

$ kubectl get pods

輸出:

NAME                         READY     STATUS        RESTARTS   AGE
hello-node-9f5f775d6-6qdmn   1/1       Terminating   0          6m
hello-node-9f5f775d6-9mrm6   1/1       Terminating   0          6m
hello-node-9f5f775d6-jxb8z   1/1       Terminating   0          6m
hello-node-9f5f775d6-tx8kg   1/1       Terminating   0          18m

全部在停止中... 稍等一分鐘,再查看,輸出 No resources found.

停止
$ minikube stop

輸出:

Stopping local Kubernetes cluster...
Machine stopped.

完畢

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27247.html

相關(guān)文章

  • 帶你理解Kubernetes,部署一個Node應(yīng)用

    摘要:應(yīng)用實例創(chuàng)建完成后,會持續(xù)監(jiān)視這些實例。創(chuàng)建時,會創(chuàng)建了一個來托管應(yīng)用。通過請求,可以從集群的外部訪問一個服務(wù)。使用云提供商的負載均衡器如果支持,可以向外部暴露服務(wù)。使用在中部署第一個應(yīng)用本文以為例進行。目標(biāo)是將簡單的應(yīng)用部署在上運行。 Kubernetes是什么? Kubernetes是容器集群管理系統(tǒng),是一個開源的平臺,可以實現(xiàn)容器集群的自動化部署、自動擴縮容、維護等功能??梢栽谖?..

    lbool 評論0 收藏0
  • 零基礎(chǔ)入門│帶你理解Kubernetes

    摘要:的核心是以容器為中心的管理環(huán)境。命名空間提供了名稱范圍。換句話說,確?;蛲惤M始終可用。用于管理有狀態(tài)應(yīng)用程序,它管理一組的部署和擴展,并提供有關(guān)這些的排序和唯一性的保證。 條分縷析帶你充分理解Kubernetes的各個細節(jié)與部分:它是什么,它如何解決容器編排問題,它包含哪些你必須掌握的關(guān)鍵對象,以及如何快速上手部署使用Kubernetes。 showImg(https://segme...

    DevWiki 評論0 收藏0
  • K3s初探:Rancher架構(gòu)師帶你嘗鮮史上最輕量Kubernetes發(fā)行版

    摘要:發(fā)布不到兩天,上數(shù)已近,這個業(yè)界大熱的史上最輕量的開源發(fā)行版,你試過了沒資深架構(gòu)師來教你走出嘗鮮第一步使用教程在此前言昨天,正式發(fā)布了一款史上最輕量的開源發(fā)行版。大小只有,極簡,輕便,易于使用。 發(fā)布不到兩天,GitHub上Star數(shù)已近3000,這個業(yè)界大熱的、史上最輕量的開源Kubernetes發(fā)行版,你試過了沒? Rancher資深架構(gòu)師來教你走出嘗鮮第一步!使用教程在此! sh...

    neuSnail 評論0 收藏0
  • 混合云環(huán)境中擴展Kubernetes的挑戰(zhàn)及方案

    摘要:本文分享了擴展以及管理混合云環(huán)境時可能遇到的挑戰(zhàn),以及如何簡單高效地完成擴展??缭茢U展的挑戰(zhàn)你已經(jīng)決定使用云了,所以讓我們回過頭來思考一下最初的問題。節(jié)點組件是中的。在向上或向下擴展或調(diào)整集群大小時,為部署命中公有,響應(yīng)狀態(tài)代碼始終為。 流量突增時,我們需要擴展應(yīng)用程序以滿足用戶需求。本文分享了擴展Kubernetes以及管理混合云環(huán)境時可能遇到的挑戰(zhàn),以及如何簡單高效地完成Kuber...

    wwq0327 評論0 收藏0
  • 一文帶你重新認識 Docker 與 Kubernetes

    摘要:公司始于名為的平臺即服務(wù)供應(yīng)商??缍鄠€機器之間協(xié)調(diào)這些容器需要額外的工具,這稱之為容器編排。的核心優(yōu)勢是為應(yīng)用程序開發(fā)人員提供了用于編排無狀態(tài)容器的強大工具。有無數(shù)的文章都在討論和比較Docker、Kubernetes 以及Mesos。如果你是初學(xué)者,那么你可能會認為這三個開源項目正為了稱霸容器界而殊死搏斗。雖然這三種技術(shù)都使得使用容器部署、管理和伸縮應(yīng)用成為可能,但實際上它們各自解決了不同...

    baishancloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<