k8s基础命令


k8s基础命令

kubeadm

kubuadm是k8s官方推出的用于快速安装k8s的命令行工具。

  • config:指定初始化集群时使用的配置文件
kubeadm config print init-defaults #打印初始化配置
  • init:初始化Master节点

  • join:初始化Node节点并加入集群

  • reset:重置当前节点,无论是Master节点还是Node节点都可以重置

  • token: kubeadm init或输出的命令中返回的kubeadm join

# 返回新的node节点token
kubeadm token create --print-join-command

kubectl

kubectl主要职责是对资源对象进行操作。

为了方便在命令行下对集群、节点、pod进行管理,kubernetes官方提供了一个管理命令:kubectl

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。

# 查看API资源
kubectl api-resources

# 查看API版本
kubectl api-versions

资源对象表

资源 缩写 说明
cluster 集群
componentstatu ses cs 组件对象状态
configmaps cm ConfigMap是k8s配置管理工具
daemonsets ds DaemonSet管理node节点运行Pod
deployments deploy K8S控制器
endpoints ep Endpoints是实现服务的端点集合
events ev 记录集群运行时的各种事件
ingress ing API对象,边缘路由功能
nodes no 节点
namespaces ns 命名空间
pods po 获取Pod信息
replicasets rs 用户指定数量的Pod副本
cronjob 周期性任务控制,不需要持续在后台运行
services svc 各种服务

K8s的API对象(所有怪物角色列表)

  • Namespace – 命令空间实现同一集群上的资源隔离

  • Pod – K8s的最小运行单元

  • ReplicaSet – 实现pod平滑迭代更新及回滚用,这个不需要我们实际操作

  • Deployment – 用来发布无状态应用

  • Health Check – Readiness/Liveness/maxSurge/maxUnavailable 服务健康状态检测

  • Service, Endpoint , EndpointSlices – 实现同一lables下的多个pod流量负载均衡

  • Labels – 标签,服务间选择访问的重要依据

  • Ingress – K8s的流量入口

  • DaemonSet – 用来发布守护应用,例如我们部署的CNI插件

  • HPA – Horizontal Pod Autoscaling 自动水平伸缩

  • Volume – 存储卷

  • Pv, pvc, StorageClass – 持久化存储,持久化存储 声明,动态存储pv

  • StatefulSet – 用来发布有状态应用

  • Job, CronJob – 一次性任务及定时任务

  • Configmap, secret – 服务配置及服务加密配置

  • Kube-proxy – 提供service服务流量转发的功能支持,这个不需要我们实际操作

  • RBAC, serviceAccount, role, rolebindings, clusterrole, clusterrolebindings – 基于角色的访问控制

  • Events – K8s事件流,可以用来监控相关事件用,这个不需要我们实际操作

看了上面这一堆知识点,大家是不是有点头晕了? 别担心,上述这些小怪在后面的过关流程中均会一一遇到,并且我会也教会大家怎么去战胜它们,Let’ Go!

kubectl命令行的语法:

kubectl   [command]   [TYPE]   [NAME]   [flags]


command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等

TYPE:资源对象的类型,区分大小写,能以单数、复数或简写形式表示。例如以下3种TYPE是等价的

    - kubectl   get   pod   pod-name

    - kubectl   get   pods   pod-name

    - kubectl   get   po   pod-name

NAME:资源对象的名称,区分大小写,如果不指定名称,系统将返回所有Pod的列表

flags:kubectl子命令的可选参数,比如可以使用 “-o  wide“ 来显示更多的信息

kubectl常用命令

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: web
spec:
  hostNetwork: true
  containers:
  - name: nginx
    image: docker.io/library/nginx:latest
    ports:
    - containerPort: 80
  • 新建资源:kubectl create -f pod.yaml

19.png

  • 查看node信息:kubectl get nodes

23.png

  • 查看pod信息:kubectl get pod -o wide ,也可以 kubectl get pod -o yaml 或者kubectl get pod -o json

24.png

  • 查看所有信息:kubectl get all

25.png

  • 查看pod详细信息:kubectl describe pod nginx

26.png

  • 查看kube-system空间内的pod:kubectl get pod -n kube-system

9.png

  • 删除资源-根据YAML文件: kubectl delete -f pod.yaml

20.png

  • 删除资源-根据pod名字: kubectl delete pod nginx

21.png

  • 删除资源-删除所有pod: kubectl delete pod --all

22.png

帮助

如果在使用命令过程中出现问题,那么我们也可以通过使用 --help来获取 kubectl 命令的使用说明:

  • 获取 kubectl 的使用说明: kubectl --help
  • 获取 kubectl 子命令的使用说明:kubectl get --help / kubectl delete --help
  • 获取资源控制器说明: kubectl explain pod / rs / deployment / ·····

kubectl get 查看资源信息

# 查看类命令
# 获取节点和服务版本信息
kubectl get nodes

# 获取节点和服务版本信息,并查看附加信息
kubectl get nodes -o wide

# 获取pod信息,默认是default名称空间
kubectl get pod

# 获取pod信息,默认是default名称空间,并查看附加信息
kubectl get pod -o wide

# 获取指定名称空间的pod
kubectl get pod -n kube-system

# 获取指定名称空间中的指定pod
kubectl get pod -n kube-system podName

# 获取所有名称空间的pod
kubectl get pod -A

# 查看pod的详细信息,以yaml格式或json格式显示
kubectl get pods -o yaml
kubectl get pods -o json

# 查看pod的标签信息
kubectl get pod -A --show-labels

# 根据Selector(label query)来查询pod
kubectl get pod -A --selector="k8s-app=kube-dns"

# 查看运行pod的环境变量
kubectl exec podName env

# 查看指定pod的日志
kubectl logs -f --tail 500 -n kube-system kube-apiserver-k8s-master

# 查看所有名称空间的service信息
kubectl get svc -A

# 查看指定名称空间的service信息
kubectl get svc -n kube-system

# 查看componentstatuses信息
kubectl get cs

# 查看所有configmaps信息
kubectl get cm -A

# 查看所有serviceaccounts信息
kubectl get sa -A

# 查看所有daemonsets信息
kubectl get ds -A

# 查看所有deployments信息
kubectl get deploy -A

# 查看所有replicasets信息
kubectl get rs -A

# 查看所有statefulsets信息
kubectl get sts -A

# 查看所有jobs信息
kubectl get jobs -A

# 查看所有ingresses信息
kubectl get ing -A

# 查看有哪些名称空间
kubectl get ns

# 查看pod的描述信息
kubectl describe pod podName
kubectl describe pod -n kube-system kube-apiserver-k8s-master

# 查看指定名称空间中指定deploy的描述信息
kubectl describe deploy -n kube-system coredns

# 查看node或pod的资源使用情况
# 需要heapster 或metrics-server支持
kubectl top node
kubectl top pod

# 查看集群信息
kubectl cluster-info 或 kubectl cluster-info dump

# 查看各组件信息【例如:192.168.8.119为master的机器】
kubectl -s https://192.168.8.119:6443 get componentstatuses

kubectl create 创建资源信息

kubectl create -f xxx.yaml

# 创建test名称空间
kubectl create namespace test

kubectl apply 应用资源

# 应用某一个资源,资源不存在时创建资源,资源存在时不进行操作,也支持修改资源。
kubectl apply -f xxx.yaml

# 应用该目录下的所有资源, .yaml, .yml, 或 .json 文件都会被执行。
kubectl apply -f

kubectl delete 删除集群中的资源

# 删除资源
kubectl delete -f xxx.yaml
kubectl delete -f

# 删除指定的pod
kubectl delete pod podName

# 删除指定名称空间的指定pod
kubectl delete pod -n test podName

# 删除其他资源
kubectl delete svc svcName
kubectl delete deploy deployName
kubectl delete ns nsName

# 强制删除
kubectl delete pod podName -n nsName --grace-period=0 --force
kubectl delete pod podName -n nsName --grace-period=1
kubectl delete pod podName -n nsName --now

kubectl edit 编辑资源

# 编辑pod配置
kubectl edit pod podName

kubectl exec 在Pod中执行命令

# kubectl exec:进入pod启动的容器
kubectl exec -it podName -- bash  #进入容器

# 如果有Pod中有多个容器使用 -c 参数指定容器
kubectl exec -it podName  -c cName -- bash

# 指定命名空间
kubectl exec -it podName -n nsName bash #进入容器

kubectl describe 查看资源对象的详细信息

# 获取服务详情
kubectl describe svc

kubectl run 创建一个应用

# 与create命令不同点在于,所有选项通过命令行指定。
 kubectl run --image=nginx nginx-app --port=8082
 pod/nginx-app created

[root@k8s-master ~]# kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
nginx-app   1/1     Running   0          5m36s   172.16.85.209   k8s-node01   <none>           <none>

kubectl cp 双向拷贝

kubectl cp <source> <destination>
kubectl cp /root/file.txt  mypod:/root/
kubectl cp mypod:/path/to/file.txt ./file.txt

kubectl logs 查看资源的日志

 kubectl logs nginx-app

kubectl滚动升级与kubectl scale:动态伸缩

# kubectl滚动升级; 通过 kubectl apply -f myapp-deployment-v1.yaml 启动deploy
kubectl apply -f myapp-deployment-v2.yaml #通过配置文件滚动升级
kubectl set image deploy/myapp-deployment myapp="registry.cn-beijing.aliyuncs.com/google_registry/myapp:v3" #通过命令滚动升级

kubectl rollout undo deploy/myapp-deployment 或者 kubectl rollout undo deploy myapp-deployment #pod回滚到前一个版本

kubectl rollout undo deploy/myapp-deployment --to-revision=2 #回滚到指定历史版本

kubectl scale deploy myapp-deployment --replicas=5 # 动态伸缩

kubectl scale --replicas=8 -f myapp-deployment-v2.yaml #动态伸缩【根据资源类型和名称伸缩,其他配置「如:镜像版本不同」不生效】
上面滚动更新和动态伸缩涉及的deploy的yaml文件

kubectl label 添加label值

kubectl label nodes k8s-node01 zone=north #为指定节点添加标签
kubectl label nodes k8s-node01 zone- #为指定节点删除标签
kubectl label pod podName -n nsName role-name=test #为指定pod添加标签
kubectl label pod podName -n nsName role-name=dev --overwrite #修改lable标签值
kubectl label pod podName -n nsName role-name- #删除lable标签