K8s是常用命令和解释

K8s高频命令

  1. 获取资源信息,如获取 Pod、Service、Deployment等资源状态信息

    bash 复制代码
    kubectl get
  2. 创建资源如创建Pod、Service、Deployment等资源

    bash 复制代码
    kubectl create
  3. 删除资源,如删除Pod、Service、Deployment等资源

    bash 复制代码
    kubectl delete
  4. 应用配置文件,如引用Deployment的配置文件如,test.yml

    bash 复制代码
    kubectl apply
  5. 查看资源详细的信息,如查看Pod、Service、Deployment等资源的详细信息和状态

    bash 复制代码
    kubectl describe
  6. 在容器内部执行,如Pod内部执行命令或范文容器内部的终端

    bash 复制代码
    kubectl exec
  7. 将集群内的服务端转发到本地,用于 本地访问集群内的服务

    bash 复制代码
    kubectl port-forward
  8. 查看Pod的日志信息,如查看容器标准输出和错误标准输出

    bash 复制代码
    kubectl logs
  9. 调整资源的副本数,如调整Deployment的副本数

    bash 复制代码
    kubectl scale
  10. 控制应用的滚动更新,如进行版本升级或回滚

    bash 复制代码
    kubectl rollout
  11. 获取Pod的信息时,常常忘记加s,导致无法获取到Pod的状态信息

    bash 复制代码
    kubectl logs
  12. 调整资源的副本数,如调整Deployment的副本数

    bash 复制代码
    kubectl scale
  13. 控制应用的滚动更新,如进行版本升级或回滚

    bash 复制代码
    kubectl rollout

具体实现

XML 复制代码
## kubectl get pods -o wide
-o output
用于指定输出格式,如yaml,json,wide,name等。

## kubectl get pods -l app-myapp
-l --selector
根据标签选择器来过滤结果

## kubectl apply -f my-resource.yaml
-f --filename
从文件中加载资源清单。可以指定多个文件。

## kubectl apply -k ./path/to/kustomization
-k --kustomize
从Kustomization目录加载资源。

## kubectl --context dev get pods
--context
指定要使用的上下文

## kubectl --as admin get pods
--as
指定要使用的用户

## kubectl --as-group=system:developers get pods
--as-group
指定要使用的用户组。

## kubectl --cluster=cluster1 get pods
--cluster
指定要使用的集群

## kubectl --server=https://api.example.com get pods
--server
指定API服务器的地址

## kubectl --certificate-authority=/path/to/ca.crt get pods
--certficate-authority
指定CA证书的路径

## kubectl --client-certificate=/path/to/client.crt get pods
--client-certificate
指定客户端证书

## kubectl --client-key=/path/to/client.key get pods
--client-key
指定客户端私钥的路径。

## kubectl --insecure-skip-tls-verify=true get pods
--insecure-skip-tls-verfy
跳过TLS证书验证

## kubectl get pods --timeout=30s
--timeout
指定API请求的超时时间

## kubectl get pods --request-timeout=30s
--request-timeout
指定API请求的超时时间(与 --timeout 类似)

## kubectl get pods --watch
--watch
观察资源的变化

## kubectl get pods --watch-only
--watch
观察资源的变化

## kubectl get pods --watch-only
--watch-only
仅观察资源的变化而不显示初始状态

## kubectl get pods --all-namespaces
--all-namespaces
操作所有命名空间

## kubectl delete pods --all
--all
对于某些命令,可以悬着所有资源

## kubectl get pods --field-serlector=status.phase=Runimg
--field-selector
根据字段选择器来过滤结果

## kubectl --kubeconfig=/path/to/kubeconfig get pods
--kubecofnig
指定kubeconfig文件的位置

具体事务分析

K8s的pod健康检查机制

K8s的Pod健康检查机制用于确保容器在运行时保持健康状态。如果一个容器不健康,K8s可以拆去措施来恢复服务,例如重启容器或嗲调度新的Pod。K8s提供了两种主要类型的健康检查:Livensess Probe 和 Readiness Probe,以及减少使用的Statup Probe

Liveness Probe(存活探针)

目标:确定容器是否正在运行。如果存活探针失败,Kubernetes将重启该容器。

目的:防止容器陷入死锁或无响应状态,确保应用始终处于工作状态。

使用场景:存活探针适合那些可能进入非响应状态但仍保持运行的应用程序。例如,Web内存可能会又内存泄露或其他问题变得不能响应HTTP请求,这时存货探针可以帮助检查这种情况并触发自动修复措施。

配置:

bash 复制代码
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
    - name: X-Custom-Header
      value: Awesome
  initialDelaySeconds: 3
  periodSeconds: 10

就绪探针(Readiness Probes)

目标:判断容器是否准备好接收流量

目的:避免将流浪发送到尚未准备好的Pod上,知道它完全启动并可以处理请求。

使用场景:刚初始化化服务,比如数据库连接池、缓存预热等。在写在服务真正准备好之前,不应该接收任何实际流量。

配置:

XML 复制代码
readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 10

启动探针(Startup Probes)

目标:用于确认容器中的应用以及启动完毕。

目的:对于启动时间较长的应用,提供一个额外的宽限期,在此期间不会执行存活或就绪检查,以允许应用完成其初始化过程。

使用场景:是为了解决某些服务在启动阶段需要更多时间的问题,如大型应用部署或复杂的数据加载任务。

配置:

XML 复制代码
startupProbe:
  tcpSocket:
    port: 9999
  failureThreshold: 30
  periodSeconds: 10

httpGet、exec 和 tcpSocket 分别代表了三种不同的检查方法。initalDelaySeconds指定了首次健康检查前等待的时间;periodSeconds 是健康检查的频率;其他参数则更具业务需求镜像调整。请注意,所有时间单位均为秒

相关推荐
yangang1851 小时前
linuxbash原理
linux·运维·服务器
小小毛桃1 小时前
在Ubuntu系统中运行Windows程序
linux·windows·ubuntu
码农新猿类2 小时前
服务器本地搭建
linux·网络·c++
小度爱学习2 小时前
linux中的执行命令格式及命令帮助
linux·运维·chrome
神奇侠20242 小时前
快速入手K8s+Docker+KubeSphere+DevOps
docker·kubernetes·devops
CN_HW2 小时前
k8s证书续期
云原生·容器·kubernetes
良许Linux2 小时前
嵌入式算吃青春饭么?
linux
良许Linux3 小时前
马上要毕业去工作了,做嵌入式软件开发工程师,但是完全不会编程怎么办?
linux
良许Linux3 小时前
学stm32,有什么学习方法?
linux
良许Linux3 小时前
为啥有好多人说 Arduino 是玩具?
linux