Kubernetes CKAD 考试: kubectl 命令行总结

文章总结了关于 kubectl 在 Kubernetes CKAD 考试中的快捷命令以及需要注意的地方。


趁着今年黑色星期五的 Linux CNCF 社区报名有三五折优惠,我打算报考 CKAD 认证考试。在学习 Kubernetes 相关知识的同时,我也不忘总结一波有关 kubectl 的快捷命令。

Pod 生命周期管理

 1# 命令行创建 nginx pod
 2kubectl run nginx --image=nginx --restart=Never --dry-run=client -n mynamespace -o yaml > pod.yaml
 3# 获取所有命名空间的 pod
 4kubectl get po --all-namespaces
 5# 运行 busybox 的同时打印 hello world
 6kubectl run busybox --image=busybox -it --restart=Never -- echo 'hello world'
 7# 进入容器
 8kubectl exec -it podName -n nsName /bin/sh
 9# 列出 pod container 里面的 env variable
10kubectl exec podName -- printenv
11# 创建 pod 同时为 pod 添加标签
12kubectl run nginx1 --image=nginx --restart=Never --labels=app=v1
13# 列出所有添加标签的 pods
14kubectl get po --show-labels
15# 列出标有 app=v2 的 pods
16kubectl get po -l app=v2
17# 更改 nginx2 的标签为 app=v2
18kubectl label po nginx2 app=v2 --overwrite
19# 移除 nginx1 标有app的标签
20kubectl label po nginx1 app-

暴露 service 或 deployment

1# 输出为yaml文件(推荐)
2kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
3# 暴露端口
4kubectl expose deployment nginx -n bigdata --port=80 --type=NodePort

版本更新

1# 更新 nginx 版本
2kubectl set image deployment/nginx nginx=nginx:1.15
3# 滚动更新
4kubectl rolling-update frontend --image=image:v2
5# 扩缩容
6kubectl scale deployment nginx --replicas=10

回滚

 1# 查看更新过程
 2kubectl rollout status deployment/nginx --namespace=nsName
 3# 如果更新成功, 返回值为0 
 4kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting
 5
 6# 查看变更历史版本信息
 7kubectl rollout history deployment/nginx
 8kubectl rollout history deployment/nginx --revision=3 --namespace=nsName
 9
10# 终止升级
11kubectl rollout pause deployment/nginx --namespace=nsName
12
13# 继续升级
14kubectl rollout resume deployment/review-demo --namespace=nsName
15
16# 回滚版本
17kubectl rollout undo deployment/nginx --namespace=nsName
18kubectl rollout undo deployment/nginx --to-revision=3  --namespace=nsName

探针 livenessProbe 和 readinessProbe

1kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml
2# 然后编辑 pod.yaml 下的(containers -> livenessProbe -> exec -> command -> - 命令) 并保存
3kubectl describe pod nginx | grep -i liveness # 检测是否 nginx 存活

Kubernetes configuration 配置

 1# 创建 secret
 2kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
 3# 创建 configMap
 4echo -e "DB_URL=localhost:3306\nDB_USERNAME=postgres" > config.txt
 5kubectl create cm db-config --from-env-file=config.txt
 6# 创建 UID = 101
 7kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml
 8vi pod.yaml
 9# spec -> securityContext -> runAsUser -> 101
10
11# requests 和 limits
12kubectl run nginx --image=nginx --restart=Never --requests='cpu=100m,memory=256Mi' --limits='cpu=200m,memory=512Mi'
13# 创建名字为 myuser 的 serviceAccount 并将它用在 nginx pod 上
14kubectl create sa myuser
15kubectl run nginx --image=nginx --restart=Never --serviceaccount=myuser -o yaml --dry-run=client > pod.yaml
16kubectl apply -f pod.yaml

资源存储和分配

 1# pv 模板
 2apiVersion: v1
 3kind: PersistentVolume
 4metadata:
 5  name: task-pv-volume
 6  labels:
 7    type: local
 8spec:
 9  storageClassName: manual
10  capacity:
11    storage: 10Gi
12  accessModes:
13    - ReadWriteOnce
14  hostPath:
15    path: "/mnt/data"
16--
17# pvc 模板
18apiVersion: v1
19kind: PersistentVolumeClaim
20metadata:
21  name: task-pv-claim
22spec:
23  storageClassName: manual
24  accessModes:
25    - ReadWriteOnce
26  resources:
27    requests:
28      storage: 3Gi
29# 区别在于:
30# pv: spec -> capacity -> storage 和 spec -> hostPath -> path
31# pvc: spec -> resources -> requests -> storage

表格汇总

类型 命令 描述
基础命令 create 通过文件名或标准输入创建资源
expose 将一个资源公开为一个新的Service
run 在集群中运行一个特定的镜像
set 在对象上设置特定的功能
get 显示一个或多个资源
explain 文档参考资料
edit 使用默认的编辑器编辑资源
delete 通过文件名、标准输入、资源名称或标签选择器来删除资源
部署命令 rollout 管理资源的发布
rolling-update 对给定的复制控制器滚动更新
scale 扩容或缩容Pod、Deployment、ReplicaSet、RC或Job
autoscale 创建一个自动选择扩容或缩容并设置Pod数量
集群管理命令 certificate 修改证书资源
cluster-info 显示集群信息
top 显示资源(CPU、Memory、Storage)使用。需要Heapster运行
cordon 标记节点不可调度
uncordon 标记节点可调度
drain 维护期间排除节点(驱除节点上的应用,准备下线维护)
taint 设置污点属性
故障诊断和调试命令 describe 显示特定资源或资源组的详细信息
logs 在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的
attach 附加到一个运行的容器
exec 执行命令到容器
port-forward 转发一个或多个本地端口到一个Pod
proxy 运行一个proxy到Kubernetes API Server
cp 拷贝文件或目录到容器
auth 检查授权
高级命令 apply 通过文件名或标准输入对资源应用配置
patch 使用补丁修改、更新资源的字段
replace 通过文件名或标准输入替换一个资源
convert 不同的API版本之间转换配置文件
设置命令 label 更新资源上的标签
annotate 更新资源上的注释
completion 用于实现kubectl工具自动补全
其他命令 api-versions 打印支持的API版本
config 修改kubeconfig文件(用于访问API,比如配置认证信息)
help 所有命令帮助
plugin 运行一个命令行插件
version 打印客户端和服务版本信息

翻译: