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	
posted @ 2022-09-02 15:07  suyanhj  阅读(109)  评论(0编辑  收藏  举报