文章目录

  • 一、查看k8s中的api
  • 二、使用apiserver
  • 1、查看健康状态
  • 2、查看k8s中所有的pod信息
  • 3、查看k8s中node的信息
  • 读后感



k8s中有很多的api,我们的yaml文件开头一定要申明一个apiversion,怎么知道该使用哪个api呢?如何来选择正确的api呢?

我们又该如何来开发一个基于k8s的容器管理平台,开发k8s容器管理平台的思路又是什么呢?本文我们来看看。

一、查看k8s中的api

我们都知道k8s中有很多的api,那么如何查看k8s中所有的api呢?如何知道k8s中都有什么api,使用如下命令即可;

[root@node1 ~]# kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
------省略部分内容------
[root@node1 ~]# 
[root@node1 ~]# kubectl api-resources
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
bindings                                       v1                                     true         Binding
componentstatuses                 cs           v1                                     false        ComponentStatus
configmaps                        cm           v1                                     true         ConfigMap
endpoints                         ep           v1                                     true         Endpoints
events                            ev           v1                                     true         Event
limitranges                       limits       v1                                     true         LimitRange
namespaces                        ns           v1                                     false        Namespace
------省略部分内容------
[root@node1 ~]#

那么k8s中的api是如何使用的呢?这个时候我们就需要登录k8s官网来查看了,访问:

https://kubernetes.io/

登录k8s官网之后界面如下(虽然右上角有切换语言的选项,不建议切换成中文,因为当你切换了之后,有一些东西是显示不出来的,这里就按照英文的来演示);

api帮助文档 java查看 api文档查询_容器

然后我们点击“Documentation”,如下:

api帮助文档 java查看 api文档查询_API_02

再之后我们点击“Kubernetes API”:

api帮助文档 java查看 api文档查询_kubernetes_03

弹出如下界面:

api帮助文档 java查看 api文档查询_docker_04

我们将该页面滑到文章末尾,点击“API Reference”(API参考):

api帮助文档 java查看 api文档查询_docker_05

然后我们就到了api文档页面,我们可以在这里看到各种资源下的各种api接口如何使用,例如我们点击第一个“Workload Reference”;

api帮助文档 java查看 api文档查询_API_06

然后出现如下界面之后,我们再点击“POD”;

api帮助文档 java查看 api文档查询_容器_07

然后我们就能看到在k8s中api的使用方式了;

api帮助文档 java查看 api文档查询_容器_08

当然了,如果你使用的版本不是官网上最新的版本,你也可以点击右上角的内容“Versions”,来切换版本;

api帮助文档 java查看 api文档查询_docker_09

二、使用apiserver

首先我们看下apiserver是否对外提供了服务,他对外提供的方式http访问方式,风格是restUrl;

首先看下apiserver运行的pid是多少;

[root@node1 ~]# ps -ef | grep apiserver
root       5691      1 22 22:37 ?        00:00:08 /usr/local/bin/kube-apiserver --advertise-address=192.168.112.130 --allow-privileged=true --apiserver-count=2 --audit-log-maxage=30 --audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/var/log/audit.log --authorization-mode=Node,RBAC --bind-address=0.0.0.0 --client-ca-file=/etc/kubernetes/ssl/ca.pem --enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota --etcd-cafile=/etc/kubernetes/ssl/ca.pem --etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem --etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem --etcd-servers=https://192.168.112.130:2379,https://192.168.112.131:2379,https://192.168.112.132:2379 --event-ttl=1h --kubelet-certificate-authority=/etc/kubernetes/ssl/ca.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kubernetes.pem --kubelet-client-key=/etc/kubernetes/ssl/kubernetes-key.pem --service-account-issuer=api --service-account-key-file=/etc/kubernetes/ssl/service-account.pem --service-account-signing-key-file=/etc/kubernetes/ssl/service-account-key.pem --api-audiences=api,vault,factors --service-cluster-ip-range=10.233.0.0/16 --service-node-port-range=30000-32767 --proxy-client-cert-file=/etc/kubernetes/ssl/proxy-client.pem --proxy-client-key-file=/etc/kubernetes/ssl/proxy-client-key.pem --runtime-config=api/all=true --requestheader-client-ca-file=/etc/kubernetes/ssl/ca.pem --requestheader-allowed-names=aggregator --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem --tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem --v=1 --feature-gates=RemoveSelfLink=false
root       5733   2302  0 22:38 pts/0    00:00:00 grep --color=auto apiserver
[root@node1 ~]#

从上面的结果中可以看到master节点上apiserver的pid是5691,然后我们根据apiserver的pid来找到apiserver的端口号;

[root@node1 ~]# netstat -tunlp | grep 5691
tcp6       0      0 :::6443                 :::*                    LISTEN      5691/kube-apiserver 
[root@node1 ~]#

从上面可以看到apiserver端口号是6443。

1、查看健康状态

然后我们简单的来测试下apiserver对外提供的健康检查接口;

[root@node1 ~]# curl -k https://localhost:6443/healthz;echo ""
ok
[root@node1 ~]#

可以看到当我们调用apiserver的healthz接口的时候,它给我们返回了OK的字样,说明这个服务是正常的。

2、查看k8s中所有的pod信息

又例如来使用curl命令来调用apiserver的/api/v1/pod这个接口,看下我们这个集群中的所有pod的信息,但是执行的时候报错了:

[root@node1 ~]# curl -k https://localhost:6443/api/v1/pods
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "pods is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API group \"\" at the cluster scope",
  "reason": "Forbidden",
  "details": {
    "kind": "pods"
  },
  "code": 403
}[root@node1 ~]#

提示我们不允许匿名访问,那么我们就给他进行如下配置:

[root@node1 ~]# kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous
clusterrolebinding.rbac.authorization.k8s.io/test:anonymous created
[root@node1 ~]#

然后我们再次访问:

[root@node1 ~]# curl -k https://localhost:6443/api/v1/pods
{
  "kind": "PodList",
  "apiVersion": "v1",
  "metadata": {
    "selfLink": "/api/v1/pods",
    "resourceVersion": "676917"
  },
  "items": [
    {
      "metadata": {
        "name": "springboot-web-demo-5c9446ffbf-prfv4",
        "generateName": "springboot-web-demo-5c9446ffbf-",
        "namespace": "default",
        "selfLink": "/api/v1/namespaces/default/pods/springboot-web-demo-5c9446ffbf-prfv4",
        "uid": "8d61ef15-03a4-44b4-9117-83c6a540e403",
        "resourceVersion": "676328",
------省略部分内容------
[root@node1 ~]#

3、查看k8s中node的信息

又例如我们想看下apiserver中node节点的信息: