• kubernetes 基础一


     

    从集群外部访问pod或service

    pod

    在Kubernetes中,创建、调度和管理的最小单位是pod而不是容器。pod代表着一个运行着的工作单元。一般情况下,每个pod中只有一个容器(原因是为了避免容器之间发生端口冲突)。如果几个容器是紧耦合的,也可以放在同一个pod中,但一定要避免同一个pod下容器之间发生端口冲突。Kubernetes承担了pod与外界环境的通信工作。

    Pod和Service是Kubernetes集群范围内的虚拟概念。集群外的客户端系统无法通过Pod的IP地址或者Service的虚拟IP地址和虚拟端口号访问到它们,但是可以将容器应用的端口号映射到物理机上

     方法一:设置容器的hostport,将容器应用的端口号映射到物理机上

    apiVersion: v1
    kind: Pod              #kind表示创建什么(pod?service?deployment?)
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
     replicas: 2       #创建多少个副本,如果指定了映射到宿主机的端口,需要在两台node上创建副本 containers:
    - name: webapp image: docker.io/nginx:latest    #默认会先从本地查找镜像,找不到从服务器上pull ports: - containerPort: 80      #容器端口 hostPort: 8081        #宿主机端口,指定端口后,同一台宿主机无法启动第二个副本(端口会冲突)

    通过 命令可查看pod在哪台node上创建了容器

    kubectl get pods -o wide

     方法二,设置pod hostNetwork=true

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: testnetwork
      labels:
        app: testnetwork
    spec:
      replicas: 5              #,同样,不能在一台机器上创建两个副本
      selector:
        app: testnetwork
      template:
        metadata:
          labels:
            app: testnetwork
        spec:
           hostNetwork: true      #表示使用宿主机网络
        containers:
        - name: testnetwork
         image:
    docker.io/nginx:latest
         ports:
         - containerPort: 80    #这里没有指定hostport,默认会使pod中的所有容器的端口号直接映射到物理机上

    service

    Kubernetes通过Service能够提供pod间的相互通信。service可以和Kubernetes环境中其它部分(包括其它pod和replication controller)进行通信,告诉它们你的应用提供什么服务。Pod可以四处移动(会改变IP地址),但是service的IP地址和端口号是不变的。而且其它应用可以通过Kubernetes的服务发现找到对应的service。Service是真实应用服务的抽象。将代理的Pod对外表现为一个单一的访问接口,外部不需要了解后端Pod如何运行,提供了一套简化的服务代理和发现机制。

    网络方式:

    port: 80:service映射的端口
    nodePort: 30001物理机端口
    targetPort: 80容器端口

    方设置nodeport映射到物理机,同时设置service类型为nodeport

    #cat service.yml
    apiVersion: v1 kind: Service metadata: name: testnetwork      #pod名称 labels: app: testnetwork spec: type: NodePort ports:
    - port: 8080 targetPort: 8080 nodePort: 8000 selector: app: testnetwork      #这里的app名称应该与pod name设定的app名称相同,包括上面的metadata信息

    创建kubernetes网络

    要实现Kubernetes的网络模型,需要在Kubernetes的集群中创建一个覆盖网络,连通各个节点。这里选用Flannel。

    Flannel使用Etcd进行配置,用来保证多个Flannel实例间的配置一致性。

    对Master的配置,其实就是对Master上Etcd的配置。指令如下:

    etcdctl mk /coreos.com/network/config '{"Network":"10.0.0.0/16"}'    #此处 /coreos.com/network/config在 /etc/sysconfig/flanneld里配置

    etcd集群和node节点配置看k8s集群安装文章

  • 相关阅读:
    echarts 实时获取数据
    js 对象与数组相互转化的快捷方法 Object.keys()、Object.values()、Object.entries()
    koa2 中使用 svg-captcha 生成验证码
    分享面试资料包
    8位单片机中一个容易被忽视的溢出问题
    献给半夜加班到深夜的女程序员
    java调用WebService接口方法
    算法小记:快速排序
    STL源码剖析 迭代器(iterator)概念与编程技法(三)
    [置顶] 蓝牙基础知识进阶——Physical channel
  • 原文地址:https://www.cnblogs.com/FRESHMANS/p/8578865.html
Copyright © 2020-2023  润新知