• Kubernets二进制安装(7)之部署主控节点服务--apiserver简介


    API Server简介

    Kubernetes API Server提供了K8S各类资源对象(如:pod、RC、Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。

    Kubernetes API Server功能如下:

    1.提供了集群管理的REST API接口(包括认证授权、数据校验以有集体状态变更)
    2.提供其他模块之间的数据交互和通信的枢纽(其它模块通过api server查询或者修改数据,只有它才能   直接操作etcd)
    3.是资源配额控制的入口
    4.拥有完备的集群安全机制
    

    Kube-apiserver工作原理图:

    1585902322965

    如何访问Kubernetes API

    k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上。默认有两个端口

    1.本地端口:
      (1)该端口用于接收HTTP请求
      (2)该端口默认值为8080,可以通过API Server的启动参数 "--insecure-port"的值来修改默认值
      (3)默认的IP地址为"localhost",可以通过启动参数"--insecure-bind-address"的值来修改该IP地址
      (4)非认证或授权的HTTP请求通过该端口访问API Server。
    2.安全端口
      (1)该端口默认值为6443,可通过启动参数"--secure-port"的值来修改默认值
      (2)默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数"--bind-address"设置该值
      (3)该端口用于接收HTTPS请求
      (4)用于基于Tocken文件或客户端证书及HTTP Base的认证
      (5)用于基于策略的授权
      (6)默认不启动HTTPS安全访问控制
    

    kubernetes API访问方式

    1.Curl方式访问

    curl localhost:8080/api
    curl localhost:8080/api/v1/pods
    curl localhost:8080/api/v1/services
    curl localhost:8080/api/vi/replicationcontrollers
    

    2.Kubectl Proxy

    Kubernetes Proxy代理程序既能作为API Server的反向代理,也能作为普通客户端访问API Server的代理。通过master节点的8080端口来启动该代理程序、
    kubectl proxy --port=8080 &   具体请参考kubectl proxy --help
    

    3.kubectl客户端

    命令行工具kubectl客户端,通过命令行参数转换为对API Server的REST API调用,并将调用结果输出
    命令格式:kubectl [command] [options]
    具体用法请参考:kubectl --help
    

    4.编程方式调用

    1.运行在Pod里的用户进程调用kubernetes API,通常用来实现分布式
    2.开发基于kubernetes的管理平台,比如调用kubernetes API来完成Pod、Service、RC等资源对象的图形化创建和管理界面。可以使用kubernetes提供的Client Library.
    

    通过API Server访问Node、Pod、Service

    k8s API Server最主要的REST接口是资源对象的增删改查,另外还有一类特殊的REST接口--k8s proxy API接口,这类接口的作用是代理REST请求,即Kubernetes API Server把收到的REST请求转发到某个Node上的kubelet守护进程的REST端口上,由该Kubelet进程负责响应

    Node相关接口

    关于Node相关的接口的REST路径为:/api/v1/proxy/nodes/{name},其中{name}为节点的名称或IP地址

    /api/v1/proxy/nodes/{name}/pods/ #列出指定节点内所有Pod的信息 
    /api/v1/proxy/nodes/{name}/stats/ #列出指定节点内物理资源的统计信息
    /api/v1/prxoy/nodes/{name}/spec/ #列出指定节点的概要信息
    

    这里获取的Pod信息来自Node而非etcd数据库,两者时间点可能存在偏差。如果在kubelet进程启动时加--enable-debugging-handles=true参数,那么kubernetes Proxy API还会增加以下接口:

    /api/v1/proxy/nodes/{name}/run #在节点上运行某个容器 
    /api/v1/proxy/nodes/{name}/exec #在节点上的某个容器中运行某条命令
    /api/v1/proxy/nodes/{name}/attach #在节点上attach某个容器
    /api/v1/proxy/nodes/{name}/portForward #实现节点上的Pod端口转发
    /api/v1/proxy/nodes/{name}/logs #列出节点的各类日志信息
    /api/v1/proxy/nodes/{name}/metrics #列出和该节点相关的Metrics信息
    /api/v1/proxy/nodes/{name}/runningpods #列出节点内运行中的Pod信息
    /api/v1/proxy/nodes/{name}/debug/pprof #列出节点内当前web服务的状态,包括CPU和内存的使用情况
    

    Pod相关接口

    /api/v1/proxy/namespaces/{namespace}/pods/{name}/{path:*} #访问pod的某个服务接口 
    /api/v1/proxy/namespaces/{namespace}/pods/{name} #访问Pod
    以下写法不同,功能一样
    /api/v1/namespaces/{namespace}/pods/{name}/proxy/{path:*} #访问pod的某个服务接口
    /api/v1/namespaces/{namespace}/pods/{name}/proxy #访问Pod
    
    

    Service相关接口

    Pod的proxy接口的作用:在kubernetes集群之外访问某个pod容器的服务(HTTP服务),可以用Proxy API实现,这种场景多用于管理目的,比如逐一排查Service的Pod副本,检查哪些Pod的服务存在异常问题。

    /api/v1/proxy/namespaces/{namespace}/services/{name}
    
    

    集群功能模块之间的通信

    kubernetes API Server作为集群的核心,负责集群各功能模块之间的通信,集群内各个功能模块通过API Server将信息存入etcd,当需要获取和操作这些数据时,通过API Server提供的REST接口(GETLISTWATCH方法)来实现,从而实现各模块之间的信息交互。

    1. kubelet与API Server交互

    每个Node节点上的kubelet定期就会调用API Server的REST接口报告自身状态,API Server接收这些信息后,将节点状态信息更新到etcd中。kubelet也通过API Server的Watch接口监听Pod信息,从而对Node机器上的POD进行管理。

    监听信息 kubelet动作 备注
    新的POD副本被调度绑定到本节点 执行POD对应的容器的创建和启动逻辑
    POD对象被删除 删除本节点上相应的POD容器
    修改POD信息 修改节点的POD容器

    2. kube-controller-manager与API Server交互

    kube-controller-manager中的Node Controller模块通过API Server提供的Watch接口,实时监控Node的信息,并做相应处理。

    3. kube-scheduler与API Server交互

    Scheduler通过API Server的Watch接口监听到新建Pod副本的信息后,它会检索所有符合该Pod要求的Node列表,开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

    API Server参数介绍

    API Server主要是和etcd打交道,并且对外提供HTTP服务,以及进行安全控制,因此它的命令行提供的参数也主要和这几个方面相关。下面是一些比较重要的参数及说明(不同版本参数可能不同)

    参数 含义 默认值
    --advertise-address 通过该IP地址向集群其他节点公布
    api server的信息,必须能够被其它节点访问
    nil
    --allow-privileged 是否允许privileged容器运行 false
    --admission-control 准入控制 AlwaysAdmit
    --authorization-mode 授权模式,安全接口上的授权 AlwaysAllow
    --bind-address HTTPS安全接口的监听地址 0.0.0.0
    --secure-port HTTPS安全接口的监听地址 6443
    --cert-dir TLS证书的存放目录 /var/run/kubernetes
    --etcd-prefix 信息存放在etcd中地址的前缀 "/registry"
    --etcd-servers 逗号分割的etcd server地址 []
    --insecure-bind-address HTTP访问的地址 127.0.0.1
    --insecure-port 8080
    --log-dir 日志存放的目录
    --service-cluster-ip-range service要使用的网段,使用CIDR
    格式,参考kubernetes中service的定义
  • 相关阅读:
    西山赏梅归来
    创建 WebRequest 实例并返回响应
    C# WinForm开发系列 DataGridView
    DataTable C#
    delphi 制作资源文件
    Windows Mobile上使用钩子
    OO系统分析员之路用例分析系列(7)用例规约的编写业务规则和实体描述[整理重发]
    iis下PHP5配置
    ie firefox 点flash 卡死解决方案
    PHP获取字符串编码类型
  • 原文地址:https://www.cnblogs.com/Heroge/p/12627941.html
Copyright © 2020-2023  润新知