一線開(kāi)發(fā)大牛教你如何使用Kubernetes部署分布式集群

使用 Kubernetes 部署分布式集群

在一個(gè)實(shí)際的大型系統(tǒng)中长豁,微服務(wù)架構(gòu)可能由成千上萬(wàn)個(gè)服務(wù)組成吮旅。在發(fā)布一個(gè)系統(tǒng)時(shí)生宛,如果都單純地通過(guò)打包上傳亿柑,再發(fā)布邢疙,工作量無(wú)疑是巨大的,也是不可取的望薄。我們現(xiàn)在已經(jīng)知道了可以通過(guò)Jenkins 幫我們自動(dòng)化完成發(fā)布任務(wù)疟游。但是一個(gè)Java應(yīng)用其實(shí)是比較占用資源的,每個(gè)服務(wù)都發(fā)布到物理宿主機(jī)上面痕支,資源開(kāi)發(fā)是巨大的颁虐,而且每擴(kuò)展一臺(tái)服務(wù)器都需要重復(fù)部署相同的軟件。

容器技術(shù)的出現(xiàn)帶給了我們新的思路卧须。我們可以將服務(wù)打包成鏡像另绩,放到容器中儒陨,通過(guò)容器來(lái)運(yùn)行服務(wù),這樣可以很方便地進(jìn)行分布式管理笋籽,同樣的服務(wù)也可以很方便地進(jìn)行水平擴(kuò)展蹦漠。

Docker是容器技術(shù)方面的佼佼者,它是一個(gè)開(kāi)源容器车海,而Kubernetes (以下簡(jiǎn)稱K8S)是一個(gè)分布式集群方案的平臺(tái)津辩,它和 Docker就是天生的一對(duì)。通過(guò)K8S和Docker的配合容劳,我們很容易搭建分布式集群環(huán)境喘沿。下面,我們就來(lái)看一下Docker和 K8S的誘人之處竭贩。

Docker介紹

Docker是一個(gè)開(kāi)源的容器引擎,我們可以將任何應(yīng)用移植到Docker容器中,然后發(fā)布到任何Linux服務(wù)器上蚜印,也可以實(shí)現(xiàn)虛擬化。在容器技術(shù)出現(xiàn)以前留量,如果我們想要將應(yīng)用發(fā)布到多臺(tái)物理主機(jī)上窄赋,需要在每臺(tái)物理主機(jī)上都部署相同的環(huán)境;而利用容器技術(shù),我們只需要將環(huán)境和應(yīng)用放到容器中楼熄,就可以很方便地發(fā)布到任意物理主機(jī)上忆绰。

由于Docker 底層是基于LXC(即Linux Container )實(shí)現(xiàn)的虛擬化技術(shù),所以Docker只能運(yùn)行在Linux內(nèi)核操作系統(tǒng)中可岂。盡管macOS基于Unix错敢,Docker依然提供了對(duì)macOS的支持,因?yàn)?macOS版的Docker采用了虛擬機(jī)技術(shù)缕粹。

Docker安裝

Docker的安裝非常簡(jiǎn)單稚茅,只需要運(yùn)行如下命令即可:

yuminstall docker -y

安裝完成后,運(yùn)行下面的命令可以啟動(dòng)Docker并設(shè)置開(kāi)機(jī)啟動(dòng):

chkconfigdockeronservice docker start

執(zhí)行下面的命令可以驗(yàn)證安裝是否正確:

dockerrun hello-world

如安裝正確平斩,你將看到以下信息:

Unableto find image "hello-world: latest" locallyTryingto pull repository docker.io/library/hello-world ...latest: Pulling from docker.io/library/hello-world9db2ca6ccaee:Pull completeDigest:sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdcStatus: Downloaded newer image for docker.io/hello-world:latestWARNING:IPv4 forwarding is disabled. Networking will not work.Hellofrom Docker!Thismessage shows that your installation appears to be working correctly.Togenerate this message,Docker took the following steps:1.The Docker client contacted the Docker daemon.2.The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3.The Docker daemon created a new container from that image which runs theexecutablethat produces the output you are currently reading.4.The Docker daemon streamed that output to the Docker client,which sent ittoyour terminal.Totry something more ambitious,you can run an Ubuntu container with:$ docker run -it ubuntu bashShareimages, automate workflows,and more with a free Docker ID:https://hub. docker.com/Formore examples and ideas, visit:https://docs.docker.com/engine/userguide/

Docker 鏡像

前面講Docker概念時(shí)就提到了亚享,我們可以將環(huán)境容器打包到Docker容器中執(zhí)行,而在容器中執(zhí)行的載體就是鏡像绘面。

1.拉取鏡像

通過(guò)命令docker pull就可以從 Docker倉(cāng)庫(kù)中拉取鏡像欺税,Docker 的默認(rèn)倉(cāng)庫(kù)為Docker Hub。那么如何配置國(guó)內(nèi)加速鏡像?

(1)修改/etc/docker/daemon.json揭璃,加入以下內(nèi)容R:

{"registry-mirrors": ["https : / /9cpn8tt6.mirror.aliyuncs.com"] ]}

(2)重啟 Docker晚凿。

我們可以舉個(gè)例子,拉取Java鏡像:

dockerpull java

執(zhí)行該命令后塘辅,Docker 會(huì)默認(rèn)從Docker Hub下載最新的Java鏡像晃虫。由于網(wǎng)絡(luò)原因,可能需要等一段時(shí)間扣墩。當(dāng)出現(xiàn)如下信息后哲银,說(shuō)明鏡像拉取完成:

Digest:sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8cOe9dStatus:Downloaded newer image for docker.io/java: latest

我們還可以指定鏡像版本扛吞,如:

dockerpulljava:7

這樣Docker就會(huì)下載版本為7的Java鏡像。

2.創(chuàng)建鏡像

實(shí)際生產(chǎn)中荆责,我們要將環(huán)境應(yīng)用部署到 Docker 容器中滥比,這就需要?jiǎng)?chuàng)建它的鏡像。鏡像的創(chuàng)建主要有3種方式:基于容器做院、基于本地模板導(dǎo)入和基于Dockerfile文件盲泛。

本書(shū)主要講解基于Dockerfile創(chuàng)建鏡像,因?yàn)閷?shí)際生產(chǎn)中键耕,我們大多數(shù)是通過(guò) Dockerfile來(lái)構(gòu)建應(yīng)用鏡像的寺滚。

我們以Nginx為例,從 Docker Hub拉取Nignx鏡像并改變首頁(yè)內(nèi)容屈雄。(1)編寫(xiě)文件命名為Dockerfile村视,輸入如下內(nèi)容:

FROM nginxRUN echo'<h1>Nginx Hello world!</h1>'>/usr/share/nginx/html/index.html

(2)在 Dockerfile文件所在目錄執(zhí)行以下命令:

dockerbuild -t nginx .

等待一段時(shí)間后,看到以下內(nèi)容:

Successfullybuilt a3c8cee6148b

說(shuō)明鏡像創(chuàng)建成功酒奶。通過(guò)docker images命令可以查看剛才創(chuàng)建的鏡像:

[root@localhost ~]# docker images

REPOSITORYTAG? ? IMAGE ID? ? ? ? ? ? ?? ? CREATED? ? ? ? ? ? ? ?? ? ? ? ?SIZEnginx? ? ? ? ? ? ? ? ?latest? ? b8cd84ec56e7? ? ?About an hour ago? ? ? 109MB

3.查看及搜索鏡像

查看鏡像非常簡(jiǎn)單蚁孔,執(zhí)行以下命令即可:

dockerimages

執(zhí)行后會(huì)看到鏡像列表,如:

此外惋嚎,通過(guò)命令docker search可以搜索指定鏡像杠氢,如:

dockersearch java

我們將看到Docker Hub包含的所有名為Java的鏡像列表:

4.刪除鏡像

我們可以通過(guò)鏡像名或鏡像ID刪除鏡像,基本命令為docker rmi另伍。

例如刪除java:7的鏡像:

dockerrmidocker.io/java:7

或者:

dockerrmi d23bdf5b1b1b

其中 d23bdf5b1b1b為要?jiǎng)h除的鏡像ID鼻百,鏡像ID通過(guò)docker images獲取。

Docker容器

Docker 的另一大核心便是容器质况,前面我們講過(guò)愕宋,創(chuàng)建或拉取的鏡像需要放到容器里面才能運(yùn)行,那么怎么將鏡像運(yùn)行到容器里呢?

1.創(chuàng)建容器和啟動(dòng)容器

容器的創(chuàng)建和啟動(dòng)很簡(jiǎn)單结榄,通過(guò)docker run命令即可,如果輸入的容器名稱不存在囤捻,會(huì)自動(dòng)創(chuàng)建一個(gè)容器臼朗。如果存在,就會(huì)直接啟動(dòng)該容器蝎土。例如啟動(dòng)運(yùn)行上一節(jié)構(gòu)建的Nginx鏡像:

dockerrun-d-p91:80nginx

其中-d表示后臺(tái)運(yùn)行视哑,-p用于指定容器運(yùn)行端口,第一個(gè)端口為物理主機(jī)的端口誊涯,第二個(gè)端口為容器的端口挡毅。因?yàn)橥獠吭L問(wèn)只能訪問(wèn)物理主機(jī)的端口,所以我們需要指定它暴构。

啟動(dòng)完成后跪呈,通過(guò)瀏覽器訪問(wèn)地址“IP:91”可以看到如圖15-1所示的界面段磨。

我們還可以通過(guò)docker ps命令查看啟動(dòng)的容器:

此外,通過(guò)docker ps -a命令能夠查看所有的容器耗绿。

2.進(jìn)入容器和刪除容器

容器創(chuàng)建后可以通過(guò)docker exec命令進(jìn)入容器苹支,如:

dockerexec-it 806d1021575d /bin/bash

刪除容器也很簡(jiǎn)單,通過(guò)命令docker rm即可:

dockerrm 806d1021575d

其中误阻,806d1021575d為容器ID债蜜。注意,啟動(dòng)中的容器是無(wú)法刪除的究反,如果提示刪除失敗寻定,需要先通過(guò)命令停止容器: docker stop容器ID,相反精耐,啟動(dòng)容器的命令為: docker start容器ID特姐。

K8S集群環(huán)境搭建

從本節(jié)開(kāi)始,我們將進(jìn)入一個(gè)非常神奇的世界黍氮,利用K8S快速搭建分布式集群環(huán)境唐含,并實(shí)現(xiàn)分布式系統(tǒng)的部署。K8S全稱Kubernetes沫浆,是谷歌開(kāi)源的一套用于搭建分布式集群應(yīng)用環(huán)境的平臺(tái)捷枯,它基于Docker,和 Docker配合可以很方便地部署分布式應(yīng)用专执。在進(jìn)行K8S分布式集群部署之前淮捆,首先應(yīng)先搭建集群環(huán)境。

環(huán)境準(zhǔn)備

本文集群使用單臺(tái)虛擬機(jī)做演示本股,即將Master和Node都部署到一臺(tái)機(jī)器上攀痊,實(shí)際中可以由多臺(tái)服務(wù)器做集群。虛擬機(jī)在上一章已經(jīng)安裝完成拄显,采用CentOS 64位操作系統(tǒng)苟径,內(nèi)存為2GB。由于我們是在個(gè)人計(jì)算機(jī)上安裝Linux虛擬機(jī)躬审,資源有限棘街,所以用一臺(tái)虛擬機(jī)模擬集群環(huán)境,實(shí)際中的集群環(huán)境搭建和單機(jī)模擬是一樣的操作承边。

下面就是本文虛擬機(jī)的環(huán)境配置遭殉。

IP:172.20.10.2。

操作系統(tǒng):CentOS7.4博助。

內(nèi)存:2GB险污。

集群搭建

首先,我們需要安裝Docker(前面已經(jīng)安裝了Docker富岳,此處省略)蛔糯。然后拯腮,我們來(lái)安裝etcdR,執(zhí)行以下命令:

yuminstall etcd -y

啟動(dòng)etcd:

systemctlstart etcdsystemctlenable etcd

輸入如下命令查看etcd健康狀況:

etcdctl-C http://localhost:2379 cluster-health

如果出現(xiàn)以下內(nèi)容渤闷,說(shuō)明etcd沒(méi)有問(wèn)題:

member8e9e05c52164694dishealthy: got healthy resultfromhttp://localhost:2379clusterishealthy

接著安裝K8S疾瓮,執(zhí)行命令:

yuminstall kubernetes -y

安裝好后,編輯文件/etc/kubernetes/apiserver飒箭,將KUBE_ADMISSION_CONTROL后面的ServiceAccount去掉狼电,如:

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,

LimitRanger,SecurityContextDeny, ResourceQuota"

接下來(lái)分別啟動(dòng)以下程序(Master ):

systemct1start kube-apiserversystemctlenable kube-apiserversystemctlstart kube-controller-managersystemctlenable kube-controller-managersystemctlstart kube-schedulersystemctlenable kube-scheduler

最后,啟動(dòng)Node節(jié)點(diǎn)的程序:

systemctlstart kubeletsystemctlenable kubeletsystemctlstart kube-proxysystemct1enable kube-proxy

這樣一個(gè)簡(jiǎn)單的K8S集群環(huán)境就已經(jīng)搭建完成了弦蹂,我們可以運(yùn)行以下命令來(lái)查看集群狀態(tài):

[root@localhost~]#kubectlgetnoNAMESTATUSAGE127.0.8.1Ready1h

該集群環(huán)境目前還不能很好地工作肩碟,因?yàn)樾枰獙?duì)集群中 pod的網(wǎng)絡(luò)進(jìn)行統(tǒng)一管理,所以需要?jiǎng)?chuàng)建覆蓋網(wǎng)絡(luò)flannel凸椿。

(1)安裝flannel:

yuminstall flannel -y

(2)編輯文件/etc/sysconfig/flanneld削祈,增加以下代碼:

FLANNEL_OPTIONS=" --logtostderr=false --log_dir=/var/log/k8s/flannel/--etcd-prefix=/atomic.io/

network --etcd-endpoints=http:/ / localhost:2379 --iface=ens33"

其中--iface對(duì)應(yīng)的是網(wǎng)卡的名字。

(3)配置etcd中關(guān)于flanneld 的 key

因?yàn)閒lannel使用etcd進(jìn)行配置來(lái)保證多個(gè)flannel實(shí)例之間配置的一致性脑漫,所以需要在etcd上進(jìn)行如下配置:

etcdctl mk /atomic.io/network/config'{"Network" : "10.0.0.0/16" }'

/atomic.io/network/config這個(gè)key與上文/etc/sysconfig/flannel中的配置項(xiàng)是相對(duì)應(yīng)的髓抑,錯(cuò)誤的話啟動(dòng)就會(huì)出錯(cuò)。

Network是配置網(wǎng)段优幸,不能和物理機(jī)IP沖突吨拍,可以任意定義,盡量避開(kāi)物理機(jī)IP段网杆。

(4)啟動(dòng)修改后的flannel羹饰,并依次重啟Docker和 Kubernetes :

systemctlenable flanneldsystemctlstart flanneldservice docker restartsystemctlrestart kube-apiserversystemctlrestart kube-controller-managersystemctl restart kube-schedulersystemct1enable flanneldsystemctlstart flanneldservice docker restartsystemctl restart kubeletsystemctl restart kube-proxy

這樣我們將應(yīng)用部署到Docker容器中時(shí),就可以通過(guò)物理IP訪問(wèn)到容器了碳却。

分布式應(yīng)用部署

本節(jié)中,我們就可以開(kāi)始部署一個(gè)分布式應(yīng)用了昼浦。(實(shí)際中的集群是一個(gè)Master對(duì)應(yīng)多個(gè)Node,通過(guò)K8S會(huì)通過(guò)Master 將 Docker鏡像隨機(jī)分配到不同的Node 中迷帜。)

接下來(lái),以注冊(cè)中心register為例來(lái)講述K8S的應(yīng)用部署色洞。

1.構(gòu)建應(yīng)用鏡像

首先將register打包并上傳到服務(wù)器上冠胯,并編寫(xiě)Dockerfile:

#下載Java 8的鏡像FROM java:8#將本地文件掛到到/tmp目錄VOLUME /tmp#復(fù)制文件到容器ADDregister.jar /register.jar#暴露8101端口EXPOSE8101#配置啟動(dòng)容器后執(zhí)行的命令ENTRYPOINT ["java","-jar"," /register.jar"]

然后通過(guò)docker build命令創(chuàng)建鏡像:

docker build -tregister.

如果構(gòu)建成功,你將看到以下內(nèi)容:

Sending build context to Docker daemon1.019GBStep1/5: FROM java:8--->d23bdf5b1b1bStep2/5: VOLUME /tmp--->[Warning]IPv4 forwarding is disabled. Networking will not work.--- > Running in 63ddece53c5e--->015fedfaf379Removing intermediate container63ddece53c5eStep3/5:ADD register.jar /register.jar---> aaed606aa239Removing intermediate container940f70c5bddeStep4/5:EXPOSE8101--->[warning] IPv4 forwarding is disabled. Networking will not work.---> Running in ca6e30c82996--->22856e75b953Removing intermediate container ca6e30c82996Step5/5:ENTRYPOINT java -jar /register.jar--->[Warning]IPv4 forwarding is disabled.Networking will not work.---> Running in60636581cda9--->901d6123e0b7Removing intermediate container60636581cda9Successfully built901d6123e8b7

這時(shí)執(zhí)行命令docker images就將看到剛才構(gòu)建的鏡像荠察,如:

[root@localhost ~]#docker imagesREPOSITORY? TAG? ? ?IMAGE ID? ? ? ? ? ? ?CREATED? ? ? ? ? SIZEregister? ? ? ? latest9bc4a8542033? ? ? ? About an hour ago712MB

2.利用K8S部署應(yīng)用

(1)創(chuàng)建rc文件register-rc.yaml :

apiVersion: v1kind:ReplicationControllermetadata:name:registerspec:#節(jié)點(diǎn)數(shù),設(shè)置為多個(gè)可以實(shí)現(xiàn)負(fù)載均衡效果replicas:1selector:app:registertemplate:metadata:labels:app: registerspec:containers:-name: register#鏡像名image: register#本地有鏡像就不會(huì)去倉(cāng)庫(kù)拉取imagePullPolicy:IfNotPresentports:-containerPort:8101

在上述文件中置蜀,image為要拉取的鏡像名奈搜,意為拉取register鏡像; imagePullPolicy為鏡像拉取策略馋吗,可選值有 Always(每次都從倉(cāng)庫(kù)拉取一次鏡像秋秤,無(wú)論鏡像是否存在)、Never(不拉取鏡像绍哎,無(wú)論鏡像是否存在)鞋真、工fNotPresent(本地鏡像不存在時(shí)才會(huì)進(jìn)行拉取); containerPort為容器內(nèi)部啟動(dòng)端口。

(2)執(zhí)行以下命令創(chuàng)建pod:

[root@localhost ~]# kubectl create -f register-rc.yamlreplicationcontroller"register"created

(3)創(chuàng)建成功后海诲,我們可以查看pod:

[root@localhost ~]#kubectl get poNAME? ? ? ? ? ? ? ? ? ? ? ? READY? ? ? ? ? STATUS? ? ? ? ? ? ? ? ? ? ? ? ?RESTARTS? ? ? ? AGEregister-lsk2g0/1containerCreating03s

ContainerCreating 提示正在創(chuàng)建中檩互,這時(shí)運(yùn)行命令kubectl describe po register-lsk2g可以查看創(chuàng)建日志:

讀者請(qǐng)注意看加粗字體部分盾似,提示redhat-cat.crt不存在零院,我們先通過(guò)ll命令查看下該文件:

[root@MiNiFi-R3-srV~]#ll/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crtlrwxrwXrwx1rootroot277月3122:53/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt->/etc/rhsm/ca/redhat-uep.pem

可以發(fā)現(xiàn)該文件是個(gè)鏈接文件,它指向的是

/etc/rhsm/ca/redhat-uep.pem撰茎,而這個(gè)文件發(fā)現(xiàn)確實(shí)不存在打洼,那這個(gè)文件又是怎么來(lái)的呢?答案就在這個(gè)路徑里,我們需要安裝rhsm這個(gè)軟件炫惩,執(zhí)行命令安裝:

yum install*rhsm*-y

安裝完成后阿浓,執(zhí)行1l命令查看該文件是否存在:

[ root@MiwiFi-R3-srv ~]# ll

/etc/rhsm/ca/redhat-uep.pemls:無(wú)法訪問(wèn)/etc/rhsm/ca/redhat-uep.pem:沒(méi)有那個(gè)文件或目錄

我們發(fā)現(xiàn),依然沒(méi)有該文件筋蓖。不過(guò)沒(méi)關(guān)系,我們可以手動(dòng)創(chuàng)建:

touch /etc/rhsm/ca/redhat-uep.pem

執(zhí)行完以上操作后蚣抗,我們先將rc刪除瓮下,再創(chuàng)建:

[root@MiwiFi-R3-srv ~]# kubectl delete rc registerreplicationcontroller "register" deleted

[root@MiwiFi-R3-srv ~]# kubectl create -f register-rc.yamlreplicationcontroller "register" created

等待一段時(shí)間后唱捣,重新查看po,我們發(fā)現(xiàn)已經(jīng)成功啟動(dòng):

[root@MiwiFi-R3-srv ~]# kubectl get poNAME? ? ? ? ? ? ? ? ? READY? ? ?STATUS?? ? ? ?RESTARTS?? ?AGEregister-hdmxs1/1Running01m

這時(shí)赂毯,我們還無(wú)法通過(guò)局域網(wǎng)訪問(wèn)應(yīng)用拣宰,還需要?jiǎng)?chuàng)建服務(wù):

(1)創(chuàng)建文件register-svc.yaml :

apiVersion : v1kind:Servicemetadata:name:registerspec:type:NodePortports:-port:8101targetPort:8101nodePort:30001selector:app: register

在上述文件中巡社,nodePort為節(jié)點(diǎn)暴露給外部的端口,即外部是通過(guò)該端口訪問(wèn)容器的肥荔,端口范圍為30000~32767朝群,否則無(wú)法創(chuàng)建服務(wù);targetPort為目標(biāo)端口,即外部通過(guò)nodePort訪問(wèn)容器內(nèi)部開(kāi)啟的哪個(gè)端口.

(2)執(zhí)行命令以創(chuàng)建服務(wù):

[root@MiwiFi-R3-srv ~]# kubectl create -f register-svc.yamlservice"register"created

(3)我們可以查看剛才創(chuàng)建的服務(wù):

[root@localhost~]#kubectlgetsvcNAMECLUSTER-IPEXTERNAL-IPPORT(S)AGEkubernetes10.254.0.1<none>443/TCP1hregister10.254.68.212<nodes>8101:30001/TCP1h

這時(shí)誉帅,我們就可以通過(guò)172.20.10.2:30001訪問(wèn)應(yīng)用了蚜锨,如圖15-2所示慢蜓。

如果訪問(wèn)不到,需要關(guān)閉防火墻:

systemctlstop firewalldiptables-P FORWARD ACCEPT

至此晨抡,通過(guò) K8S部署應(yīng)用就大功告成了饲鄙。在實(shí)際的生產(chǎn)環(huán)境中圆雁,可能會(huì)有一個(gè) Master管理多個(gè)Node伪朽,和本章講述的原理一樣汛蝙,只是對(duì)應(yīng)在不同機(jī)器上而已窖剑。通過(guò) kubectl創(chuàng)建pod和 service,Master會(huì)隨機(jī)分配到不同服務(wù)器上西土,通過(guò)K8S來(lái)部署分布式應(yīng)用就變得非常簡(jiǎn)單需了。

通過(guò)本章的一系列操作,我們可以利用Jenkins實(shí)現(xiàn)系統(tǒng)的自動(dòng)化部署鹅颊,結(jié)合上一章的操作步驟墓造,將本章講解的K8S發(fā)布步驟編寫(xiě)成一個(gè)腳本觅闽,利用Jenkins自動(dòng)執(zhí)行腳本就能完成系統(tǒng)的自動(dòng)化部署。

小結(jié)

通過(guò)本章的學(xué)習(xí)摊求,讀者可以了解到 Docker+K8S搭建集群環(huán)境的全過(guò)程刘离,亦可獨(dú)立完成集群環(huán)境的搭建,并能利用K8S部署微服務(wù)應(yīng)用茧痕。

本文給大家講解的內(nèi)容是springcloud實(shí)戰(zhàn):使用Kubernetes部署分布式集群

原文鏈接:https://www.toutiao.com/a6931957617279451655/?log_from=654df206c814b_1637992875930

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踪旷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舀患,更是在濱河造成了極大的恐慌气破,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件低匙,死亡現(xiàn)場(chǎng)離奇詭異顽冶,居然都是意外死亡售碳,警方通過(guò)查閱死者的電腦和手機(jī)团滥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拱燃,“玉大人力惯,你說(shuō)我怎么就攤上這事父晶。” “怎么了尝苇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵糠溜,是天一觀的道長(zhǎng)直撤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)红柱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任韧骗,我火速辦了婚禮宽闲,結(jié)果婚禮上握牧,老公的妹妹穿的比我還像新娘沿腰。我一直安慰自己狈定,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布措嵌。 她就那樣靜靜地躺著企巢,像睡著了一般让蕾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上笋婿,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天缸濒,我揣著相機(jī)與錄音粱腻,去河邊找鬼。 笑死讨永,一個(gè)胖子當(dāng)著我的面吹牛卿闹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播著角,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吏口,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冰更!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起舟铜,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谆刨,失蹤者是張志新(化名)和其女友劉穎归斤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體她我,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸦难,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年合蔽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了介返。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徘公,靈堂內(nèi)的尸體忽然破棺而出关面,到底是詐尸還是另有隱情十厢,我是刑警寧澤捂齐,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布奠宜,位于F島的核電站,受9級(jí)特大地震影響娩嚼,放射性物質(zhì)發(fā)生泄漏榴都。R本人自食惡果不足惜嘴高,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一和屎、第九天 我趴在偏房一處隱蔽的房頂上張望柴信。 院中可真熱鬧,春花似錦潜沦、人聲如沸绪氛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)臂痕。三九已至猿涨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澡绩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工淀衣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膨桥,地道東北人唠叛。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓艺沼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親调鲸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挽荡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容