前言
Kubernetes API是管理各种资源对象的唯一入口,它提供了一个RESTful风格的CRUD(Create、Read、Update和Delete)接口用于查询和修改集群状态,并将结果存储在集群状态存储系统etcd中。事实上,API Server也是用于更新etcd中资源对象状态的唯一途径,Kubernetes的其他所有组件和客户端都要通过它完成查询或修改操作
kubectl的核心功能在于通过API Server操作Kubernetes的各种资源对象,它支持3种操作方式,其中直接命令式使用最为简便,是了解Kubernetes集群管理的有效途径。
对于Kubernetes中,Pod、Deployment和Service等都是所谓的资源类型,它们由相应类型的对象集合而成。
kubectl命令格式
语法格式:
kubectl [command] [TYPE] [NAME] [flags]
▪command:对资源执行相应操作的子命令,例如get、create、delete、run等;
▪TYPE:要操作的资源类型,例如pods、services等;类型名称大小写敏感,但支持使用单数、复数或简写格式。
▪NAME:要操作的资源对象名称,大小写敏感;省略时,则表示指定TYPE的所有资源对象;同一类型的资源名称可于TYPE后同时给出多个,也可以直接使用TYPE/NAME的格式来为每个资源对象分别指定类型。
▪flags:命令行选项,例如-s或--server等;另外,get等命令在输出时还有一个常用的标志-o 用于指定输出格式
常用命令
命令 |
命令类别 |
功能说明 |
create |
基础命令 |
通过文件或者标准输入创建资源 |
expose |
基础命令 |
基于RC,Service,Deployment或Pod创建Service资源 |
run |
基础命令 |
在集群中以Pod形式运行指定的镜像 |
set |
基础命令 |
设置目标资源对象的特定属性 |
get |
基础命令 |
显示一个或多个资源 |
explain |
基础命令 |
打印指定资源的内置文档 |
edit |
基础命令 |
编辑资源 |
delete |
基础命令 |
基于文件名,stdin,资源或名字,以及资源和选择器删除资源 |
rollout |
部署命令 |
管理资源的滚动更新 |
scale |
部署命令 |
伸缩Deployment,ReplicaSet,RC或Job的规模 |
autoscale |
部署命令 |
对 Deploymcnt、ReplicaSet或RC 进行自动伸缩 |
certifieate |
部署命令 |
配置数字证书资源 |
cluster-info |
部署命令 |
打印集群信息 |
top |
集群管理命令 |
打印资源(CPU/Memory/Storage)使用率 |
cordon |
集群管理命令 |
将指定node设定为“不可用”(unschedulable)状态 |
uncordon |
集群管理命令 |
将指定 node 设定为“可用"(schedulable)状态 |
drain |
集群管理命令 |
“排空”Nodc 上的Pod 以进人“维护”模式 |
taint |
集群管理命令 |
为Node 声明污点及标准行为 |
describe |
集群管理命令 |
显示指定的资源或资源组的详细信息 |
logs |
排错以及调试命令 |
显示一个Pod内某容器的目志 |
attach |
排错以及调试命令 |
附加终端至一个运行中的容器 |
exec |
排错以及调试命令 |
在容器中执行指定命令 |
port-forward |
排错以及调试命令 |
将本地的一个或多个端口转发至指定的Pod |
prоxy |
排错以及调试命令 |
创建能够访间KuberetesAPlServer 的代理 |
cp |
排错以及调试命令 |
在容器间复制文件或目录 |
auth |
排错以及调试命令 |
打印授权信息 |
diff |
高级命令 |
对比当前版本与即将应用的新版本的不同 |
apply |
高级命令 |
基于文件或sldin将配置应用于资源 |
patch |
高级命令 |
使用策略合并补丁更新资源字段 |
replace |
高级命令 |
基于文件或sldin替换一个资源 |
walt |
高级命令 |
等待一个或多个资源上的指定境况(condition) |
convert |
高级命令 |
为不同的API版本转换配置文件 |
kuslomize |
高级命令 |
某于目录或URL构建kustomization日标 |
label |
设置命令 |
更新指定资源的label |
annofate |
设置命令 |
更新资源的 annotation |
completion |
设置命令 |
输出指定的shell(例如bash)的补全码 |
version |
其它命令 |
打印Kubcmetes服务端和客户端的版本信息 |
api-versions |
其它命令 |
以group/version格式打印服务器支持的API版本信息 |
api-resourees |
其它命令 |
打印API支持的资源类型 |
confg |
其它命令 |
配置kubcconig文件的内容 |
plugin |
其它命令 |
运行命令行插件 |
alpha |
其它命令 |
仍处于 Alpha 阶段的子命令 |
kubectl get命令常用输出格式
此外,kubectl还有许多通用选项,这个可以使用kubectl options命令获取。其中比较常用的选项如下所示。
▪-s或--server:指定API Server的地址和端口。
▪--kubeconfig:使用的kubeconfig配置文件路径,默认为~/.kube/config。
▪-n或--namespace:命令执行的目标名称空间。
常见命令举例
1.加入节点
节点加入集群的命令格式:
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
由于默认token的有效期为24小时,当过期之后,该token就不可用了,解决方法如下:
重新生成新的token ==> kubeadm token create
1.查看当前的token列表
kubeadm token list
2.重新生成新的token
kubeadm token create --print-join-command
3.再次查看当前的token列表
kubeadm token list
4.获取ca证书sha256编码hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
5.执行命令将节点加入集群
通过上面第三步获取到的命令,将节点加入集群
kubeadm join 10.100.5.122:6443 --token 新的token --discovery-token-ca-cert-hash sha256:新的值
2.查看资源对象
kubectl get nodes
查看所有的pod
查看创建pod的命令,一般需要指定命名空间。
kubectl get pods -A 显示所有的pods
kubectl get pods -n namespace 显示namespace命名空间下的pods
查看pod的详细信息以及报错信息都可以通过下面的命令
kubectl describe pod redis-php
kubectl get namespace
3.创建资源对象
kubectl create namespace dev
kubectl create deployment demoapp --image="ikubernetes/demoapp:v1.0" -n dev
4.打印资源对象的详细信息
kubectl get pods demoapp-7c58cd6bb-7d6vb -o yaml -n dev
kubectl describe查看资源的详细情况
5.打印容器中的日志信息
kubectl logs命令
6.在容器中执行命令
kubectl exec demoapp-7c58cd6bb-7d6vb -n dev -- ps
7.删除资源对象
kubectl delete命令能够删除指定的资源对象,例如下面的命令可删除default名称空间中名为demoapp-svc的Service资源对象
若要删除指定名称空间中的所有某类对象,可以使用类似kubectl delete TYPE --all -n NS格式的命令
8.k8s命令对node调度
cordon,drain,delete
cordon 停止调度
影响最小,只会将node调为SchedulingDisabled
之后再发创建pod,不会被调度到该节点
旧有的pod不会受到影响,仍正常对外提供服务
恢复调度
kubectl uncordon node_name
drain 驱逐节点
首先,驱逐node上的pod,其他节点重新创建
接着,将节点调为** SchedulingDisabled**
在对节点维护的时候,一般操作是先将节点设置成不可调度,然后再驱逐node上的pod,驱逐的pod会在其它node上重新创建。如下:
1) 封锁节点,先让节点变的不可调度
kubectl cordon
2)使用 kubectl drain 安全驱逐节点上面所有的 pod
kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data
恢复调度
上面两种方式会使节点变得无法调度,可以通过下面的命令恢复调度
kubectl uncordon node_name
9.删除节点
不需要这个节点的话,可以选择删除节点,第一步通过drain驱逐所有的节点,然后在删除掉节点。
kubectl delete nodes node_name
这种方式比较暴力,将被删节点从master管理范围内移除,master对其失去管理控制,若想使node重归麾下,必须在node节点重启kubelet。
如果需要彻底删除这个节点,重启kubectl也不能恢复的话,需要到node节点上执行下面的操作:
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
systemctl start kubelet
原文始发于微信公众号(信安路漫漫):k8s系列3之kubectl常用命令
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论