【k8s】kubectl命令详解

文章目录

命令行工具 kubectl

官方文档:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

在slave下配置kubectl

# 1. 将 master 节点中 /etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中
scp /etc/kubernetes/admin.conf root@slave:/etc/kubernetes

# 2. 在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

资源操作

创建对象
$ kubectl create -f ./my-manifest.yaml           # 创建资源
$ kubectl create -f ./my1.yaml -f ./my2.yaml     # 使用多个文件创建资源
$ kubectl create -f ./dir                        # 使用目录下的所有清单文件来创建资源
$ kubectl create -f https://git.io/vPieo         # 使用 url 来创建资源
$ kubectl run nginx --image=nginx                # 启动一个 nginx 实例
$ kubectl explain pods,svc                       # 获取 pod 和 svc 的文档

# 从 stdin 输入中创建多个 YAML 对象
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - sleep
    - "1000000"
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep-less
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - sleep
    - "1000"
EOF

# 创建包含几个 key 的 Secret
$ cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: $(echo "s33msi4" | base64)
  username: $(echo "jane" | base64)
EOF

API概述

类型

  • Alpha(最新的)

    • 包含 alpha 名称的版本(例如v1alpha1)。

    • 该软件可能包含错误。启用一个功能可能会导致 bug。默认情况下,功能可能会被禁用。

    • 随时可能会丢弃对该功能的支持,恕不另行通知。

    • API 可能在以后的软件版本中以不兼容的方式更改,恕不另行通知。

    • 该软件建议仅在短期测试集群中使用,因为错误的风险增加和缺乏长期支持。

  • Beta

    • 包含 beta 名称的版本(例如 v2beta3)。
    • 该软件经过很好的测试。启用功能被认为是安全的。默认情况下功能是开启的。
    • 细节可能会改变,但功能在后续版本不会被删除
    • 对象的模式或语义在随后的 beta 版本或 Stable 版本中可能以不兼容的方式发生变化。如果这种情况发生时,官方会提供迁移操作指南。这可能需要删除、编辑和重新创建API对象。
    • 该版本在后续可能会更改一些不兼容地方,所以建议用于非关键业务,如果你有多个可以独立升级的集群,你也可以放宽此限制。
    • 大家使用过的 Beta 版本后,可以多给社区反馈,如果此版本在后续更新后将不会有太大变化。
  • Stable(稳定版 -> 用这个)

    • 该版本名称命名方式:vX 这里 X 是一个整数。
    • Stable 版本的功能特性,将出现在后续发布的软件版本中。

访问控制

认证
授权

废弃API说明

https://kubernetes.io/zh-cn/docs/reference/using-api/deprecation-guide/

资源管理

学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作

资源管理介绍

  1. k8s本质就是一个集群系统,用户在集群中部署各种服务

    部署服务就是在k8s集群中,运行一个个的容器,并将制定的程序跑在容器内部

  2. k8s的最小管理单元是pod而不是容器,所以只能将容器放在pod中

    而k8s通常不会直接去管理pod,而是通过pod管理器来管理pod的

  3. 如何访问pod的服务呢?k8s提供了service资源实现这个功能

  4. 当然了,为了确保pod中程序数据的持久化,k8s还提供了各种存储系统

资源管理方式

类型 操作对象 适用环境 优点 缺点
命令式对象管理 对象 测试 简单 只能操作活动对象,无法审计、跟踪
命令式对象配置 文件 开发 可以审计、跟踪 项目大时,配置文件多,操作麻烦
声明式对象配置 目录 开发 支持目录操作 意外情况下难以调试
  • 命令式对象管理:直接使用命令去操作k8s资源

    kubectl run nginx-pod --image=nginx:1.17.1 --port=80

  • 命令式对象配置:通过命令配置和配置文件去操作k8s资源

    kubectl create/patch -f nginx-pod.yaml

  • 声明式对象配置:通过apply命令和配置文件去操作k8s资源

    kubectl apply -f nginx-pod.yaml

命令式对象管理

kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。

  • 命令语法格式

    kubectl [command] [type] [name] [flags]

    • comand:指定要对资源执行的操作,例如create、get、delete
    • type:指定资源类型,比如deployment、pod、service
    • name:指定资源的名称,名称大小写敏感
    • flags:指定额外的可选参数

    eg

    # 查看所有pod
    kubectl get pod 
    
    # 查看某个pod
    kubectl get pod pod_name
    
    # 查看某个pod,以yaml格式展示结果
    kubectl get pod pod_name -o yaml
    
  • 资源name

    k8s中所有的内容都抽象为资源,可以通过kubectl api-resources命令查看

    常用资源如下:

    集群级别资源 nodes no 集群组成部分
    namespaces ns 隔离Pod
    pod资源 pods po 装载容器
    pod资源控制器 replicationcontrollers rc 控制pod资源
    replicasets rs 控制pod资源
    deployments deploy 控制pod资源
    daemonsets ds 控制pod资源
    jobs 控制pod资源
    cronjobs cj 控制pod资源
    horizontalpodautoscalers hpa 控制pod资源
    statefulsets sts 控制pod资源
    服务发现资源 services svc 统一pod对外接口
    ingress ing 统一pod对外接口
    存储资源 volumeattachments 存储
    persistentvolumes pv 存储
    persistentvolumeclaims pvc 存储
    配置资源 configmaps cm 配置
    secrets 配置
  • 操作指令command

    k8s允许对资源进行多种操作,可以通过--help查看

    常用操作如下:

    基本命令 create 创建 创建一个资源
    edit 编辑 编辑一个资源
    get 获取 获取一个资源
    patch 更新 更新一个资源
    delete 删除 删除一个资源
    explain 解释 展示资源文档
    运行和调试 run 运行 在集群中运行一个指定的镜像
    expose 暴露 暴露资源为Service
    describe 描述 显示资源内部信息
    logs 日志输出容器在 pod 中的日志 输出容器在 pod 中的日志
    attach 缠绕进入运行中的容器 进入运行中的容器
    exec 执行容器中的一个命令 执行容器中的一个命令
    cp 复制 在Pod内外复制文件
    rollout 首次展示 管理资源的发布
    scale 规模 扩(缩)容Pod的数量
    autoscale 自动调整 自动调整Pod的数量
    高级命令 apply rc 通过文件对资源进行配置
    label 标签 更新资源上的标签
    其他命令 cluster-info 集群信息 显示集群信息
    version 版本 显示当前Server和Client的版本

    下面以一个namespace/pod的创建和删除来简单演示下

    # 创建一个namespace
    [root@master ~]# kubectl create namespace dev
    namespace/dev created
    
    # 获取namespace
    [root@master ~]# kubectl get ns
    NAME              STATUS   AGE
    default           Active   21h
    dev               Active   21s
    kube-node-lease   Active   21h
    kube-public       Active   21h
    kube-system       Active   21h
    
    # 在此namespace下创建并运行一个nginx的Pod
    [root@master ~]# kubectl run pod --image=nginx:latest -n dev
    kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
    deployment.apps/pod created
    
    # 查看新创建的pod
    [root@master ~]# kubectl get pod -n dev
    NAME  READY   STATUS    RESTARTS   AGE
    pod   1/1     Running   0          21s
    
    # 删除指定的pod
    [root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
    pod "pod" deleted
    
    # 删除指定的namespace
    [root@master ~]# kubectl delete ns dev
    namespace "dev" deleted
    
命令式对象配置

使用命令配合配置文件一起去操作k8s资源

创建yaml文件
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest
创建资源
[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
查看资源
[root@master ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18s

NAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s
删除资源
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
声明式对象配置

kubectl apply -f nginx-pod.yaml

总结:
    其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
    使用apply操作资源:
        如果资源不存在,就创建,相当于 kubectl create
        如果资源已存在,就更新,相当于 kubectl patch

kebectl在node节点上运行

只需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

scp -r HOME/.kube node1: HOME/

查看每种资源的可配置项

#小提示:
#   在这里,可通过一个命令来查看每种资源的可配置项
#   kubectl explain 资源类型         查看某种资源可以配置的一级属性
#   kubectl explain 资源类型.属性     查看属性的子属性
[root@k8s-master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1
FIELDS:
   apiVersion   <string>
   kind <string>
   metadata     <Object>
   spec <Object>
   status       <Object>

[root@k8s-master01 ~]# kubectl explain pod.metadata
KIND:     Pod
VERSION:  v1
RESOURCE: metadata <Object>
FIELDS:
   annotations  <map[string]string>
   clusterName  <string>
   creationTimestamp    <string>
   deletionGracePeriodSeconds   <integer>
   deletionTimestamp    <string>
   finalizers   <[]string>
   generateName <string>
   generation   <integer>
   labels       <map[string]string>
   managedFields        <[]Object>
   name <string>
   namespace    <string>
   ownerReferences      <[]Object>
   resourceVersion      <string>
   selfLink     <string>
   uid  <string>

推荐增删改查操作

  • 创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
  • 删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
  • 查询资源 使用命令式对象管理 kubectl get(describe) 资源名称
相关推荐
只因在人海中多看了你一眼1 分钟前
python语言基础
开发语言·python
deephub3 分钟前
使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
人工智能·pytorch·深度学习·图嵌入
小技与小术8 分钟前
数据结构之树与二叉树
开发语言·数据结构·python
hummhumm35 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
deephub35 分钟前
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
人工智能·深度学习·transformer·大语言模型·注意力机制
杜小满39 分钟前
周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程
python·随机森林·pycharm·集成学习
搏博1 小时前
神经网络问题之二:梯度爆炸(Gradient Explosion)
人工智能·深度学习·神经网络
KGback1 小时前
【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision
人工智能
电子手信1 小时前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
不高明的骗子1 小时前
【深度学习之一】2024最新pytorch+cuda+cudnn下载安装搭建开发环境
人工智能·pytorch·深度学习·cuda