k8s创建service

我们以普罗米修斯为例子

使用deploy创建pod部署文件,支持缩容和扩容

cat > deploy-prometheus.yaml <<-'EOF'
#使用的API版本。最新版Kubernetes位于apps/v1的API组
apiVersion: apps/v1
#kind告诉Kubernetes现在定义的是一个Deployment对象
kind: Deployment
#metadata部分定义Deployment的名字和标签
metadata:
  #部署名称为
  name: deploy-prometheus
#spec下的内容都与Pod有关
spec:
  #spec.selector表明Deployment要管理的Pod所必须具备的标签
  selector:
    #匹配所有标签app且值为prometheus
    matchLabels:
      app: prometheus
  #replicas告诉Kubernetes需要部署多少个Pod副本
  replicas: 4
  #spec.template下的内容定义了Deployment管理的Pod模板
  template:
    #元数据定义每一个POD拥有标签 key=app,value=prometheus
    metadata:
      labels:
        app: prometheus
    #template.spec说明具体部署的容器与镜像信息
    spec:
      containers:
        #容器名
      - name: prometheus
        #docker镜像名称
        image: prom/prometheus
        #容器对外暴露的端口号
        ports:
        - containerPort: 9090
EOF

创建pod 

kubectl apply -f deploy-prometheus.yaml 

创建service有4种模式

ClusterIP,NodePort,LoadBalancer,ExternalName

ClusterIP

集群ip 模式,默认 只能在集群内部访问,不能在浏览器访问

创建service文件

cat > svc-prometheus.yaml <<-'EOF'
apiVersion: v1
kind: Service
metadata:
  name: clusterip-service
spec:
  #默认的service 集群ip只能内部访问 不能在浏览器访问
  type: ClusterIP
  selector:
    app: prometheus  
  clusterIP: 172.16.32.2
  ports:
  - name: http
    protocol: TCP
    #集群内部访问的端口
    port: 8000
    #pod的端口
    targetPort: 9090
EOF

执行创建

kubectl apply -f svc-prometheus.yaml 

可以看到,只能在集群内部访问8000端口,不能在浏览器访问

service标签app的名字一定要和pod的标签一样 

NodePort(推荐使用)

在k8s中pod的ip是虚拟ip,无法在浏览器访问,那么这个时候要想在浏览器访问

就需要创建service,通过标签绑定和绑定pod的端口,进行映射

浏览器访问service的端口,service访问pod的端口

service是可以通过节点的集群ip在浏览器可以访问

创建service文件

在这里一定要注意标签要和pod的标签一样

type选择NodePort

targetPort 是pod的端口

nodePort 是浏览器访问的端口(端口限制在30000-32767之间)

port 是集群内部访问的端口

 cat > svc-prometheus.yaml <<-'EOF'
apiVersion: v1
#描述对象为Service 固定写死
kind: Service
#定义Service的名称
metadata:
  name: svc-prometheus
#配置细节
spec:
    #通过节点端口对外暴露
  type: NodePort
    #选择器,选中所有app=prometheus的pod
  selector: 
    app: prometheus
    #端口信息
  ports:
      #Service在集群内部对外暴露的端口
    - port: 8000
        #pod容器内对外暴露的端口
      targetPort: 9090
        #节点对外暴露的端口
      nodePort: 30001
EOF

创建service

kubectl apply -f svc-prometheus.yaml 

查看service

kubectl get svc -o wide 

service标签和pod的标签一定要一致 

 随便使用一个节点的ip 在浏览器访问30001的端口

http://192.168.10.108:30001/

 集群内部端口使用,先查看service的详细信息

kubectl describe svc svc-prometheus

从这里找到集群内部的ip地址 ,然后再linux中访问

因为172的都是虚拟ip,不是我们节点的ip

LoadBalancer

只需要在spec下面添加loadBalancerIP对应的地址,需要云服务商提供负载均衡支持

ExternalName

只需要在spec下添加externalName对应的dns名称

外部服务通过externalName 作为本地服务 和另一个命名空间中的服务进行对话

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值