k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?

Posted 公号运维家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?相关的知识,希望对你有一定的参考价值。

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_linux


k8s中有很多的api,我们的yaml文件开头一定要申明一个apiversion,怎么知道该使用哪个api呢?如何来选择正确的api呢?我们又该如何来开发一个基于k8s的容器管理平台,开发k8s容器管理平台的思路又是什么呢?本文我们来看看。

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_linux_02


1


查看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官网之后界面如下虽然右上角有切换语言的选项,不建议切换成中文,因为当你切换了之后,有一些东西是显示不出来的,这里就按照英文的来演示

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_linux_03



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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_spring_04


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_spring_05

弹出如下界面:

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_linux_06


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_spring_07


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_linux_08


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_flink_09


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_flink_10


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

k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?_flink_11

2、使用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节点的信息:

剩余内容请转至VX公众号 “运维家” ,回复 “154” 查看。

------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------
------ 以下内容为防伪内容,忽略即可 ------
linux基础学习linux内核详解linux搭建nexuslinux系统补丁查看linux查看未分区linux组合键linux文件安装位置查看当前linux环境用户linux挂载u盘已经挂载Linux用户三天不能改密码linux编辑文件vim命令linux下渲染工具linux开机自动挂载存储运维linux系统基础linux中attribLinux关掉占用的端口linux改名主机名linux计数txt文件linux单用户没有命令linux文件如何运行程序



以上是关于k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?的主要内容,如果未能解决你的问题,请参考以下文章

ansible搭建k8s

k8s-业务访问入口的LB如何部署

k8s和docker区别

通过minio operator在k8s中部署minio tenant集群

ML.NET机器学习API容器化与Azure DevOps实践:持续集成与k8s持续部署

超详细!K8S 面试题总结