主要内容:
在kubernetes平台上理解掌握各种控制器的用法:掌握kubectl管理命令、掌握POD原理、掌握集群调度的规则、熟悉控制器资源文件;
一、kubectl 常用命令
Kubectl是用于控制Kubernetes集群的命令行工具;
- - 格式:kubectl [command] [TYPE] [NAME] [flags]
Command:子命令,如create、get、describe、delete;
TYPE:资源类型,可以表示为单数,复数或缩写形式;
Name:资源的名称,如果省略,则显示所有资源信息;
Flags:指定可选标志,或附加的参数;
1、Kubectl基础命令
命令格式 |
命令说明 |
kubectl run 资源名称 -参数 --image=镜像名称:标签 |
创建资源对象,常用参数-i交互,-t终端 |
kubectl exec -it 容器id 执行的命令 |
同 docker exec 指令,进入容器内 |
kubectl attach 容器id |
同 docker attach 指令,连接容器 |
kubectl get 查询资源 [可选参数-o wide 显示主机信息] [可选参数-o yaml 显示YAML信息] |
常用查询资源 node | deployment | pod | namespace |
kubectl describe 资源类型 资源名称 |
查询资源的详细信息 |
kubectl logs 容器id |
查看容器控制台的标准输出(正常显示为空) |
kubectl delete 资源类型 资源名称 |
删除指定的资源 |
kubectl create | apply | delete -f 资源文件 |
执行指定的资源文件 |
示例1:Kubectl get 查询资源
常用资源类型:node | deployment | pod | namespace
1)查询node资源
- 格式:kubectl get node [节点主机名] //查询节点状态
- 格式:kubectl get node -o wide [节点主机名] //查询节点状态和显示主机信息
- 格式:kubectl get node -o yaml [节点主机名] //查询节点状态和显示YAML信息
例如:查看集群的节点状态
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 21h v1.17.6
node-0001 Ready <none> 17h v1.17.6
node-0002 Ready <none> 17h v1.17.6
node-0003 Ready <none> 17h v1.17.6
例如:查看集群的节点状态和显示主机信息
[root@master ~]# kubectl get node -o wide master
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready master 45h v1.17.6 192.168.1.21 <none> CentOS Linux 7 (Core) 3.10.0-1160.15.2.el7.x86_64 docker://18.6.3
例如:查询节点状态和显示YAML信息
[root@master ~]# kubectl get node -o yaml
2)查询pod资源
- 格式:kubectl get pod //查询pod容器资源
- 格式:kubectl get namespace //查询系统命名空间
补充:系统的命名空间
① default,默认的命名空间,不声明命名空间的POD默认保存在default;
② kube-node-lease,为高可用提供心跳监视的命名空间;
③ kube-public,公共数据,所有用户都可以读取;
④ kube-system,系统服务对象所使用的命名空间;
例如:查询Pod容器资源
[root@master ~]# kubectl get pod
No resources found in default namespace. //一般查看的是默认命名空间内容
[root@master ~]# kubectl get namespaces //查看所有的命名空间
NAME STATUS AGE
default Active 21h
kube-node-lease Active 21h
kube-public Active 21h
kube-system Active 21h
由于默认的命名空间没有Pod容器资源,所以在kube-system系统命名空间查询;
[root@master ~]# kubectl -n kube-system get pod //[-n]指定命名空间查询Pod容器资源
NAME READY STATUS RESTARTS AGE
coredns-f6bfd8d46-b5lkt 1/1 Running 0 21h
coredns-f6bfd8d46-h4c2v 1/1 Running 0 21h
etcd-master 1/1 Running 0 21h
kube-apiserver-master 1/1 Running 0 21h
kube-controller-manager-master 1/1 Running 0 21h
kube-flannel-ds-amd64-kcm7p 1/1 Running 0 16h
kube-flannel-ds-amd64-qmbcq 1/1 Running 0 16h
kube-flannel-ds-amd64-qst8m 1/1 Running 1 16h
kube-flannel-ds-amd64-rq8qb 1/1 Running 0 16h
kube-proxy-56dh5 1/1 Running 1 17h
kube-proxy-jwc9b 1/1 Running 1 21h
kube-proxy-nzchw 1/1 Running 1 17h
kube-proxy-sb588 1/1 Running 1 17h
kube-scheduler-master 1/1 Running 0 21h
解释:
- NAME表示POD资源的容器名;
- READY表示当前就绪状态(m/n,n表示需要几个,m表示当前运行几个);
- STATUS表示当前容器的状态;
- RESTARTS表示重启次数,重启次数阈值过高,需要排查是否有问题;(当容器有控制器,控制器会在容器死亡时依据策略对容器进行重启)
- AGE表示启动服务容器运行的时间;
3)查询deployment资源控制器
- 格式:kubectl get deployment.apps //查询资源控制器
[root@master ~]# kubectl -n kube-system get deployments.apps //查询资源控制器名称
NAME READY UP-TO-DATE AVAILABLE AGE
coredns 2/2 2 2 46h
示例2:常用排错的三个命令(get、describe、logs)
排错流程:Kubernetes排错比较困难,需要了解整个集群的相关配置信息,一般排错是综合利用get、describe、logs来完成;
① kubectl get(查询POD容器资源,容器的STATUS状态信息)
②