一、內(nèi)容回顧
二巡莹、service是什么
三司志、pod與service的關(guān)系
四、service定義與創(chuàng)建
五降宅、service三種類型
六骂远、service代理模式
七、service?DNS名稱
一腰根、內(nèi)容回顧
1激才、k8s基本使用
a、k8s集群架構(gòu)及各個(gè)組件作用
b、kubectl管理集群
c瘸恼、namespace?資源隔離劣挫,并進(jìn)一步實(shí)現(xiàn)權(quán)力控制
2、Pod
a钞脂、基本管理:?存在意義揣云,健康檢查,容器配額冰啃,環(huán)境變量
b、調(diào)度:創(chuàng)建一個(gè)pod工作流程并擴(kuò)展創(chuàng)建一個(gè)deployment工作流程刘莹;nodeSelector/nodeAffinity,污點(diǎn)和污點(diǎn)容忍阎毅;resource,request
3点弯、常用控制器
a扇调、deployment:部署無(wú)狀態(tài)應(yīng)用(如微服務(wù),API抢肛,網(wǎng)站)狼钮,滾動(dòng)升級(jí),RS控制器(管理Pod副本數(shù)捡絮,管理發(fā)布和回滾)
b熬芜、daemonset:在每個(gè)節(jié)點(diǎn)部署一個(gè)pod
c、job福稳、cronjob:一次性任務(wù)和定時(shí)任務(wù)
二涎拉、service是什么
1、主要解決Pod的動(dòng)態(tài)變化的圆,提供統(tǒng)一訪問(wèn)入口:
a鼓拧、防止Pod失聯(lián),準(zhǔn)備找到提供同一個(gè)服務(wù)的Pod(服務(wù)發(fā)現(xiàn))
b越妈、定義一組Pod的訪問(wèn)策略(負(fù)載均衡)
三季俩、pod與service的關(guān)系
a、service通過(guò)標(biāo)簽關(guān)聯(lián)一組pod
b梅掠、service使用iptables或者ipvs為一組pod提供負(fù)載均衡能力
c酌住、獲取所有標(biāo)簽
# kubectl get pods --show-labels
d、獲取指定標(biāo)簽
# kubectl get pods -l app=dev-market-trade
注:
service中的標(biāo)簽通過(guò)與pod中的
template:
? ? metadata:
? ? ? labels:
這個(gè)標(biāo)簽一致瓤檐,達(dá)到servcie關(guān)聯(lián)到相應(yīng)的pod赂韵。
四、service定義與創(chuàng)建
1挠蛉、定義
2祭示、創(chuàng)建
#?kubectl apply -f service.yaml
3、查看service
# kubectl get service
4、查看幫助
# kubectl expose --help
5质涛、獲取一個(gè)標(biāo)準(zhǔn)的service文件
# kubectl get deployment
# kubectl expose deployment dev-market-administration-intelligent-oilgas-system --port=80 --target-port=80 --dry-run=client -o yaml > /tmp/serivce.yaml
刪除標(biāo)紅字段即為標(biāo)準(zhǔn)serviceyaml文件
6稠歉、刪除services
#?kubectl get svc
# kubectl delete svc?dev-market-administration-intelligent-oilgas-system
7、查看service關(guān)聯(lián)的后端ip及端口
五汇陆、service三種常用類型
1怒炸、clusterIP:集群內(nèi)部使用
默認(rèn),分配一個(gè)穩(wěn)定的IP地址毡代,即vip阅羹,只能在集群內(nèi)部訪問(wèn)。
解決的是如何讓集群內(nèi)部訪問(wèn)(node/pod)
2教寂、NodePort:對(duì)外暴露應(yīng)用(集群外)
解決的是如何讓集群外部訪問(wèn)捏鱼。但是也會(huì)創(chuàng)建一個(gè)clusterip。
在每個(gè)節(jié)點(diǎn)上啟用一個(gè)端口來(lái)暴露訪問(wèn)酪耕,可以在集群外訪問(wèn)导梆。也會(huì)分配一個(gè)穩(wěn)定內(nèi)部集群ip地址。
訪問(wèn)地址:任意NodeIp:NodePort
端口范圍:3000-32767
nodePort會(huì)在每臺(tái)node上監(jiān)聽(tīng)端口接收用戶流量迂烁,在時(shí)間情況下看尼,對(duì)用戶暴露的只會(huì)有一個(gè)ip和端口,那這么多臺(tái)Node該使用那臺(tái)讓用戶訪問(wèn)盟步?這時(shí)可以在其前面加一個(gè)公網(wǎng)負(fù)載均衡器為項(xiàng)目提供統(tǒng)一訪問(wèn)入口藏斩。
3、LoadBalancer:對(duì)外暴露應(yīng)用址芯,使用公有云
與Nodeport類似灾茁,在每個(gè)節(jié)點(diǎn)上啟用一個(gè)端口來(lái)暴露訪問(wèn)。除此之外谷炸,k8s會(huì)請(qǐng)求底層云平臺(tái)(如阿里云北专,騰訊云等)上的負(fù)載均衡器,將每個(gè)Node([NodeIP]:[NodePort])作為后端添加進(jìn)去旬陡。
六拓颓、service代理模式
1、iptables
2描孟、ipvs
Service的底層實(shí)現(xiàn)主要有iptables和ipvs兩種網(wǎng)絡(luò)模式驶睦,決定了如何轉(zhuǎn)發(fā)流量。
3匿醒、kubeadm代理模式修改ipvs
#?# kubectl edit configmap kube-proxy -n kube-system
# kubectl delete pod kube-proxy-9wgzb -n kube-system? ?《刪除即重啟场航,刪除所有的即可》
注:
1、kube-proxy配置文件以configmap方式存儲(chǔ)
2廉羔、如果讓所有節(jié)點(diǎn)生效溉痢,需要重建所有kube-proxy?pod
3、mode:?為空,默認(rèn)為iptables孩饼。
4髓削、二進(jìn)制方式修改ipvs模式
# vi kube-proxy-config.yml
mode: ipvs
ipvs:
? scheduler: "rr"
# systemctl restart kube-proxy
注:參考不同資料,文件名可能不同
5镀娶、數(shù)據(jù)包流程
客戶端--》NodePort/ClusterIP(iptables/Ipvs負(fù)載均衡規(guī)則)--》分布在各個(gè)節(jié)點(diǎn)Pod
6立膛、?查看負(fù)載均衡規(guī)則
# yum install ipvsadm
a、iptable模式
# iptables-save |grep <SERVICE-NAME>
b梯码、ipvs模式
# ipvsadm -L -n? ? <查看所有規(guī)則>
7宝泵、ipvs
a、概念:
virtual server:?虛擬服務(wù)器(相當(dāng)于nginx的一個(gè)server)
real?server:真實(shí)服務(wù)器忍些,指的后端服務(wù)
數(shù)據(jù)流:user--》kube-ipvs0(virtual server) -->pod(分布在每個(gè)節(jié)點(diǎn))
8鲁猩、小結(jié)工作流程
9、iptables?VS?ipvs
1罢坝、iptables:
? ? a、靈活搅窿,功能強(qiáng)大
? ? b嘁酿、規(guī)則便利匹配和更新,呈線性時(shí)延
2男应、ipvs<建議>
? ? a闹司、工作在內(nèi)核態(tài),有更好的性能
? ? b沐飘、調(diào)度算法豐富:?rr游桩,wrr,lc, wlc, ip, hash .......
七鹉动、service?DNS名稱
coreDNS:?是一個(gè)DNS服務(wù)器苫幢,kubenetes默認(rèn)采用保檐,以Pod部署在集群中,CoreDNS服務(wù)監(jiān)視kubernetes?API铐刘,為每一個(gè)Service創(chuàng)建DNS記錄用于域名解析。
CoreDNS?YAML文件:
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/coredns
ClusterIP?A記錄格式: <service-name>.<namespace-name>.svc.cluster.local
示例:my-svc.my-namespace.svc.cluster.local
測(cè)試:
解析時(shí)影晓,建議帶命名空間镰吵。默認(rèn)只解析當(dāng)前命名空間。