kubernetes云原生纪元:kubernetes API && 容器管理平台
文章目录
武汉加油,中国加油
介绍apiVersion
在我们写配置文件的时候有各种各样的apiVersion
比如 apps/v1
,v1
, extensions/v1beta1
,stroage.k8s.io/v1
,rbac.authorization.k8s.io/v1
…好多。
它是有规则可循的,看下面的图主要看==/api== 和==/apis==。
/api 只有api/v1,再往下是/app/v1/nodes ,/app/v1/pods,api下面都是核心api资源没有api分组的,默认核心组,核心组分两级一级是版本,二级是具体资源
/apis是非核心api,每个资源用三级来表示,比如batch,extentsions是grep
,分组下面是版本
v1,v1alpha1,第三级是具体的资源
jobs watch,cronjobs。跟核心资源的区分是多个一级grep,它的分组很容易理解它的来路,让资源的组织结构更加清新,版本就可以让我们知道当前API的可靠性 ,还有就是可以根据版本升级
还有一个疑问就是我们在写一个配置的时候怎么确定当前使用的版本apiVersion呢?
官网:https://kubernetes.io/
根据下面图片引导就可以找kubernetes版本所使用的apiversion,而且下面也有档期版本的配置,我们不知道如何配置的时候可以来参考
比如我们看下pod 他是core
核心API,当我们定义下pod 的时候只需要在apiVersion:v1
就可以,它就能定位到我们当前的使用版本
API Server 介绍
参考https://blog.csdn.net/bbwangj/article/details/81904421
k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
API 是由apiServer 来控制的,apiServer集群中枢,各种资源数据都是通过apiServer提交到后端的,持久化存储etcd,kubernetes 各个组件之间也是通过apiServer的接口来实现的解藕,包括我们使用的kukectl当他对集群操作的时候,也是通过apiServer来完成的。
kubernetes API Server的功能:
- 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
- 是资源配额控制的入口;
- 拥有完备的集群安全机制.
apiServer对外提供访问方式是基于http的restfutApi
如何访问kubernetes API
k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上。默认有两个端口。
- 本地端口
- 该端口用于接收HTTP请求;
- 该端口默认值为8080,可以通过API Server的启动参数“–insecure-port”的值来修改默认值;
- 默认的IP地址为“localhost”,可以通过启动参数“–insecure-bind-address”的值来修改该IP地址;
- 非认证或授权的HTTP请求通过该端口访问API Server。
- 安全端口
- 该端口默认值为6443,可通过启动参数“–secure-port”的值来修改默认值;
- 默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数“–bind-address”设置该值;
- 该端口用于接收HTTPS请求;
- 用于基于Tocken文件或客户端证书及HTTP Base的认证;
- 用于基于策略的授权;
- 默认不启动HTTPS安全访问控制。
kubernetes API访问方式
-
Curl
curl localhost:8080/api curl localhost:8080/api/v1/pods curl localhost:8080/api/v1/services curl localhost:8080/api/v1/replicationcontrollers
比如查看 POD 信息
curl localhost:8080/api/v1/pods
返回了当前集群运行的所有POD的详细信息。
查看所有节点的详细信息
curl localhost:8080/api/v1/nodes
详细用法可以来到官网,比如POD的操作,
容器管理平台
我们可以看到如果我们用程序调用这些接口信息也是不太理想,因复杂度比较高, 包括当升级的时候还要维护跟kuberntes交互的客户端。 我们用手动敲命令的方式也不是长久之计,kubernetes 有多种语言环境的客户端。
如果你用Java开发就选Java。用go开发就用https://github.com/kubernetes/client-go 它在kubernetes项目里面。虽然客户端很多但是功能都是大同小异的都是对api 接口的封装对外提供的都是响应语言的SDK,目的就是让我更容易的接近 kubernetes API。
https://github.com/kubernetes-client
比如Java的,怎么使用
主要是看清楚这里,是否兼容我们当前服务器kubernetes版本,
然后这个目录有很多例子
我们可以自己做一个容器管理平台,虽然不可能像rancher功能那么全,但是肯定符合当前公司业务。
rancher是一个产品,肯定是很复杂的
如果我们自己开发可以参考下面:
当然现在最好用容器管理平台就是😄kubespherehttps://kubesphere.com.cn/ 就是容器平台的“集大成者”