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工作原理图:

如何访问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接口(GET\LIST\WATCH方法)来实现,从而实现各模块之间的信息交互。
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的定义 |
Kubernets二进制安装(7)之部署主控节点服务--apiserver简介的更多相关文章
- Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装
kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...
- Kubernets二进制安装(6)之部署主控节点服务--etcd
Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息. 整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是 网络插件 ...
- Kubernets二进制安装(9)之部署主控节点控制器controller-manager
kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程 Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构 ...
- Kubernets二进制安装(10)之部署主控节点部署调度器服务kube-scheduler
Kubernetes Scheduler是一个策略丰富.拓扑感知.工作负载特定的功能,调度器显著影响可用性.性能和容量.调度器需要考虑个人和集体的资源要求.服务质量要求.硬件/软件/政策约束.亲和力和 ...
- Kubernets二进制安装(12)之部署Node节点服务的kube-Proxy
kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服 ...
- Kubernets二进制安装(11)之部署Node节点服务的kubelet
集群规划 主机名 角色 IP地址 mfyxw30.mfyxw.com kubelet 192.168.80.30 mfyxw40.mfyxw.com kubelet 192.168.80.40 注意: ...
- Kubernets二进制安装(13)之部署Flannel
Flannel简介 Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址 ...
- Kubernets二进制安装(8)之部署四层反向代理
四层反向代理集群规划 主机名 角色 IP地址 mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10 mfyxw20.mfyxw.com 4层负载均衡(从) 192.168 ...
- 6、二进制安装K8s之部署kubectl
二进制安装K8s之部署kubectl 我们把k8s-master 也设置成node,所以先master上面部署node,在其他机器上部署node也适用,更换名称即可. 1.在所有worker node ...
随机推荐
- Linux设置开机自动挂载镜像文件
1.将文件上传到服务器上(本例上传到/Data/software下) 2.挂载 mount -o loop /Data/software/rhel-server-7.6-x86_64-dvd.iso ...
- 开发中经常使用到的Xcode快捷键
工欲善其事必先利其器. 有了这些快捷键加持,你写代码不仅很6而且还很好看. 这些快捷键都是平时使用频率非常高的,今天整理出来分享给大家了. 左缩进:Cmd + [ 右缩进:Cmd + ] 代码格式化/ ...
- ABAP关键字和ABAP词汇
下表为ABAP的词汇概览(包括关键字): ABAP-SOURCE ABBREVIATED ABS ABSTRACT ACCEPT ACCEPTING ACCORDING ACOS ACTIVATION ...
- 在Ubuntu18.04下编译出ffmpeg(支持推流H265成rtmp)
Ubuntu18.04下编译libx264.libx265.libfdk_aac和ffmpeg 一.编译x264库 二.编译fdk-aac库 三.编译x265库 四.编译FFmpeg源码 五.设置环境 ...
- 基于scrapy框架的分布式爬虫
分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...
- Apache Unomi 远程代码执行漏洞复现(CVE-2020-13942)
一.漏洞描述 Apache Unomi 是一个基于标准的客户数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验.在Apa ...
- OpenStack使用OVN
1. Controller节点 1.1 安装 OVS和OVN 安装 Python3.7: yum -y groupinstall "Development tools" yum - ...
- centos7防火墙firewalld拒绝某ip或者某ip段访问服务器任何服务
安装firewall后(LINUX7系统一般情况下默认已安装),防火墙默认配置是只打开SSH端口的,也就是22端口,如果SSH的端口已更改成别的端口了,请切记一定在启动firewall前先修改对应服务 ...
- Swagger2配置与使用
Swagger2配置与使用 Swagger2介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 We ...
- Turbo Boyer-Moore algorithm
MySQL :: MySQL 8.0 Reference Manual :: 8.3.9 Comparison of B-Tree and Hash Indexes https://dev.mysql ...