一.k8s概念:
从节点的角色来看一个master一个node
1.1Master节点
master是k8s的控制节点叫Control Plane或者叫控制平面,在生产环境中不建议部署集群核心组件外的任何Pod,就是master节点上不允许Pod的,master只负责群集的调度
正常情况master有三个角色
APIServer:APIServer是集群的管理中枢,或者集群的入口,都是APIServer
集群上所有的关于资源的创建配置清单都是先和APIServer通信然后写到ETC的里面
Scheduler:Schedu的Pod的调度中心,主要是通过调度算法将Pod分配到最佳的节点
Controller Manager:Controller Manager是集群状态管理器
ETCD:一般都是部署在集群外面
1.2Node节点
kubelet:负责与master通信协作,管理该节点上的Pod
kube-Proxy:负责各Pod之间的通信和负载均衡.
Runtime:容器运行时,负责对容器的管理.1.26用的是containerd,因为最终他是在容器中运行,咋得也需要一个容器引擎
二.插件
除了主要的组件还有插件最主要的是两个插件一个是coredns
2.1DNS(CoreDns)
coredns是负责整个k8s集群里面的各种负载之间的服务发现的,在这里靠dns起到一个server的主机地址和server的ip一个对应关系,不管这些,还有一些比较特殊的service他是直接pod的ip地址和主机的对应关系
说白了coredns就是做解析的
不需要我们人为的添加任何配置,他会根据你创建的资源对象给你自动的添加做服务发现的.
kubectl get pods -n kube-system
2.2网络插件
网络插件才是真正负责:
1跨主机通信
2给我们每个容器都分配个ip地址
kubectl get pods -n kube-system -owide
#长格式显示
#上图显示的ip172.17.8.*
#这个ip和主机的ip
#他所使用的网络模型是一种特殊的网络,这个pod就和之前学docker的时候网络模型,三种网络模型一个桥接,一个host,一个none
#其中host就是容器的网络和主机网络是同一个网络,这里面通过显示ip如果pod ip显示和你的主机节点网络ip是相同的说明他也是类似的网络模型
#k8s里面有一种网络模型叫hostNetwork
#就是你pod网络事实上使用的主机网络
除了网络插件还有其他插件,其他插件都是可选择的
2.3.Web界面(仪表盘)
Dashboard
一个ui界面
kubectl get service -n kubernetes-dashboard
#查看dashboard的端口号
#然后浏览器VIP加端口号注意是https协议
#获取密钥
kubectl describe secrets -n kube-system $(kubectl get secrets -n kube-system | grep admin-user | awk '{print $1}')
#得到密钥粘贴到dashboard里面
2.4.容器资源监控
Metrics
容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供浏览这些数据的界面
2.5集群层面日志
集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中,这些集中的日志存储提供搜索和浏览接口
kubectl命令行
我们需要整个命令行去不管是查看修改删除各种各种的资源对象的时候都需要通过这个命令行来往成的
在k8s里面有个概念:
除了说容器运行在pod里面是最小的控制单元以外,在k8s集群上有个叫隔离
name space 名称空间 是个隔离空间简写为ns
他逻辑上是个逻辑隔离的一个概念
名称空间就相当于学校有不同的洗,每个系各种班级
可以将class(班级)理解成一个名称空间
比如你找你得去问清楚年纪专业什么系的什么班的,
就像寄送快递一样各种各样的层级关系,那个省市县街道
我们在创建各种对象的时候,首先要把这个对象指定名称空间概念
这个名称空间就可以理解成一个组织,或者一个组
在生产上最初的时候每一个团队都会建立一个名称空间,这个团队的所有的业务都运行在这个名称空间里面,他是在逻辑上隔离的,不是物理隔离
就比如创建一个pod在 在不同的名称空间里面,可以创建名称相同的pod
在同一个名称空间里面就不行,就像同一个目录里面不能创建文件名相同的文件,但是不同目录就可以
kubectl get ns
kubectl get namespace
#默认给我们生成了4个名称空间,下图前四个,最后一个kubernetes-dashboard是自己装的
#一个叫default #默认名称空间
#kube-node-lease 这是node节点的这里面也是空的
#kube-public 公共的 这个也是空的
#kube-system k8s系统级别的pod 里面是我们最初安装的各种各样的组件,不管是网络的 coredns的 etcd的 proxy的 contailler的 scheduler的 还有metrics的 这些都是集群系统的pod 他们都运行在kube-system名称空间里面
kubectl get pods -n kube-system
#通过-n 参数指定名称空间
#最后这个 kubernetes-dashboard 这个是我们安装dashboard的自动创建的名称空间,dashboard的资源都是运行在这个名称空间里面的
#service也是分名称空间的
kubectl get service -n kubernetes-dashboard
在同一个名称空间里面namespace 不能创建名称相同的各种各样的资源对象
百分之90的nginx里百分之90的资源对象都是名称空间级别的,除了名称空间级别就是,集群级别的,下面这个命令这是查节点,节点是集群级别的
k8s从级别上来说有两个一个叫集群级别一个叫名称空间NameSpace级别的概念
#百分之90以上的资源对象都是名称空间级别的集群级别的很少
kubectl get nodes
#查询集群级别的
以后去查各种各样的pod或者资源对象的时候,都要跟一个名称空间
kubectl get pods
kubectl get pods -n defalut
#如果像这样不带任何名称空间他会去default这个名称空间里面去查
官方给我们提供了帮助文档
https://kubernetes.io/zh-cn/docs/reference/kubectl/
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
get
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get
kubectl get pod
#不加-n 默认显示defalut名称空间内容
-o : wide yaml json
kubectl get pod -n kube-system -o wide
#-o是输出的意思ioput 输出一种特定的格式 wide详细显示
[root@k8s-master1 ~]# kubectl get pods kube-proxy-pnqr8 -n kube-system
NAME READY STATUS RESTARTS AGE
kube-proxy-pnqr8 1/1 Running 2 (13m ago) 13h
#-o yaml 他会把你的yaml格式显示出来
[root@k8s-master1 ~]# kubectl get pods kube-proxy-pnqr8 -n kube-system -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
date: "1690980570"
creationTimestamp: "2023-08-02T12:49:30Z"
generateName: kube-proxy-
labels:
controller-revision-hash: 865ccbc4bc
k8s-app: kube-proxy
pod-template-generation: "2"
name: kube-proxy-pnqr8
#下面省略
#-o json 他会把你的json格式显示出来
[root@k8s-master1 ~]# kubectl get pods kube-proxy-pnqr8 -n kube-system -o json
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"annotations": {
"date": "1690980570"
},
"creationTimestamp": "2023-08-02T12:49:30Z",
"generateName": "kube-proxy-",
"labels": {
"controller-revision-hash": "865ccbc4bc",
"k8s-app": "kube-proxy",
"pod-template-generation": "2"
},
"name": "kube-proxy-pnqr8",
#下面省略
# get 命令的基本输出
kubectl get services # 列出当前命名空间下的所有 services
kubectl get pods --all-namespaces # 列出所有命名空间下的全部的 Pods
kubectl get pods -o wide # 列出当前命名空间下的全部 Pods,并显示更详细的信息
kubectl get deployment my-dep # 列出某个特定的 Deployment
kubectl get pods # 列出当前命名空间下的全部 Pods
kubectl get pod my-pod -o yaml # 获取一个 pod 的 YAML
#以 ps 输出格式列出具有指定 NAME 的单个复制控制器
kubectl get replicationcontroller web
#获取rc对象
#在“apps”API 组的“v1”版本中以 JSON 输出格式列出部署
kubectl get deployments.v1.apps -o json
#获取deployments对象
#以 JSON 输出格式列出由“pod.yaml”中指定的类型和名称标识的 pod
kubectl get -f pod.yaml -o json
#通过文件获取
#使用 kustomization.yaml 列出目录中的资源 - 例如 dir/kustomization.yaml
kubectl get -k dir/
#通过目录获取
#只返回指定pod的phase值
kubectl get -o template pod/web-pod-13je7 --template={{.status.phase}}
#通过模板获取
#以 ps 输出格式列出所有复制控制器和服务
kubectl get rc,services
#一次性可以获取两个 两种资源对象
create
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#create
基于一个文件来去创建resource(资源对象)这个文件通常是个json或者yaml,以下资源都可以通过文件创建
#create
clusterrole
clusterrolebinding
configmap
cronjob
deployment
ingress
job
namespace
poddisruptionbudget
priorityclass
quota
role
rolebinding
secret
secret docker-registry
secret generic
secret tls
service
service clusterip
service externalname
service loadbalancer
service nodeport
serviceaccount
#使用 pod.json 中的数据创建 pod
kubectl create -f ./pod.json
#根据传递到 stdin 的 JSON 创建一个 pod
cat pod.json | kubectl create -f -
#以 JSON 格式编辑 docker-registry.yaml 中的数据,然后使用编辑后的数据创建资源
kubectl create -f docker-registry.yaml --edit -o json
run
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#run
通过命令行来启动一个pod
#启动 nginx Pod
kubectl run nginx --image=nginx
#启动 hazelcast pod 并让容器暴露端口 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
#启动 hazelcast pod 并在容器中设置环境变量“DNS_DOMAIN=cluster”和“POD_NAMESPACE=default”
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
#指定环境变量--env
#启动 hazelcast pod 并在容器中设置标签“app=hazelcast”和“env=prod”
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
#主机默认都有标签,每个节点都对应的标签
[root@k8s-master1 ~]# kubectl get nodes --show-labels
k8s-master1 Ready control-plane 14h v1.26.3
beta.kubernetes.io/arch=amd64(平台),
beta.kubernetes.io/os=linux(操作系统),
kubernetes.io/arch=amd64,kubernetes.io/hostname.io/os(host主机名称)=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
#试运行;打印相应的API对象而不创建它们
kubectl run nginx --image=nginx --dry-run=client
#这个事测试这个有没有故障有没有问题 并不是真正的创建
#创建一个
[root@k8s-master1 ~]# kubectl run nginx-2 --image=nginx:1.22.1 --dry-run=client
pod/nginx-2 created (dry run)
#但是查不到
[root@k8s-master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 38m
[root@k8s-master1 ~]# kubectl run nginx-1 --image=nginx:1.22.1
pod/nginx-1 created
#创建一个名为nginx-1的pod 镜像名字为nginx:1.22.1
#如果创建的时候没有跟 -n 名称空间这个参数,那么默认创建到default里面
[root@k8s-master1 ~]# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 83s
#创建个名称空间
kubectl create ns linux39
kubectl run nginx-1 --image=nginx:1.22.1 -n linux39
#创建名为nginx-1的pod 放到linux39名称空间里面
expose
把某个服务的端口号给你映射出去,这个映射是通过service的资源对象映射出去
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose
为复制的 nginx 创建一个服务,该服务在端口 80 上提供服务并连接到端口 8000 上的容器
kubectl expose rc nginx --port=80 --target-port=8000
#操作一个,我们将刚才创建的nginx-1 给映射出去
[root@k8s-master1 ~]# kubectl expose pod nginx-1 --port=80
service/nginx-1 exposed
[root@k8s-master1 ~]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 14h
nginx-1 ClusterIP 10.111.231.202 <none> 80/TCP 4m59s
#这就相当于把nginx-1容器
#查看以下nginx-1 pod
[root@k8s-master1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-1 1/1 Running 0 47m 192.17.65.195 k8s-node3.guoguo.com <none>
[root@k8s-master1 ~]# curl 192.17.65.195 &> /dev/null && echo $?
0
#是可以访问的,在当前集群任何一个节点都可以访问这个pod
#[root@k8s-master1 ~]# kubectl expose pod nginx-1 --port=80
#刚才这条命令的意思是 创建了一个service,基于这个pod创建service ,他会把你pod名称会生成和pod名称相同的service资源对象叫nginx-1 他也有个ip地址 10.111.231.202 #kubectl get service 可以查到 如果指定了名称空间需要加-n
[root@k8s-master1 ~]# curl 10.111.231.202 &> /dev/null && echo $?
0
#他也是可以访问到的
#service在pod节点之上加了 一层service 资源对象,事实上我们访问service 的时候 service会跳转到pod,可以理解成反向代理加负载均衡的功能,如果有多个相同的pod,它可以进行调度,起到一个负载均衡的效果
delete
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#delete
删除 删除各种各样的资源对象
#使用 pod.json 中指定的类型和名称删除 pod
kubectl delete -f ./pod.json
#从包含 kustomization.yaml 的目录中删除资源 - 例如 dir/kustomization.yaml
kubectl delete -k dir
#根据传递到 stdin 的 JSON 中的类型和名称删除 pod
cat pod.json | kubectl delete -f -
#删除具有相同名称“baz”和“foo”的 Pod 和服务
kubectl delete pod,service baz foo
#删除标签 name=myLabel 的 Pod 和服务
kubectl delete pods,services -l name=myLabel
#以最小延迟删除 Pod
kubectl delete pod foo --now
#强制删除死节点上的 Pod
kubectl delete pod foo --force
#删除所有 Pod
kubectl delete pods --all
#操作一个
[root@k8s-master1 ~]# kubectl delete pod -n linux39 nginx-2
pod "nginx-2" deleted
#查看以下
[root@k8s-master1 ~]# kubectl get pod -n linux39
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 52m
#不光可以删除pod,还可以删除名称空间 删除service
apply
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply
基于文件去创建资源对象基于json或者yaml文件创建资源对象的命令行
#将 pod.json 中的配置应用到 pod
kubectl apply -f ./pod.json
#从包含 kustomization.yaml 的目录应用资源 - 例如 dir/kustomization.yaml
kubectl apply -k dir/
#将传递到 stdin 的 JSON 应用到 pod
cat pod.json | kubectl apply -f -
或者命令行也可以看到帮助
kubectl apply --help
create和apply类似,效果一样,但是apply更利于更新
autoscale
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#autoscale
自动更新
diff
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#diff
对比文件
pod.json 中包含的差异资源
kubectl diff -f pod.json
从 stdin 读取差异文件
cat service.yaml | kubectl diff -f -
edit
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#edit
编辑,这个用的比较多,修改已经存在的资源对象
编辑名为“docker-registry”的服务
kubectl edit svc/docker-registry
使用替代编辑器
KUBE_EDITOR="nano" kubectl edit svc/docker-registry
使用 v1 API 格式编辑 JSON 中的作业“myjob”
kubectl edit job.v1.batch/myjob -o json
在 YAML 中编辑部署“mydeployment”并将修改后的配置保存在其注释中
kubectl edit deployment/mydeployment -o yaml --save-config
将创建好的资源对象,进行修改,之前修改ipvs的时候
kubectl edit configmaps -n kube-system kube-proxy
mode: "ipvs"
#修改模式为ipvs
kustomize
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#kustomize
包管理工具k8s给我们提供了两种包管理工具,包管理工具相当于Linux的Ubuntu里的apt或centos的yum
helm/kustmize 两种包管理工具
label
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#label
标签,可以给主节点打标签,给pod打标签
#给pod修改标签,添加标签
#看下刚才创建的nginx-1
[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-1 1/1 Running 0 3h29m run=nginx-1
#因为我们是run启动的,它默认标签是run=nginx-1,我们可以给他加个标签
[root@k8s-master1 ~]# kubectl label pods nginx-1 app=linux39-nginx
pod/nginx-1 labeled
#修改标签为app=linux39-nginx,他的标签类型是key value 键值对的格式
[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-1 1/1 Running 0 3h31m app=linux39-nginx,run=nginx-1
#查看以下,这样就多了一个标签
#修改标签
[root@k8s-master1 ~]# kubectl label pods nginx-1 app=linux39 --overwrite
pod/nginx-1 labeled
#将app的标签修改为 app=linux39
[root@k8s-master1 ~]# kubectl label pods nginx-1 app-
pod/nginx-1 unlabeled
#删除app标签 在app后面加"-"号
[root@k8s-master1 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-1 1/1 Running 0 3h40m run=nginx-1
#就剩下run了
#还可以通过标签来过滤
root@k8s-master1 ~]# kubectl get pod -n kube-system --show-labels
etcd-k8s-master1 1/1 Running 2 (4h27m ago) 17h component=etcd,tier=control-plane
etcd-k8s-master2.guoguo.com 1/1 Running 2 (4h27m ago) 17h component=etcd,tier=control-plane
etcd-k8s-master3.guoguo.com 1/1 Running 2 (4h26m ago) 17h component=etcd,tier=control-plane
#省略后面的
#比如我们要过滤出 component=etcd 这个标签
#在后面加个 -l 标签名 就可以
[root@k8s-master1 ~]# kubectl get pod -n kube-system -l component=etcd
NAME READY STATUS RESTARTS AGE
etcd-k8s-master1 1/1 Running 2 (4h28m ago) 17h
etcd-k8s-master2.guoguo.com 1/1 Running 2 (4h28m ago) 17h
etcd-k8s-master3.guoguo.com 1/1 Running 2 (4h28m ago) 17h
不光是pod所有的资源对象都可以加标签
#给master1节点加个不可调度
[root@k8s-master1 ~]# kubectl label nodes k8s-master1 node-role.kubernetes.io/master=NoSchedule
node/k8s-master1 labeled
#加上这个标签就无法进行调度了
[root@k8s-master1 ~]# kubectl get nodes --show-labels
#下图多了这个标签
#node-role.kubernetes.io/master=NoSchedule
patch
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#patch
更新,基于文件或者打印
replace
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#replace
他有两种方式一种基于文件的一种是标准化输入的方式
rollout
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#rollout
回滚
attach
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#attach
和docker exec 一样进入指定的容器
exec
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#exec
在容器外面执行命令
[root@k8s-master1 ~]# kubectl exec -ti nginx-1 -- ls /
bin docker-entrypoint.d home media proc sbin tmp
boot docker-entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
#进入nginx-1 执行ls / 命令
[root@k8s-master1 ~]# kubectl exec nginx-1 -- hostname
nginx-1
#执行hostname 命令
[root@k8s-master1 ~]# kubectl exec nginx-1 -- cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
#执行任何命令都可以,前提是要有这个命令
进入某个容器
[root@k8s-master1 ~]# kubectl exec -it nginx-1 -- /bin/bash
#进入这个容器
root@nginx-1:/# cat /etc/os-release
#执行命令
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
##注意如果pod里面有多个容器,需要-c执行那个容器否则会进去default容器中去
切换到原始终端模式;将 stdin 从 pod mypod 发送到 ruby-container 中的“bash”,并将 stdout/stderr 从“bash”发送回客户端
kubectl exec -it -n <namespace> <pod-name> -c <container-name> -- <command>
#其中:
#<pod-name> 是您要进入的 Pod 的名称。
#<container-name> 是要在其中执行命令的容器的名称。
#<command> 是您要在容器内部执行的命令。
#如果 Pod 中只有一个容器,您可以忽略 -c 参数。但如果 Pod 包含多个容器,您需要通过 -c 参数指定要执行命令的容器。
#举例来说,如果有一个名为 my-pod 的 Pod,其中包含两个容器,名称分别为 container-1 和 container-2,您可以使用以下命令来在 container-2 中执行命令:
kubectl exec -it my-pod -c container-2 -- /bin/bash
#这将在 my-pod Pod 的 container-2 容器内启动一个交互式的 Bash shell。
#所以,在您的情况下,如果 nginx-1 Pod 只有一个容器,您可以直接使用之前提供的命令,如果它有多个容器,并且您想要在特定的容器中执行命令,您可以使用 -c 参数来指定容器名称。
cp
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp
把pod里面某一个文件复制出来,这些通常需要workdir的参数,工作目录copy
describe
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#describe
这个用的比较多,我们后面查看后面创建各种各样的资源对象出错了
比如创建一个
[root@k8s-master1 ~]# kubectl run nginx-2 --image=nginx:1.26.1
pod/nginx-2 created
[root@k8s-master1 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-1 1/1 Running 0 4h
nginx-2 0/1 ErrImagePull 0 35s
#它创建不出来它会报错,不管报错不报错都可以通过这个命令来查看
[root@k8s-master1 ~]# kubectl describe pods nginx-2
#他会给你打印整个创建过程的详细信息
#成功or失败
logs
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs
查看日志
[root@k8s-master1 ~]# kubectl logs nginx-1
port-forward
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#port-forward
就是把容器某个端口号和你节点本地端口号做个绑定关系
[root@k8s-master1 ~]# kubectl port-forward nginx-1 80
#前提pod里面得有这个端口号然后本地还得空余这个端口号,没什么意义
top
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#top
看node或者pod资源使用情况
#查看node
[root@k8s-master1 ~]# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-master1 116m 5% 1105Mi 59%
k8s-master2.guoguo.com 100m 5% 1014Mi 54%
k8s-master3.guoguo.com 128m 6% 1225Mi 65%
k8s-node1.guoguo.com 40m 2% 579Mi 31%
k8s-node2.guoguo.com 46m 2% 591Mi 31%
k8s-node3.guoguo.com 39m 1% 579Mi 30%
#查看pod
[root@k8s-master1 ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx-1 0m 3Mi
api-versions
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#api-versions
查看当前k8s所能支持的api的版本
[root@k8s-master1 ~]# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
nginx-1 0m 3Mi
[root@k8s-master1 ~]# kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
batch/v1
certificates.k8s.io/v1
coordination.k8s.io/v1
crd.projectcalico.org/v1
discovery.k8s.io/v1
events.k8s.io/v1
flowcontrol.apiserver.k8s.io/v1beta2
flowcontrol.apiserver.k8s.io/v1beta3
metrics.k8s.io/v1beta1
networking.k8s.io/v1
node.k8s.io/v1
policy/v1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
api-resources
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#api-resources
k8s所支持的资源对象
[root@k8s-master1 ~]# kubectl api-resources
#查询方式
cluster-info
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cluster-info
查看集群信息的
[root@k8s-master1 ~]# kubectl cluster-info
Kubernetes control plane is running at https://172.17.0.200:16443
CoreDNS is running at https://172.17.0.200:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
explain
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#explain
类似于帮助,遇到不会写的用explain查询
[root@k8s-master1 ~]# kubectl explain pod
标签:master1,kubectl,io,介绍,nginx,命令行,pod,k8s
From: https://blog.51cto.com/u_15971294/6949993