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 | 打印客户端和服务版本信息 |