Kubernetes(k8s)集群管理實(shí)戰(zhàn)|kubernetes部署微服務(wù)|k8s架構(gòu)及和核心組件

本篇文章主要核心內(nèi)容:
kubernetes部署Spring Cloud微服務(wù)
Kubernetes架構(gòu)及和核心組件?
kubernetes部署Spring Cloud微服務(wù)
1、項目本身打成jar包或者war包;
2、制作項目鏡像(寫Dockerfile文件);
3、用k8s部署鏡像(命令方式、yaml方式);
4、對外暴露服務(wù);
生成鏡像:
docker build -t spring-cloud-alibaba-consumer -f Dockerfile-consumer .
docker build -t spring-cloud-alibaba-provider -f Dockerfile-provider .
docker build -t spring-cloud-alibaba-gateway -f Dockerfile-gateway .
部署提供者:
(1)kubectl create deployment spring-cloud-alibaba-provider --image=spring-cloud-alibaba-provider --dry-run -o yaml > provider.yaml
(2)kubectl apply -f provider.yaml
部署消費(fèi)者:
(1)kubectl create deployment spring-cloud-alibaba-consumer --image=spring-cloud-alibaba-consumer --dry-run -o yaml > consumer.yaml
(2)kubectl apply -f consumer.yaml
(3)kubectl expose deployment spring-cloud-alibaba-consumer --port=9090 --target-port=9090 --type=NodePort
部署網(wǎng)關(guān):
(1)kubectl create deployment spring-cloud-alibaba-gateway --image=spring-cloud-alibaba-gateway --dry-run -o yaml > gateway.yaml
(2)kubectl apply -f gateway.yaml
(3)kubectl expose deployment spring-cloud-alibaba-gateway --port=80 --target-port=80 --type=NodePort
在網(wǎng)關(guān)上面部署ingress,統(tǒng)一入口;
按照上面講解ingress暴露nginx的步驟進(jìn)行就可以;
kubectl get service -n ingress-nginx
kubectl get deploy -n ingress-nginx
kubectl get pods -n ingress-nginx
注意:deploy.yaml文件里面鏡像從本地拉??;
containers:
??????- image: 38-springboot-k8s-1.0.0-jar
????????name: 38-springboot-k8s-1-0-0-jar-8ntrx
????????imagePullPolicy: Never
把鏡像拉取策略改為Never;
看pod詳情:
kubectl describe pods spring-cloud-alibaba-consumer-5d557f4765-d27d9
看pod運(yùn)行日志:
kubectl logs -f spring-cloud-alibaba-consumer-8697896544-g6rsf
Kubernetes架構(gòu)及和核心組件?

API server是所有請求的唯一入口;
api server管理所有的事務(wù),并把信息記錄到etcd數(shù)據(jù)庫中,etcd有一個自動服務(wù)發(fā)現(xiàn)的特性機(jī)制,etcd會搭建有三個節(jié)點(diǎn)的集群,實(shí)現(xiàn)三副本;
scheduler 調(diào)度器用來調(diào)度資源,查看業(yè)務(wù)節(jié)點(diǎn)的資源情況,確定在哪個node上創(chuàng)建pod,把指令告知給api server;
控制管理器controller-manager管理pod;
pod可以分為有狀態(tài)和無狀態(tài)的pod,一個pod里最好只放一個容器;
api server把任務(wù)下發(fā)給業(yè)務(wù)節(jié)點(diǎn)的kubelet去執(zhí)行;
客戶訪問通過kube-proxy去訪問pod;
pod下面的不一定是docker,還有別的容器;
一般pod中只包含一個容器,除了一種情況除外,那就是elk,elk會在pod內(nèi)多放一個logstash去收集日志;
kubernetes各個組件及功能
1、master組件
kube-apiserver
kubernetes api,集群的統(tǒng)一入口,各組件之間的協(xié)調(diào)者,以restful api提供接口服務(wù),所有對象資源的增刪改查和監(jiān)聽操作都交給apiserver處理后在提交給etcd存儲記錄;
kube-controller-manager
處理集群中常規(guī)的后臺任務(wù),一種資源對應(yīng)一個控制器,controller-manager就是負(fù)責(zé)管理這些控制器的;
kube-scheduler
根據(jù)調(diào)度算法為新創(chuàng)建的pod選擇一個node節(jié)點(diǎn),可以任意部署,可以部署在同一個節(jié)點(diǎn)上,也可以部署在不同節(jié)點(diǎn)上;
etcd
分布式鍵值存儲系統(tǒng),用戶保存集群狀態(tài)數(shù)據(jù),比如pod、service等對象信息;
2、node組件
kubelet
kubelet時master在node節(jié)點(diǎn)上的代理agent,管理本node運(yùn)行容器的生命周期,比如創(chuàng)建容器、pod掛載數(shù)據(jù)卷、下載sercet、獲取容器和節(jié)點(diǎn)狀態(tài)等工作,kubelet將每個pod轉(zhuǎn)換成一組容器;
kube-proxy
在node節(jié)點(diǎn)上實(shí)現(xiàn)pod的網(wǎng)絡(luò)代理,維護(hù)網(wǎng)絡(luò)規(guī)則和四層的負(fù)載均衡工作;
docker
容器引擎,運(yùn)行容器;
kubernetes核心概念
pod
最小部署單元;
一組容器的集合;
一個pod中的容器共享網(wǎng)絡(luò)命名空間;
pod是短暫的;
controllers
replicaset:確保預(yù)期的pod副本數(shù)量;
deployment:無狀態(tài)應(yīng)用部署,比如nginx、apache,一定程度上的增減不會影響客戶體驗;
statefulset:有狀態(tài)應(yīng)用部署,是獨(dú)一無二型的,會影響到客戶的體驗;
daemonset:確保所有node運(yùn)行同一個pod,確保pod在統(tǒng)一命名空間;
job:一次性任務(wù);
cronjob:定時任務(wù);
service
防止pod失聯(lián);
定義一組pod的訪問策略;
確保了每個pod的獨(dú)立性和安全性;
storage
volumes
persistent volumes
pollcies策略
resource quotas
其他
label:標(biāo)簽,附加到某個資源上,用戶關(guān)聯(lián)對象、查詢和篩選;
namespaces:命名空間,將對象從邏輯上隔離;
annotations:注釋;
?
Kubectl:k8s提供的終端控制命令;
Kubeadm:可以用來初始化或加入一個k8s集群;
Kubernetes,點(diǎn)擊以下實(shí)戰(zhàn)教程,帶你快速入門Kubernetes!
