Kubectl基础命令使用

news2024/11/15 0:03:23

一.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 文件来创建命名空间。
命名空间帮助组织和管理集群资源,尤其在多租户环境中非常有用。

Pod常见状态

pod的常见状态:
Unschedulable: #Pod不能被调度,kube-scheduler没有匹配到合适的node节点
PodScheduled: # pod正处于调度中 ,在kube-scheduler刚开始调度的时候,还没有将pod分配到指定的node,在筛选出合适的节点后就会更新etcd数据, 将pod分配到指定的node
Pending: #正在创建Pod但是Pod中的容器还没有全部被创建完成=[处于此状态的Pod应该检查Pod依赖的存储是否有权限挂载等。
Failed: #Pod中有容器启动失败而导致pod工作异常。
Unknown: #由于某种原因无法获得pod的当前状态,通常是由于与pod所在的node节点通信错误。
Initialized:#所有pod中的初始化容器已经完成了
ImagePullBackOff: #Pod所在的node节点下载镜像失败
Running: #Pod内部的容器已经被创建并且启动。
Ready: #表示pod中的容器已经可以提供访问服务
Error: #pod 启动过程中发生错误
NodeLost: #Pod 所在节点失联
Waiting: #Pod 等待启动
Terminating: #Pod 正在被销毁
CrashLoopBackOff: #pod崩溃,但是kubelet正在将它重启
InvalidImageName: #node节点无法解析镜像名称导致的镜像无法下载
ImageInspectError: #无法校验镜像,镜像不完整导致
ErrImageNeverPull: #策略禁止拉取镜像,镜像中心权限是私有等
RegistryUnavailable:#镜像服务器不可用,网络原因或harbor宕机
ErrImagePull: #镜像拉取出错,超时或下载被强制终止
CreateContainerConfigError:#不能创建kubelet使用的容器配置
CreateContainerError: #创建容器失败
RunContainerError: #pod运行失败,容器中没有初始化PID为1的守护进程等
ContainersNotInitialized:#pod没有初始化完毕
ContainersNotReady: #pod没有准备完毕
ContainerCreating: #pod正在创建中
PodInitializing: #pod正在初始化中
DockerDaemonNotReady: #node节点decker服务没有启动
NetworkPluginNotReady: #网络插件没有启动

四.资源限制

应用场景:
通常一个项目使用一个名称空间(命名空间),目的是为了隔离网络环境。

名称的资源限制:
		如果命名空间添加资源限制,其后的每一个pod都要添加资源限制内容。
	apiVersion: v1
	kind: ResourceQuota
	metadata:
	  name: example-quota
	  namespace: test
	spec:
	  hard:
	    requests.cpu: "2"
	    requests.memory: "1Gi"
	    limits.cpu: "4"
	    limits.memory: "4Gi"
	    pods: "10"
	
	 pod-资源限制
	resources:
	  requests:
	    memory: "64Mi"
	    cpu: "250m"
	  limits:
	    memory: "128Mi"
	    cpu: "500m"

删除命名空间
kubectl get pod -n test
如果删除test命名空间,则test命名空间下的所有pod也一并删除。

示例:

名称的资源限制:
	如果命名空间添加资源限制,其后的每一个pod都要添加资源限制内容。
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-quota
  namespace: test
spec:
  hard:
    requests.cpu: "2"
    requests.memory: "1Gi"
    limits.cpu: "4"
    limits.memory: "4Gi"
    pods: "10"


pod-资源限制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: mycontainer
        image: harbor.hiuiu.com/nginx/nginx:1.21.5
        imagePullPolicy: Never
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
kubectl config set-context --current --namespace=test
kubectl apply -f re.yaml 
kubectl get pod -o wide

请添加图片描述
请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】OJ习题 篇1

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、string&#x1f4a5;1.1 字符串相加&#x1f4a5;1.2 验证回文字符串&#x1f4a5;1.3 反转…

【奇某信-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

(论文解读)Domain Adaptation via Prompt Learning

摘要 无监督域适应( UDA )旨在将从带有标签的源域数据中学习到的模型适应到未标注的目标域数据集。现有的UDA方法通过对齐源域和目标域特征空间来学习领域不变特征。这种对齐是通过约束实现的&#xff0c;例如统计差异最小化或对抗学习。 然而&#xff0c;这些约束会导致语义…

【自动驾驶】控制算法(四)坐标变换与横向误差微分方程

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

浙大版循环结构程序设计 7-6-1 贪心法-找零钱

7-6-1 贪心法-找零钱 #include <stdio.h>int main(){int n5,n2,n1,money,total;int flag 1; //判断是否符合条件然后跳出循环scanf("%d",&money);if(money>100){printf("Invalid.");}for(n5money/5;(flag1)&&(n5>0);n5--){for(n2…

2-75 基于matlab的多尺度小波核svm预测

基于matlab的多尺度小波核svm预测&#xff0c;数据归一化操作&#xff0c;尺度小波核函数作为核函数进行训练&#xff0c;训练后的模型进行预测。程序已调通&#xff0c;可直接运行。 2-75 多尺度小波核 SVM预测 - 小红书 (xiaohongshu.com)

Java 认识String类

1. 创建字符串 常见的构造 String 的方式 //方式一&#xff1a;String str "hello world";//方式二&#xff1a;String str2 new String("Hello world");//方式三&#xff1a;char[] array {a,b,c};String str3 new String(array);注意事项&#xff1…

Promise学习之初步认识Promise

目录 前言 一、认识Promise (一) 含义 (二) 代码演示 二、Promise状态 三、总结 前言 在上一篇的学习中&#xff0c;我们已经认识到了同步与异步&#xff0c;异步代码在解决同步代码问题的同时&#xff0c;也会产生一些新的问题&#xff0c;比如常说的回调地狱&#xff0…

DBSCAN算法及Python实践

DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的空间聚类应用&#xff09;算法是一种基于密度的聚类算法&#xff0c;它在机器学习和数据挖掘领域有广泛的应用。以下是DBSCAN算法的主要原理和特点&#xff1a…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 &#xff08;1&#xff09;在进程中使用 pipe 函数来获取管道的文件描述符 &#xff08;2&#xff09;使用 fork 函数来创建子进程 &#xff08;3&#xff09;通过获取到的文件描述符来进行数据的传输 &#xff08…

第八周:机器学习

目录 摘要 Abstract 一、注意力机制V.S.自注意力机制 1、引入 2、注意力机制 3、自注意力机制 二、自注意力机制 1、输入 2、输出 3、序列标注 4、Multi-head Self-attention 5、比较 总结 摘要 前两周学习了CNN的基本架构&#xff0c;针对全局信息的考虑问题&…

【Kotlin设计模式】Kotlin实现单例模式

前言 单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。在 Android 中&#xff0c;有许多系统服务和 API 使用了单例模式&#xff0c;比如&#xff1a; Context: 通过getApplication…

SpringBoot2:创建项目及启动时相关报错整理

1、创建时报错 Initialization failed for https://start.aliyun.com/ Please check URL, network and proxy settings.Error message: Error parsing JSON response换官网地址初始化即可&#xff1a;https://start.spring.io/ 那么&#xff0c;大家肯定会疑问&#xff0c;官网…

【SpringBoot】10 日志持久化(log4j2)

介绍 日志概念 日志是系统生成的数据&#xff0c;用于记录网络、端点、物联网、应用程序、操作系统等&#xff0c;在运行时所发生事件的信息&#xff0c;便于开发人员或维护人员进行故障排查、性能优化、安全审计等工作。 日志作用 问题追踪及调试&#xff1a;当程序出现问…

C语言 | Leetcode C语言题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; //计算a的b次方 int mypow(int a, int b){a a % 1337; // 防止a过大超出规模int ret 1;for(int i 0; i < b; i){ret * a;ret ret % 1337; //防止超出规模}return ret; } //整体计算 int superPow(int a, int* b, int bSize){if(a 1…

Android Jitpack制作远程仓库aar流程

开发高效提速系列目录 软件多语言文案脚本自动化方案Android Jitpack制作远程仓库aar流程 Android Jitpack制作远程仓库aar流程 背景aar制作与使用1. aar制作2. aar使用 异常解决总结 博客创建时间&#xff1a;2023.08.24 博客更新时间&#xff1a;2023.08.24 以Android stud…

leetcode刷题之二分算法

目录 简介 第一个错误的版本 算法思路 代码实现 两个数组的交集 算法思路 代码实现 两个数组的交集2 算法思路 代码实现 有效的完全平方数 算法思路 代码实现 猜数字大小 算法思路 代码实现 排列硬币 算法思路 代码实现 寻找比目标字母大的最小字母 代码实…

XTuner微调个人小助手认知实战

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调&#xff0c;如果想了解微调相关的基本概念&#xff0c;可以访问XTuner微调前置基础。 2 准备工作 环境安装&#xff1a;我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话&#xff0c;第一步是安装 XTun…

YOLO+Sort实现目标追踪

在前面的目标检测、实例分割的学习中&#xff0c;我们多是对单张图像进行处理&#xff0c;而事实上在我们的实际应用中多数需要对视频进行操作&#xff0c;当然这个操作也是讲视频转换为一帧帧的图像&#xff0c;但博主发现在ultralytics这个算法平台中&#xff0c;针对视频的处…

docker容器基本命令、docker进入容器的指令、容器的备份、镜像底层原理、使用commit命令制造镜像、将镜像推送到阿里云镜像仓库与私服仓库

除了exit 还有 ctrlpq exit退出停止 ctrlpq 退出不停止 将本地镜像推到阿里云 登入阿里云 容器镜像服务 实力列表 镜像仓库 创建镜像仓库 安装里面步骤来 这里192.168.10.145这部分用自己ifconfig地址