zoukankan      html  css  js  c++  java
  • k8s的service简述

    k8s向集群外部暴露端口的3种方式:
    1.service->nodePort :仅暴露一个宿主机端口,用于集群外部访问,因为此操作被写入各个节点的iptables或ipvs规则当中,可以用任意一个节点的IP+端口号访问。
    2.hostNetwork :暴露宿主机IP,只可以通过此宿主机IP访问,慎重使用。
    3.hostPort->contianerPort :宿主机和容器的端口映射,只能访问被指定的容器和宿主机。

    kbectl的命令可分为三类:
    1.陈述式命令-->(指明对象和要求)
    2.陈述式对象配置--> create(用json或yaml格式定义我们期望状态的资源清单)
    3.声明式对象配置--> apply (可以对一个yaml资源清单多次进行apply)

    pod相当于容器的有一个外壳,对容器的抽象形成的pod,一个pod可以运行1个到多个容器,并且,同一pod下的容器共享一组网络名称空间
    pod中即使看上去是运行一个容器,其实不然,它还包括除了这个容器外的基础架构的容器,当原始方式去部署k8s时,用到的基础架构的容器对应的镜像是pause,可以理解为一直是暂停状态。
    pod中基础架构的容器pause,为此pod中的主要容器主动提供网络名称空间,数据卷等功能。
    一个pod中通常最好一个主容器。
    pod中如果需要实现紧密容器的服务,可以有两种方式,1,sidecar(边车,辅助,侧兜摩托)2,proxy代理istio
    同一pod下的容器能共享挂载卷

    1 查看pod标签:kubectl get pod -n namespace --show-labels
    2 Pod添加标签:kubectl label pod ngx-dep app=myapp / kubectl label pod ngx-dep --overwrite {app=myapp,word=shit,mod=good}
    3 Pod删除标签:kubectl label pod ngx-dep app- / kubectl label pod ngx-dep word- /kubectl label pod ngx-dep mod-
    4 Pod筛选标签:kubectl get pod -l key / kubectl get pod -l key=value / kubectl get -l key=value -L key / kubectl get pod -l key1,key2,keyn

    service的模型:

    userspace;iptables;ipvs
    1.10-的版本是userspace/iptables
    1.10+的版本是iptables/ipvs 一般不指定的话会自动降级到iptables,若想使用ipvs则在搭建环境时需要在/etc/sysconfig/kubelet文件中添加字段为:
    KUBE_PROXY_MODE=ipvs
    service的解析是紧密依赖于coredns的
    service 服务方式:
    clusterIP :供集群内布访问使用
    nodeport :供集群外部访问使用 client->NodeIP:NodePort->clusterIP:servicePort->podIP:ContainerPort
    externalIPs :用于使pod访问集群外部资源
    loadBalancerIP :用于云平台环境中,集群外负载均衡调度
    NoclusterIP:即clusterIP:后面参数为空,则为headless,无头service,就是说这个服务的IP是它所有后端pod的IP:ServiceName->PodIP
    clusterIP 例:

     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4 name: myapp-svc
     5 namespace: default
     6 spec:
     7 selector:
     8 app: myapp
     9 release: canary
    10 clusterIP: 10.99.99.99
    11 type: ClusterIP
    12 ports:
    13 - port: 80 #service暴露的端口(iptables/ipvs规则)
    14 targetPort: 80 #pod的端口

    nodeport 例:

     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4 name: myapp-svc-headless
     5 namespace: default
     6 spec:
     7 selector:
     8 app: myapp
     9 release: canary
    10 clusterIP: 10.97.97.97
    11 sessionAffinity: ClientIP #这个选项作用是,把来自于同一个客户端的请求,始终发往同一个后端pod
    12 type: NodePort
    13 ports:
    14 - port: 80
    15 targetPort: 80
    16 nodePort: 30080 #工作节点上对外暴露的端口


    无头headless service 例:一般用于对后端pod资源的调度。

     1 apiVersion: v1
     2 kind: Service
     3 metadata:
     4 name: myapp-svc-1
     5 namespace: default
     6 spec:
     7 selector:
     8 app: myapp
     9 release: canary
    10 clusterIP: None
    11 ports:
    12 - port: 80
    13 targetPort: 80
  • 相关阅读:
    tensorflow 2.0 学习 (十) 拟合与过拟合问题
    tensorflow 2.0 学习 (九) tensorboard可视化功能认识
    tensorflow 2.0 学习 (八) keras模块的认识
    tensorflow 2.0 学习 (七) 反向传播代码逐步实现
    tensorflow 2.0 学习 (六) Himmelblua函数求极值
    tensorflow 2.0 学习 (五)MPG全连接网络训练与测试
    arp协议简单介绍
    Pthread spinlock自旋锁
    线程和进程状态
    内核态(内核空间)和用户态(用户空间)的区别和联系·
  • 原文地址:https://www.cnblogs.com/Smbands/p/10840775.html
Copyright © 2011-2022 走看看