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 ...
随机推荐
- LeetCode349. 两个数组的交集
题目 给定两个数组,编写一个函数来计算它们的交集. 分析 数组元素值可以很大,所以不适合直接开数组进行哈希,这里要学习另一种哈希方式:集合 集合有三种,区别见下面代码随想录的Carl大佬的表格,总结的 ...
- 关于阿里云服务器安装了Apache开放80端口访问不了网页
先用netstat -tlunp查看80端口是否打开,再关闭服务器的防火墙,可以用 systemctl status firewalld 查看防火墙状态 systemctl stop firewal ...
- jmeter-登录获取cookie后参数化,或手动添加cookie, 再进行并发测试
以下情况其实并不适用于直接登录可以获取cookie情况,直接可以登录成功,直接添加cookie管理,cookie可以直接使用用于以下请求操作. 如果登录一次后,后续许多操作,可以将cookie管理器放 ...
- JavaScript的数据类型和数据类型的检测
数据类型 JavaScript的基础数据类型有,NaN string undefined Null Boolen Symbol Bigint 这些都是基础数据类 ...
- var、let、const之间的区别
var声明变量可以重复声明,而let不可以重复声明var是不受限于块级的,而let是受限于块级var会与window相映射(会挂一个属性),而let不与window相映射var可以在声明的上面访问变量 ...
- 利用Javascript制作网页特效(时间特效)
在网页中经常可以看到各种各样的动态时间显示,在网页中合理地使用时间可以增加网页的时效感. 显示当前时间 getHours().getMinutes().getSeconds()分别获得当前小时数.当前 ...
- Quartz:定时任务工具类
Quartz:定时任务工具类 Quartz工具类 Quartz工具类 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; ...
- 用于理解Java的前8个图表
尤其记得高中上数学课的时候,数学老师课堂上最喜欢说的一句话:"数形结合百般好":这些年过去,数学虽然学的并未多么好,但这句话倒是一直烙印在我的脑海,在其他学科的学习当中,我总是尽量 ...
- CAS客户端和服务器配置https证书
关于如何生成https证书可以看这篇文章: java生成Https证书,及证书导入的步骤和过程 下面整理cas如何整合https: cas服务器端部署(TLS[https]) 1.生成证书: 参照ja ...
- Cisco的互联网络操作系统IOS和安全设备管理器SDM__路由器软、硬件知识
路由器软.硬件知识 1.路由器的组件: 组件 解释 Bootstrap 存储在ROM中的微代码,bootstrap用于在初始化阶段启动路由器.它将启动路由器然后装入IOS POST(开机自检) 存储在 ...