问题,如何将Pod所提供的功能提供给别人用?微服务,是服务,所以关键要把服务提供出去

直接把pod的静态ip提供给用户用,这个会有很多问题,比如failover,扩容,负载均衡等

所以需要services组件

A Kubernetes Service is a resource you create to make a single, constant point of entry to a group of pods providing the same service.
Each service has an IP address and port that never change while the service exists

应用中service也可以分层,frontend和backend

sevices和pods之间的关联,也是通过label selector,
这里还有个endpoint的概念,service是通过endpoint来访问pod
如果你用label selector来选择pods,会自动为所有pods创建endpoints

这里还可以不按照Selector选择pods,你可以手工指定service所管理的endpoints,这里就不详细写了

查看你创建的services,

可以看到这里只有Cluster-IP,可以在集群内部访问

并没有external-ip,所以无法从集群外访问,

那我只能在集群内部试试这个服务是否ready,利用kubectel exec可以远程在pod上执行命令

$ kubectl exec kubia-7nog1 -- curl -s http://10.111.249.153

You’ve hit kubia-gzwli

过程如下,

那么对于某个Pod,我们需要怎么知道他的sevice IP?

有多个方法,

首先可以通过查看环境变量,

或者通过DNS,kube-dns组件

最终服务还是要提供给外部的client的,如何做?

NodePort

一种方式是提供NodePort service,直观的说,就是在Kubernetes Node上打个洞,提供个port给外部使用

这个时候去看,

$ kubectl get svc kubia-nodeport

NAME             CLUSTER-IP  EXTERNAL-IP PORT(S)   AGE

kubia-nodeport 10.111.254.223 <nodes> 80:30123/TCP 2m

可以看到,External-IP变成nodes,说明你可以用任意的node ip来访问,

Load Balancer

或者使用一个外部的load balancer,

和NodePort不同在于,loadbalancer会有一个明确的external-ip

$ kubectl get svc kubia-loadbalancer

NAME               CLUSTER-IP     EXTERNAL-IP    PORT(S)      AGE

kubia-loadbalancer 10.111.241.153 130.211.53.173 80:32143/TCP 1m

Ingress

load balancer,对于每个service都需要创建一个

ingress可以同时作为多个service的出口

创建ingress

定义访问ingress的域名,后面可以把不同的path指向不同的service

对于service管理那么多的pods,那么如何判断这些pods可以提供服务?

之前有一个liveness probes,这个可以用吗?语义上有些问题,pods活着并不代表他可以提供服务,比如还在初始化

所以这里提供一个新的probes,readiness probe

The readiness probe is invoked periodically and determines whether the specific pod should receive client requests or not.

kubernetes in action - Services的更多相关文章

  1. kubernetes in action - Overview

    传统的应用都是“monoliths”,意思就是大应用,即所有逻辑和模块都耦合在一起的 这样明显很挺多问题的,比如只能scale up,升级必须整体升级,扩容 所以我们就想把大应用,broken dow ...

  2. kubernetes in action - Volumes

    Volume解决Kubernetes的存储的问题 对于Pod使用的存储,抽象为volume,volume伴随着Pod的创建而创建,消失而同时消失,不能单独的创建 这样的好处,是存储的塑胶不会因为某个c ...

  3. kubernetes in action - Replication Controller

    理解这个问题,就是pods在Kubernetes中怎么进行failover 在Kubernetes的work node上有kubelet,会负责监控该work node上的pods,如果有contai ...

  4. kubernetes in action - Pods

    Pods 在上一篇也说明了,pods是kubernetes的最小部署单元,并且所有在pods中的container共享namespaces 那么为什么需要pods这样的概念? 因为在实际中,我们有一种 ...

  5. 读书笔记 | Kubernetes in Action

    1 Kubernetes介绍 Kubernetes(以下简称K8s) 是一个部署和管理容器化应用的软件系统.它将底层基础设施抽象,简化了应用的开发.部署,以及对开发和运维团队的管理. K8s由一个主节 ...

  6. 朱晔的互联网架构实践心得S2E3:品味Kubernetes的设计理念

    Kubernetes(k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序.虽然本系列文章讨论的是互联网架构,但是k8s的一些设计理念非常值得深思和借鉴,本人并非运维专家,本文尝试 ...

  7. 【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南

    [SFA官方翻译]使用 Kubernetes.Spring Boot 2.0 和 Docker 的微服务快速指南 原创: Darren Luo SpringForAll社区 今天 原文链接:https ...

  8. 三小时学会Kubernetes:容器编排详细指南

    三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...

  9. Kubernetes基础:Service

    本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 Service 介绍 我们通过Pod.Deplo ...

随机推荐

  1. JSP标签和JSTL

    Java的5个标签库:核心(c).格式化(fmt).函数(fn).SQL(sql).XML(x) SQL.XML库不推荐使用 核心标签库(c) //taglib指令 <%@ taglib pre ...

  2. 最简单有效的关于linux下配置Git操作免登录ssh公钥

    ssh-keygen -t rsa -b 4096 -C “someone@xxx.com” 然后回车三连击… 进入目录(执行cd ~/.ssh),可以看到当前目录下多出两个文件 id_rsa.pub ...

  3. QPS/TPS/并发量/系统吞吐量概念和公式

    1.概念 我们在日常工作中经常会听到QPS/TPS这些名词,也会经常被别人问起说你的系统吞吐量有多大.一个系统的吞度量(承压能力)与request对CPU的消耗.外部接口.IO等等紧密关联,单个req ...

  4. 【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志

    通过oozie job id可以查看流程详细信息,命令如下: oozie job -info 0012077-180830142722522-oozie-hado-W 流程详细信息如下: Job ID ...

  5. 行为驱动:Cucumber + Selenium + Java(一) - Cucumber简单操作实例

    场景(Scenarios) 场景是Cucumber结构的核心之一.每个场景都以关键字“Scenario:”(或本地化一)开头,后面是可选的场景标题.每个Feature可以有一个或多个场景,每个场景由一 ...

  6. 布思算法Java实现

    public String multiply(String Q,String M){ char Q0 = '0'; String A = get01(Q.length(),"0") ...

  7. django 实战篇之路由层

    路由层 如何给网页添加首页及尾页 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'test',views.test), url(r'te ...

  8. Golang 新手可能会踩的 50 个坑【转】

    译文:https://github.com/wuYin/blog/blob/master/50-shades-of-golang-traps-gotchas-mistakes.md 原文:50 Sha ...

  9. Python_多线程threading模块

    python 在执行的时候会淡定的在CPU上只允许一个线程运行,故Python在多核CPU的情况下也只能发挥出单核的功能,其中的原因:gil锁 gil 锁 (全局解释器锁):每个线程在执行时都需要先获 ...

  10. P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs

    题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...