svc是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到后端的各个容器应用上。 pod生命周期短不稳定,pod异常后新生成的pod的IP会发生变化,通过Service对pod做代理,Service具有固定的IP和Port,service会自动关联后端pod,即使pod发生改变,Kubernetes内部会自动更新这组关系 。如果deployment创建了多个副本,Service代理多个pod,所有发送给svc1的请求,都会转发给后端的pod,pod数目越多,每个pod的负载就越低,vc将请求发送给后端的pod,是由kube-proxy组件来实现的。 svc是通过标签来定位pod 的,deployment创建出来的pod都具有相同的标签,所以一个pod挂掉了,deployment会马上生成一个具有相同标签的pod,此时svc能立即定位到新的pod,如果deployment创建了多个副本,svc也能立即定位到这些pod。
服务的基本管理
mkdir svc
cd svc
kubectl create deployment web1 --image = nginx --dry-run= client -o yaml > web1.yaml
apiVersion : apps/v1
kind : Deployment
metadata :
creationTimestamp : null
labels :
app : web1
name : web1
spec :
replicas : 1
selector :
matchLabels :
app : web1
strategy : { }
template :
metadata :
creationTimestamp : null
labels :
app : web1
spec :
containers :
- image : nginx
imagePullPolicy : IfNotPresent
name : nginx
resources : { }
status : { }
kubectl apply -f web1.yaml
kubectl get deployment -o wide
基于deployment创建svc并查看服务,不使用--name
指定服务名,则保持和deployment名字一致。--port
指服务端口, --target-port
是后端pod运行服务的端口。当基于pod创建svc时,如果pod有多个标签,使用--selector=app=web1
可以指定根据哪个标签来定位pod。
kubectl expose deployment web1 --name = web1 --port = 80 --target-port= 80
kubectl get service -o wide
查看svc详细内容,Endpoints为后端pod的IP
kubectl describe svc web1
kubectl delete svc web1
kubectl expose deployment web1 --name = web1 --port = 80 --target-port= 80 --dry-run= client -o yaml > svc1.yaml
vi svc1.yaml
kubectl apply -f svc1.yaml
kubectl get svc
kubectl delete -f svc1.yaml