zoukankan      html  css  js  c++  java
  • kubernets之服务资源

    一  服务集群内部或者客户端与pod的通信桥梁

        kubernets集群的内部pod访问为啥不能使用传统的IP:PORT的形式?

      • pod是短暂的,它们会随时启动或者关闭,原因可能是pod所在的节点下线了,或者管控者RC,RS,DS,JOB,CronJob等的移除
      • pod的IP在调度前才会分配IP,因此客户端无法提前预知到pod的IP地址
      • pod的水平伸缩性,预示这,客户端无需关注pod的ip,相反所有的pod都应该通过一个唯一并且固定的IP进行访问才能符合pod的这一特性

       

    二  认识services

       结合以上所述场景,kubernets提供了一种servier的资源,services拥有一个固定的IP以及端口,客户端通过这个端口来访问services管理下面的pod

    即使管理的pod由于节点下线,或者管控器的缩放导致pod的数量增加或者减少(减少后的数量始终应该大于等于1),客户端仍然可以通过services的IP以及端口

    来访问剩下的pod所提供的服务,而无需管理pod的实际IP,同时也实现了负载均衡的作用

    三  定义service

      3.1  在定义service之前我们可以先创建包含三个pod的RC,RC通过标签来组织管理pod,同样的svc也是通过标签来为pod提供统一IP和端口暴露

        3.1.1  RC以及SVC的定义文件展示

    RC的文件展示
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: kubia
    spec:
      replicas: 3
      selector:
        app: kubia
      template:
        metadata:
          labels:
            app: kubia
        spec:
          containers:
            - name: kubia
              image: luksa/kubia
              ports:
              - containerPort: 8080

    SVC的文件定义展示

    apiVersion: v1
    kind: Service
    metadata:
      name: kubia
    spec:
    sessionAffnity: ClientIp ports:
    - port: 80 targetPort: 8080 selector: app: kubia
    sessionAffnity这个参数添加的话可以让每次同一个client访问的pod都是同一个,称之为svc的会话亲和性

      3.2  创建RC以及SVC的结果显示

    [root@node01 Chapter05]# k get po
    NAME          READY   STATUS    RESTARTS   AGE
    kubia-c8fnf   1/1     Running   0          10m
    kubia-k4fkm   1/1     Running   0          10m
    kubia-kr6bc   1/1     Running   0          10m
    
    [root@node01 Chapter05]# k describe svc kubia
    Name:              kubia
    Namespace:         default
    Labels:            <none>
    Annotations:       <none>
    Selector:          app=kubia
    Type:              ClusterIP
    IP Families:       <none>
    IP:                10.109.29.64
    IPs:               <none>
    Port:              <unset>  80/TCP
    TargetPort:        8080/TCP
    Endpoints:         10.244.1.47:8080,10.244.2.42:8080,10.244.2.43:8080

      3.3  验证能否通过服务的唯一IP:PORT来访问刚才创建的pod

    [root@node01 Chapter05]# k get po
    NAME          READY   STATUS    RESTARTS   AGE
    kubia-c8fnf   1/1     Running   0          138m
    kubia-k4fkm   1/1     Running   0          138m
    kubia-kr6bc   1/1     Running   0          138m
    
    [root@node01 Chapter05]# k get svc
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP   3d2h
    kubia        ClusterIP   10.109.29.64   <none>        80/TCP    133m
    [root@node01 Chapter05]# k exec kubia
    -c8fnf -- curl -s http://10.109.29.64 You've hit kubia-k4fkm
    [root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64 You've hit kubia-c8fnf
    [root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64 You've hit kubia-kr6bc
    [root@node01 Chapter05]# k exec kubia-c8fnf -- curl -s http://10.109.29.64 You've hit kubia-k4fkm

    通过在节点上面以其中之一的pod里面访问服务暴露出来的ip:port能够访问到服务关联的pod里面的应用,并且每次都是随机的去访问pod的应用

      3.4 上面的例子可以很好的说明了对于pod内部的应用是单端口的情况下的访问情况,但是如果pod内部的应用属于两个或两个以上的端口呢?kubernets提供了什么解决方案

    下面看这个双端口的pod是如何被服务映射出来的

    apiVersion: v1
    kind: Service
    metadata:
      name: kubia
    spec:
      ports:
      - port: 80
        targetPort: 8080
      - port: 443
        targetPort: 8443
      selector:
        app: kubia

     没错,正如你所见,只需要单纯的在spce.ports里面添加pod需要映射出来的端口,是不是很简单?

      

      3.5 另外kubernets还支持使用别名的形式来命名pod里面需要映射的端口号,这么做的好处显而易见,就是在pod修改端口号的时候,由于svc里面只是引用端口的别名,所有svc不需要

    更改也能正确的映射出pod修改后的端口号

      现在分别对pod和svc的配置文件列出来作出说明

      pod

    kind: Pod
    spec:
      containers:
      - name: kubia
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8443

      svc

    kind: Service
    spec:
      ports:
        - name: http
          port: 80
          targetPort: http
        - name: https
          port: 443
          targetPort: https

      

  • 相关阅读:
    DOCTYPE声明
    JS获取对象宽度和高度
    在Flash中巧妙替换字体
    web.config 配置兼容 IIS7 II6
    防刷新重复提交/防后退方法
    iframe自适应,跨域,JS的document.domain
    JS动态创建Table IE不显示Fix
    C#简繁转换
    用TransactSQL 命令压缩数据库
    JS内置对象[转载]
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14182235.html
Copyright © 2011-2022 走看看