- 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
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dcd66373fb1756a04a7e97a6e626f5d6.png)
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
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a984282b33d3e78532e931cadee9458b.png)
- 基于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
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/997cdab61c2aabe56a085e891f85e78b.png)
- 查看svc详细内容,Endpoints为后端pod的IP
kubectl describe svc web1
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44e6c994fdffacc401d4c3809cf2ef4d.png)
kubectl delete svc web1
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/739bd6d65b7c0645079dd02046561c22.png)
kubectl expose deployment web1 --name=web1 --port=80 --target-port=80 --dry-run=client -o yaml > svc1.yaml
vi svc1.yaml
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c58023ec7b950c6c85f4d5f5f85c072.png)
kubectl apply -f svc1.yaml
kubectl get svc
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/11f3541612979121c7722887ef12974a.png)
kubectl delete -f svc1.yaml
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f6346b754ae8e474bd699b636fd1e4c5.png)