目录

Kubernetes kubectl 命令行总结

这篇文章总结了 Kubernetes 中 命令行的使用。

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

1 Pod 生命周期管理

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

2 暴露 service 或 deployment

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

3 版本更新

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

4 回滚

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 查看更新过程
kubectl rollout status deployment/nginx --namespace=nsName
# 如果更新成功, 返回值为0 
kubectl rollout status deployment nginx-deployment --watch=false | grep -ic waiting

# 查看变更历史版本信息
kubectl rollout history deployment/nginx
kubectl rollout history deployment/nginx --revision=3 --namespace=nsName

# 终止升级
kubectl rollout pause deployment/nginx --namespace=nsName

# 继续升级
kubectl rollout resume deployment/review-demo --namespace=nsName

# 回滚版本
kubectl rollout undo deployment/nginx --namespace=nsName
kubectl rollout undo deployment/nginx --to-revision=3  --namespace=nsName

5 探针 livenessProbe 和 readinessProbe

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

6 Kubernetes configuration 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 创建 secret
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
# 创建 configMap
echo -e "DB_URL=localhost:3306\nDB_USERNAME=postgres" > config.txt
kubectl create cm db-config --from-env-file=config.txt
# 创建 UID = 101
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml
vi pod.yaml
# spec -> securityContext -> runAsUser -> 101

# requests 和 limits
kubectl run nginx --image=nginx --restart=Never --requests='cpu=100m,memory=256Mi' --limits='cpu=200m,memory=512Mi'
# 创建名字为 myuser 的 serviceAccount 并将它用在 nginx pod 上
kubectl create sa myuser
kubectl run nginx --image=nginx --restart=Never --serviceaccount=myuser -o yaml --dry-run=client > pod.yaml
kubectl apply -f pod.yaml

7 资源存储和分配

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

8 表格汇总

类型 命令 描述
基础命令 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 打印客户端和服务版本信息