kubectl工具
kubectl工具:
管理k8s集群的工具,所有命令都是传递给了apiserver
部分命令docker命令相同,功能是一样的,也是对容器的管理
kubectl命令:
子命令:
create #与apply命令作用一样,可手动创建pod
expose #创建一个service
run #运行一个pod
set #动态更新镜像版本,默认灰度发布pod
explain #命令说明,命令在yml中的写法
get #简单查看
edit #动态编辑配置
delete
rollout #应用回滚
scale #对pod动态调整
autoscale #自动hpa
certificate #证书
cluster-info #集群状态
top #集群状态
cordon #警戒线,标记node不参与pod调度
uncordon #取消警戒线标记为cordon的node
drain #驱逐node上的pod,用户node下线等场景使用
taint #给node标记污点,实现反亲和pod与node反亲和性
describe #查看详情
logs #查看日志
attach
exec
port-forward #端口转发
proxy #运行一个代理
cp #容器间复制文件
auth
debug
diff
apply #动态配置
patch #打补丁
replace #替换
wait #定义触发器
kustomize
label #标签管理,可实现pod与node亲和性
annotate #其他键值标记数据
completion #命令补全
api-resources #api资源
api-versions #api资源
config #kube客户端配置
plugin
version
通用选项:
-n 命名空间 #显示指定命名空间
-w #动态显示
-l 标签名 #显示有此标签的的pod
-L 标签名 #显示此标签的value
--show-labels #显示所有标签
对象创建方式:
命令式:
ceate、run、expose...
命令式配置文件: #少用
create -f xxx
delete -f
replace -f xxx #替换
声明式配置文件:
apply -f
patch
基础命令:
必须掌握的
kubectl create:
可创建集群所有资源对象,后有apply可替代
子命令:
clusterrole
clusterrolebinding
configmap
cronjob
deployment
ingress
job
namespace
poddisruptionbudget
priorityclass
quota
role
rolebinding
secret #用于加密
docker-registry #保存docker仓库认证相关
generic #保存通用的
tls #保存证书相关
service
serviceaccount
选项:
--dry-run #仅测试,不运行
-o 格式 #按格式输出
json
yaml #yml语法
例:
#创建名称空间
kubectl create namespace my-ns1
kubectl get namespaces
kubectl delete namespace my-ns1
#命令行创建configmap
kubectl create configmap xxx --from-literal=t1=123 --from-literal=t2=qwe
kubectl get cm
#创建secret,保存mysql的密码
ubectl create secret generic mysql-root-pw --from-literal=passwd=123456
#直接生成yaml的配置清单文件,不用写了
kubectl create ns xxx --dry-run -o yaml
kubectl run:
运行容器
kubectl run NAME --image=image [--env="key=value"] [--port=port][--dry-run=server|client] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
例:
kubectl run t1 --image=alpine sleep 36000
kubectl edit:
动态修改配置,立即生效
资源类型:
servic
pod
deployment
......
例:
kubectl get service
kubectl edit service nginx-service
kubectl get:
简单显示资源信息
nodes #列出集群中所有节点状态
pod #列出pod
service #显示service的信息
namespace #命名空间
endpoints #service代理的后端,只有service代理的才是ep
.....
选项:
-o #以指定格式输出
json #json格式
yaml #yaml格式
wide #详细信息
custom-columns=...
custom-columns-file=...
go-template=...
go-template-file=...
jsonpath=...
jsonpath-file=...
-A #显示所有命名空间
-n 命名空间 #先睡指定命名空间的pod
-l 标签 #使用标签选择器
'=', '==', '!='
--watch #持续显示
例:
kubectl get namespaces
kubectl get pod -n kube-system
kubectl get pod --show-labels
kubectl get pod -l app
kubectl get pod -l app -L app
kubectl get pod -l app,xxx=321
#自定义两个字段,CONTAINER和IMAGE,列的数据取值是容器名称和容器镜像
kubectl get pod ngx-sts-2 -o custom-columns=CONTAINER:.spec.containers[0].name,IMAGE:.spec.containers[0].image
#以json格式查询
kubectl get po b1-689bb88886-2dssl -o jsonpath={.spec.containers[0].image} ; echo
kubectl get po b1-689bb88886-2dssl -o template --template={{.status.qosClass}} ;echo
kubectl describe:
详细显示,使用与get相同
子命令:
nodes #列出集群中所有节点状态
pod #列出pod
service #显示service的信息
...
例:
kubectl describe service -A
kubectl scale:
可动态调整pod的数量
例:
kubectl scale sts ngx --replicas=3
kubectl logs:
查看pod日志,与docker功能一样
kubectl logs [pod] [容器名]
选项:
-f #持续模式,保持前台输出日志
--previous #查看pod上一次退出前的日志,默认查看pod日志时只能看当前的,如果pod上次是异常退出,正常情况是看不到日志的,需加选项
kubectl plugin
安装kubectl插件
参考:https://zhuanlan.zhihu.com/p/95664681
kubectl-debug使用时,需要在pod所在的运行节点安装:lxcfs
注:插件名称不可以重复,插件名与内置命令重复时,内置的生效
例:配置echo为插件
ln -s `which echo` /usr/local/bin/kubectl-echo
#查看
kubectl plugin list
配置命令:
kubectl label:
对资源进行打标签
子命令:
pods
service
node
选项:
--overwrite #确认覆盖
例:
kubectl label po pod-t1 xxx=123
kubectl get pod --show-labels
kubectl label pod pod-t1 xxx=321 --overwrite
kubectl get pod --show-labels
kubectl apply:
支持yml文件的动态修改,执行时只会生效改动过的
文件修改有历史记录,支持回滚
选项:
-f yaml文件 | - #通过文件创建,可使用互联网的yaml清单,或者从管道获取数据流
--annotation=描述信息 #创建时指定描述,与git commit功能类似,在rollout history命令出可查看历史记录,方便回滚
--record=true #作用同上,仅记录命令,但提示被弃用
例:
kubectl apply -f nginx.yml --annotation=create v1
#直接从管道读取窗机
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: pod-t1
spec:
restartPolicy: Never
containers:
- name: container
image: nginx
resources:
limits:
nvidia.com/gpu: 1
EOF
#故
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pod-t1
spec:
restartPolicy: Never
containers:
- name: container
image: nginx
resources:
limits:
nvidia.com/gpu: 1
EOF
kubectl annotate:
对资源标记注解,可实现历史记录描述,后续有回滚需求时可看描述信息
kubectl annotate 控制器 控制器名 k8s注解类型/具体信息=内容
其他选项:
在其他子命令中也可使用的选项,仅用于实现annotate的描述信息功能
--annotation=描述信息
--record=true
例1: 记录命令的描述信息
#方法1: kubectl annotate实现
kubectl annotate deploy/nginx kubernetes.io/change-cause='update image
to 1.19'
#方法2: --annotation选项实现
kubectl set image deploy/nginx nginx=nginx:1.19 --annotation=update image to 1.19
#方法3:--record=true选项实现
kubectl set image deploy/nginx nginx=nginx:1.19 --record=true
kubectl rollout history deploy nginx
kubectl patch:
对资源进行打补丁,但不会写入到配置清单中
子命令:
node
pod
deployment
选项:
--annotation=描述信息 #创建时指定描述,与git commit功能类似,在rollout history命令出可查看历史记录,方便回滚,高版本kj
--record=true #作用同上,仅记录命令,但提示被弃用
例:
#修改deploy.spce.replaces字段
kubectl patch deployment ngx-dep -p '{"spec":{"replicas":5}}'
#修改pod更新粒度
kubectl patch deployment ngx-dep -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
#指定副本更新
kubectl patch sts ngx -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":2}}}}'
kubectl rollout:
对pod进行更新、回滚,实际是选择上个版本的rs控制器
子命令:
history
deployment ngx-dep
pause #将资源标记为暂停
restart
resume #取消暂停的资源
status
undo #回滚
选项:
--to-r=版本 #回滚到指定版本
例:
#查看回滚的历史版本
kubectl rollout history deployment ngx-dep
kubectl rollout undo
kubectl set:
动态修改资源
子命令:
env
image
daemonsets
deployment
resources
selector
serviceaccount
subject
选项:
--record=true #在k8s的pod控制器中,记录执行的历史记录,通过kubectl rollout history deployment命令,在CHANGE-CAUSE列查看
--annotation=描述信息 #创建时指定描述,与git commit功能类似,在rollout history命令出可查看历史记录,方便回滚
例:
#动态修改pod的镜像版本,实现金丝雀发布
kubectl set image deploy ngx-dep nginx=nginx:1.18 && kubectl && kubectl rollout pause deployment ngx-dep
集群管理命令:
kubectl cluster-info:
显示集群状态
kubectl top:
显示监控指标,默认k8s不支持,需要手动配置开启
子命令:
node
pod
例:
kubectl top pod t1
kubectl cordon:
标记node节点不参与调度创建pod
例:
kubectl cordon node1 #为aster设置
kubectl get nodes #多了一个调度禁止状态
kubectl uncordon:
取消不调度标记,允许node参与pod创建调度
####### 例:
kubectl uncordon node1
kubectl drain:
node主机需要维修时,要把pod都赶走
选项:
-l label标签 #赶走标签的pod
例:
kubectl drain node2
kubectl taint:
node反亲和,创建pod时,尽量不创建在标记反亲和的node上
例:
#添加污点
kubectl taint node node2 node-type=qqq
#污点名称后面加上“-”就是取消
kubectl taint node node2 node-type-
kubectl api-resources:
用于查看所有api资源,可显示api短格式名称、api资源属于哪个分组、类型(yml文件必须对应)
在写yml时需要api
短格式名称:
namesapce = ns
nodes = no
pods = po
replicationcontrollers = rc
services = svc
daemonsets = ds
deployments = deploy
replicasets = rs
statefulsets = sts
endpoints = ep
configmap = cm
NetworkPolicy = netpol
例:
kubectl get no
kubectl get svc
kubectl api-versions:
用于查看当前k8s的api版本,每个版本的k8s的api可能不一样
一般在yml配置文件中使用
kubectl explain:
描述api对象调用字段
<type>.<fieldName>[.<fieldName>]
pod
nodes
service
namespace
例:
kubectl explain pod
kubectl explain pod.apiVersion
kubectl explain pod.kind
kubectl explain deployment
kubectl config:
kubectl proxy:
运行一个apiserver代理,本地的kubectl能直接访问apiserver是因为本地有配置文件定义了证书,而其他访问则没有证书,但可以开启代理,把kubectl当做服务运行,访问代理端口时,就能调用apiserver
例:
#默认监听127.0.0.1
kubectl proxy --port=6343