前言

学习k8s许久了,我来分享下常用的指令,有需要的mark一下

k8s常用指令

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

预备的文件

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: hello

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
  namespace: hello
spec:
  containers:
  - image: nginx
    name: mynginx

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
  namespace: hello
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
  namespace: hello
spec:
  selector:
    app: my-dep
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
    nodePort: 31234
  type: NodePort

创建资源

kubectl run

创建运行的pod

语法:kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [–command] – [COMMAND] [args…]

kubectl run nginx --labels="app=nginx-example" --image=nginx:1.10 --port=80

kubectl create

# 创建deployment 名字nginx,镜像nginx,副本数3
kubectl create deployment nginx --image=nginx --replicas=3
# 根据yaml文件创建资源对象
kubectl create -f deployment.yaml
# 根据对个yaml文件创建不同的资源对象
kubectl create -f namespace.yaml deployment.yaml -f service.yaml
# 创建命名空间
kubectl create namespace hello

kubectl apply

# 根据yaml文件创建资源对象
kubectl apply -f deployment.yaml

标签操作

–show-labels

查看标签

kubectl get nodes --show-labels
kubectl get pods --show-labels

kubectl label

添加标签
kubectl label nodes nodeName labelName=value
kubectl label pod podName -n namespaceName labelName=value
修改标签

–overwrite

kubectl label nodes nodeName labelName=value2 --overwrite
kubectl label pod podName -n namespaceName labelName=value2 --overwrite
删除标签
kubectl label nodes nodeName labelName-
kubectl label pod podName -n namespaceName labelName-

查看

kubectl get

普通get

# 查看集群状态
kubectl get sc 
# 查看pod
kubectl get pods
kubectl get pod
kubectl get po
#同时查看多个资源
kubectl get deploy,pods
#查看pod端口信息
kubectl get pod,svc
#特定命名空间下的pod信息
kubectl get pod -n hello
#查看所有命名空间下的pod信息
kubectl get pod --all-namespaces
kubectl get pod -A
#获取Pod运行在哪个节点上的信息,以纯文本格式输出,包含任何附加信息
kubectl get pod -o wide
#显示pod标签
kubectl get pod --show-labels
#查看特定标签的pod
kubectl get pod -n hello -l app=my-dep
#以json格式显示pod的详细信息
kubectl get pod mynginx -n hello -o json
#查看replicasets 
kubectl get replicasets -o wide
#查看deployments
kubectl get deployments -o wide
#查看ip和端口
kubectl get ep
#查看事件
kubectl get ev

yaml方式

#以yaml格式显示pod详细信息
kubectl get pod podName -o yaml
kubectl get pod -f pod.yaml
#用get生成yaml文件(就是把输出的yaml存储成文件)
kubectl get deploy nginx --export -o yaml>xxx.yaml
#查看资源子节点详情
kubectl explain pods.spec.containers

暴露端口

#暴露端口创建service:创建指向deployment名为my-dep端口为80,方式为nodeport名为nginx-service的service,开启端口为80,k8s为service分配一个随机的访问端口,不可指定nodeport
kubectl expose deployment my-dep -n hello --port=80 --type=NodePort --target-port=80  --name=nginx-service
#指定端口
kubectl create service nodeport my-dep -n hello --tcp=80:80 --node-port=31280 --name nginx-service2

故障排除

资源详情describe

# 显示Node的详细信息
kubectl describe nodes 名称前缀
# 显示pod的详细信息
kubectl describe pods 名称前缀

资源日志排查logs

# 容器日志查看
kubectl logs mynginx -n hello
# 追踪查看日志,持续输出
kubectl logs -f mynginx -n hello

进入资源exec

#进入资源
kubectl exec -it mynginx -n hello /bin/bash

kubectl exec  mynginx -n hello -it -- /bin/bash

更新

版本更新

kubectl set image deployment my-dep -n hello nginx=nginx:1.15 --record

编辑更新

#yaml形式进行编辑
kubectl edit deployment my-dep 

回滚更新

#查看历史版本
kubectl rollout history deployment my-dep -n hello
#回滚到上个版本
kubectl rollout undo deployment my-dep -n hello
#回滚到指定历史版本
kubectl rollout undo deployment my-dep -n hello --to-revision=3
#查看回滚状态
kubectl rollout status deployment my-dep -n hello

替换更新

kubectl replace -f xxx.yaml

伸缩容

kubectl scale deployment my-dep -n hello --replicas=4

删除

#删除资源 (deployment,service,pod...)
kubectl delete deployment my-dep -n hello
#删除所有pod
kubectl delete pods --all
#删除包含符合label的pod和service
kubectl delete pod,service -l app=my-dep
#删除yaml里面定义的资源
kubectl delete -f xxx.yaml
#删除命名空间
kubectl delete ns hello
# 删除指定命名空间的资源
kubectl delete pod mynginx -n hello
# 删除计时
time -p kubectl delete pod mynginx
# 强制删除
kubectl delete pod mynginx -n hello --grace-period=0 --force
# 删除立即执行
kubectl delete pod mynginx -n hello --grace-period=1
kubectl delete pod mynginx -n hello --now
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐