Kubectl基础命令使用

一.Kubectl 基础命令

格式: kubectl [command] [TYPE] [NAME] [FLAGS]

kubectl 是 Kubernetes 的命令行工具,用于管理 Kubernetes 集群。以下是一些常用的 kubectl 命令及其选项:

常用命令

  1. 获取资源

    • 列出所有资源类型(Pods、Deployments、Services 等):
 kubectl get all

请添加图片描述

  • 获取特定资源的详细信息:
kubectl api-resources
kubectl get pods 
kubectl get deployments 
kubectl get services
kubectl get svc

请添加图片描述

  • 获取资源的详细信息:
   kubectl describe pod <pod-name> 
   kubectl describe deployment <deployment-name>
  • 查看集群版本
kubectl version
  1. 创建和应用资源

    • 从 YAML 文件创建资源:
 kubectl create -f <file.yaml>
  • 更新或应用资源:
 kubectl apply -f <file.yaml>
  • 创建特定资源:
 kubectl create deployment <deployment-name> --image=<image> 
 kubectl create service clusterip <service-name> --tcp=<port>:<target-port>
  1. 删除资源

    ​ 删除资源:

   kubectl delete pod <pod-name> 
   kubectl delete deployment <deployment-name> 
   kubectl delete -f <file.yaml>
  1. 查看日志

    • 查看 Pod 的日志:
 kubectl logs <pod-name>
  • 查看某个容器的日志(如果 Pod 中有多个容器):
   kubectl logs <pod-name> -c <container-name>
  1. 执行命令

    • 在 Pod 中执行命令:
 kubectl exec -it <pod-name> -- /bin/bash
  1. 集群和上下文管理

    • 查看当前上下文:
 kubectl config current-context
  • 列出所有上下文:
   kubectl config get-contexts
  • 切换上下文:
kubectl config use-context <context-name>
  1. 滚动更新

    • 更新 Deployment:
 kubectl rollout restart deployment <deployment-name>
  • 查看滚动更新状态:
 kubectl rollout status deployment <deployment-name>
  1. 集群健康检查

    • 获取集群状态:
 kubectl cluster-info
  • 检查节点状态:
 kubectl get nodes

常用选项

  • -n--namespace:指定命名空间。例如:
  kubectl get pods -n <namespace>
  • -o--output:指定输出格式,如 jsonyamlwidename 等。例如:
  kubectl get pods -o wide kubectl get pods -o json
  • --selector:按标签选择资源。例如:
  kubectl get pods --selector=app=<label>

-o wide 或 --output=wide

提供更详细的信息,包含额外的列,如节点 IP、容器状态等。

kubectl get pods -o wide
kubectl get nodes -o wide

-o json

将输出格式化为 JSON 格式。这适合需要机器解析的情况。

kubectl get pod nginx11 -o json

-o yaml

将输出格式化为 YAML 格式。这适合需要人类阅读的详细格式。

kubectl get pod nginx11 -o yaml
kubectl get pod kube-system-sddcd -n kube-system -o yaml

-o name

仅输出对象的名称,适合在脚本中使用。

kubectl get pod -o name
  • -f--filename:指定文件路径(通常用于创建或更新资源)。例如:
  kubectl apply -f <file.yaml>
  • --context:指定集群上下文。例如:
 kubectl get pods --context=<context-name>
  • --kubeconfig:指定 kubeconfig 文件的路径。例如:
  kubectl get pods --kubeconfig=<path-to-kubeconfig>

这些是 kubectl 的一些基本命令和选项,可以帮助你管理和操作 Kubernetes 集群。根据需要,你还可以查看 kubectl 的帮助文档,以了解更多详细信息和高级功能:

kubectl --help

二.Kubectl执行yaml文件

yaml文件介绍

在使用 kubectl apply -f 命令执行 YAML 文件时,确保文件格式正确是很重要的。Kubernetes YAML 文件遵循一定的格式规范,下面是 YAML 文件的一些基本结构和格式要求:

基本结构

一个典型的 Kubernetes YAML 文件包含以下部分:

apiVersion: 定义资源的 API 版本。
kind: 资源的类型(如 Pod、Deployment、Service 等)。
metadata: 资源的元数据,如名称、标签等。
spec: 资源的规格定义,具体内容依据资源类型而不同。
示例 YAML 文件
以下是一些常见资源类型的 YAML 文件示例:

1. Pod
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: nginx:1.14.2
    ports:
    - containerPort: 80
2. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
3. Service
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer
格式要求

缩进: YAML 文件使用空格进行缩进,通常每级缩进两个空格。请不要使用制表符(Tab)进行缩进。

空行: 不建议在文件中使用多余的空行,尽量保持文件的简洁和清晰。

键值对: 键和值之间用冒号 : 隔开,冒号后面需要有一个空格。

列表项: 列表项前面用连字符 - 和一个空格。

多文档文件: 如果在一个文件中定义多个资源,可以使用 — 分隔每个文档。例如:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx

---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 80

验证 YAML 文件
在应用 YAML 文件之前,你可以使用以下命令检查文件的语法是否正确:

kubectl apply --dry-run=client -f your-file.yaml
这个命令不会实际应用资源,只会验证 YAML 文件的格式和语法是否正确。

总结

确保你的 YAML 文件符合上述格式要求,并且每个部分都正确配置。遵循这些规则可以帮助避免在执行 kubectl apply 时遇到格式错误。如果你有任何特定的 YAML 文件或格式问题,可以提供更多细节,以便获得更具体的帮助。
实战示例
编辑yaml文件拉取apline镜像

apiVersion: v1
kind: Pod
metadata:
  name: alpine
spec:
  containers:
    - name: alpine
      image: alpine:latest
      imagePullPolicy: Never
      command: ["/bin/sh"]
      args: ["-c","while true; do echo hello; sleep 10; done"]
## imagePul1Policy有三个取值
# Always 每次都下载最新镜像
#Never不会尝试获取镜像,如果镜像已经以某种方式存在本地,kubelet 尝试启动容器;否则,会启动失败
#IfNotPresent 只有当镜像在本地不存在时才会拉取
并 默认镜像拉取策略:
#当你(或控制器)向API服务器提交一个新的Pod时,你的集群会在满足特定条件时设置imagePu11Policy字段
# 如果你省略了
imagePul1Policy字段,并且容器镜像的标签是:latest,imagePul1Policy会自动设置为Always
#如果你省略了imagePul1Policy字段,并且没有指定容器镜像的标签,imagePu11Policy会自动设置为Alweys
#如果你省略了imagePul1Policy字段,并且为容器镜像指定了非:1atest的标签,imagePul1Policy 就会自动设置为IfNotPresent

请添加图片描述
编辑yaml文件拉取nginx镜像

apiVersion: v1
kind: Pod
metadata:
  name: nginx33
spec:
  containers:
    - name: nginx33
      image: harbor.hiuiu.com/basic_image/centos7_filebeat_nginx:2408.u
      imagePullPolicy: Never
      ports:
      - containerPort: 80
      command: ["/bin/sh"]
      args: ["-c","while true; do echo hello; sleep 10; done"]

请添加图片描述
进入容器

 kubectl  exec  nginx33  -it bash
 #进入容器开启nginx
 nginx
 exit

真机ping pod
请添加图片描述

三.管理命名空间

1.列出所有命名空间

要列出集群中所有的命名空间,你可以使用以下命令:

kubectl get namespaces
#简写
kubectl get ns

请添加图片描述

2.查看特定命名空间的详细信息

如果你想查看某个特定命名空间的详细信息,可以使用 describe 命令:

kubectl describe namespace <namespace-name>

例如,要查看名为 my-namespace 的详细信息,可以运行:

kubectl describe namespace my-namespace

这个命令会显示该命名空间的详细描述,包括其标签、注解和其他相关信息。
请添加图片描述

3.查看当前上下文中的命名空间

要查看当前上下文中默认使用的命名空间,可以使用:

kubectl config view --minify --output 'jsonpath={..namespace}'
kubectl config view
#查看当前命名空间

这个命令会显示你当前的 Kubernetes 配置文件中,默认的命名空间。如果没有指定,通常默认是 default。

4.查看当前命名空间中的资源

如果你想查看当前命名空间中的资源,可以首先确认当前命名空间(如上所述),然后使用 kubectl get 命令查看特定资源类型。例如:

kubectl get pods

此命令默认会列出当前命名空间中的所有 Pods。

5.切换命名空间

在查看资源时,你可能需要在不同的命名空间之间切换。使用 -n 标志来指定命名空间,例如:

kubectl config set-context --current --namespace=namespace-name

请添加图片描述

6.创建命名空间

使用 kubectl 命令行工具创建命名空间

你可以使用 kubectl 命令来创建新的命名空间。以下是创建命名空间的基本命令:

kubectl create namespace <namespace-name>

例如,要创建一个名为 my-namespace 的命名空间,可以运行:

kubectl create namespace my-namespace
使用YAML 文件定义命名空间

你还可以通过编写一个 YAML 文件来定义命名空间,然后使用 kubectl 命令应用这个文件。例如,创建一个名为 my-namespace 的 YAML 文件 namespace.yaml,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

然后运行以下命令来应用这个配置:

kubectl apply -f namespace.yaml

7.删除命名空间

删除命名空间会删除该命名空间中的所有资源。使用以下命令删除命名空间:

kubectl delete namespace <namespace-name>

8.总结

列出所有命名空间:kubectl get namespaces 或 kubectl get ns 查看特定命名空间详细信息:kubectl
describe namespace 查看当前上下文的命名空间:kubectl config view
–minify --output ‘jsonpath={…namespace}’ 查看特定命名空间中的资源:kubectl get -n 命名空间 是 Kubernetes 中用于资源隔离的机制。 可以通过
kubectl create namespace 命令或 YAML 文件来创建命名空间。
命名空间帮助组织和管理集群资源,尤其在多租户环境中非常有用。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值