在上一节讲解了k8s 的pod,deployment,以及借助pod,deployment来部署项目,但会存在问题:
- 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod
- 访问还需要端口转发
- Pod重创后IP变了,名字也变了
针对上面的问题,可以借助Service来解决,下面就来看看Service怎么使用
一.Service详解
1.特性
- Service 通过 label 关联对应的 Pod
- Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重新创建改变 IP
- 提供了负载均衡功能,自动转发流量到不同 Pod
- 可对集群外部提供访问端口
- 集群内部可通过服务名字访问
2.创建 Service
Service是通过label关联对应的Pod,下面就来创建Service,首先创建一个deployment.yaml,然后创建service.yaml,通过service.yaml的label标签 goweb 跟对应的deployment.yam中的Pod 关联上
(1).新建deployment.yaml
apiVersion: apps/v1
#类型deploymnt
kind: Deployment
metadata:
#部署的名字
name: goweb
spec:
#创建Pod的副本数
replicas: 2
#定义标签选择器:定义Deployment如何找到要管理的Pod,与template的label(标签)对应
selector:
matchLabels:
app: goweb #需要和下面的labels统一
#定义 Pod 相关数据
template:
metadata:
labels:
app: goweb
#指定该资源的内容
spec:
# 定义容器,可以多个
containers:
- name: test-goweb# 容器名字
image: k8sgoimg # 镜像
# [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
imagePullPolicy: IfNotPresent
(2).新建service.yaml
创建 一个Service,新建service.yaml通过标签goweb跟对应的Pod关联上