我们在kubernetes集群中大部分的操作都是通过kubectl来实现的

1、何为kubectl

从用户角度来说,kubectl就是控制Kubernetes的驾驶舱,它允许你执行所有可能的Kubernetes操作;

从技术角度来看,kubectl就是Kubernetes API的一个客户端。

Kubernetes API是一个HTTP REST API服务,该API服务才是Kubernetes的真正用户接口,Kubernetes通过该API能够进行实际的控制,也就是说每个Kubernetes的操作都会通过API接口暴露出去,当然也就可以通过对这些API接口进行HTTP请求来执行相应的操作。

so,kubectl最主要的工作就是执行Kubernetes API的HTTP请求

2、Kubectl基本使用

2.1、命令补全

一般来说,命令补全是通过执行一个补全脚本的 shell 功能,补全脚本也是一个 shell 脚本,用于定义特定命令的补全功能。

kubectl 在 Bash 和 Zsh 下可以使用下面的命令自动生成并打印出补全脚本:

$ kubectl completion bash
# 或者
$ kubectl completion zsh

理论上在合适的 shell 中 source 上面命令的输出就可以开启 kubectl 的命令补全功能了

以Centos为例:

$ kubectl completion bash  >>/etc/profile
$ source /etc/profile

2.2、快速查找资源

我们在使用YAML文件创建资源时,需要知道这些资源的一些字段和含义,一个比较有效的方法就是去API文档中查看这些资源对象完整规范定义

但是如果每次要查找某些内容的时候都切换到浏览器去查询也是很麻烦的一件事情,所以,kubectl 为我们提供了一个kubectl explain 命令,可以在终端中直接打印出来所有资源的规范定义。kubectl explain命令的用法如下所示:

$ kubectl explain deployment.spec

默认情况下,kubectl explain命令只会显示属性的一级数据,我们可以使用--recursive参数来显示整个属性的数据:

$ kubectl explain deployment.spec --recursive

该命令会将 deployment.spec 属性下面所有的规范都打印出来。

如果你不太确定可以使用kubectl explain的资源名,可以使用下面的命令来获取所有资源名称:

$ kubectl api-resources

该命令会线上资源名称的复数形式(比如显示 deployments 而不是 deployment),还会显示一个资源的简写(比如 deploy),不过不用担心,我们可以用任意一个名称来结合kubectl explain命令使用的:

$ kubectl explain deployments.spec
# 或者
$ kubectl explain deployment.spec
# 或者
$ kubectl explain deploy.spec

2.3、使用自定义输出格式

kubectl get命令(读取集群资源)的默认输出格式如下:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 2 14h
nginx-app-deployment-9dfdc4785-6w92j 1/1 Running 0 26s
nginx-app-deployment-9dfdc4785-qphsd 1/1 Running 0 26s

上面的输出结果是一种比较友好的格式,但是它包含的信息比较有限,比如上面只显示了 Pod 资源中的一些信息(与完整资源定义相比)。

所以这个时候就有自定义输出格式的用武之地了,它允许我们自由定义要显示的列和数据,可以选择要在输出中显示为单独列的资源的任何字段。

自定义列输出的用法如下

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

需要将每个输出列定义为<header>:<jsonpath>这样的键值对:
<header>是列的名称,可以选择任何想要显示的内容。
<jsonpath>是一个选择资源属性的表达式。

我们来看一个简单的例子:

$ kubectl get pods -o custom-columns="NAME:metadata.name"
NAME
busybox
nginx-app-deployment-9dfdc4785-6w92j
nginx-app-deployment-9dfdc4785-qphsd

3、陈述式管理资源

上面说完了kubectl的基本使用,这里来说如何使用kubectl实现资源的陈述式管理。

3.1、管理namespace资源

namespace也称为名称空间,可简写ns,默认名称空间:default

1.查看namespace

$ kubectl get namespace
NAME STATUS AGE
default Active 18h
kube-node-lease Active 18h
kube-public Active 18h
kube-system Active 18h

2.查看指定名称空间

$ kubectl get all [-n default]

3.创建名称空间

$ kubectl create ns app
namespace/app created

4.删除名称空间

$ kubectl delete ns app
namespace "app" deleted

3.2、管理Deployment资源

1.创建nginx

$ kubectl create deployment nginx-dp --image=nginx:1.7.9 -n kube-public
deployment.apps/nginx-dp created

2.简单查看

$ kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 6s

3.扩展查看

$ kubectl get deployment -n kube-public -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dp 1/1 1 1 3m24s nginx nginx:1.7.9 app=nginx-dp

4.详细查看

$ kubectl describe deployment nginx-dp -n kube-public

3.3、管理pod资源

1.查看pod资源

$ kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-6599b486d9-sj47f 1/1 Running 0 41m

2.进入pod资源

$ kubectl exec -it nginx-dp-6599b486d9-sj47f bash -n kube-public
root@nginx-dp-6599b486d9-sj47f:/# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:07:16:03 brd ff:ff:ff:ff:ff:ff
inet 172.7.22.3/24 brd 172.7.22.255 scope global eth0
valid_lft forever preferred_lft forever

当然你也可以通过docker exec 进入容器

3.删除pod资源(重启)

$ kubectl delete pod nginx-dp-6599b486d9-sj47f -n kube-public
pod "nginx-dp-6599b486d9-sj47f" deleted $ kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-6599b486d9-tnr4h 1/1 Running 0 4s

使用watch观察pod重建状态变化

强制删除参数:--force --grace-period=0

4.删除deployment

$ kubectl delete deployment nginx-dp -n kube-public
deployment.extensions "nginx-dp" deleted

3.4、管理Service资源

1.创建service

$ kubectl create deployment nginx-dp --image=nginx:1.7.9 -n kube-public
deployment.apps/nginx-dp created
$ kubectl expose deployment nginx-dp --port=80 -n kube-public
service/nginx-dp exposed

2.查看service

$ kubectl describe svc nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
Labels: app=nginx-dp
Annotations: <none>
Selector: app=nginx-dp
Type: ClusterIP
IP: 192.168.241.190
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 172.7.22.3:80
Session Affinity: None
Events: <none>

Kubernetes 命令行工具之kubctl的更多相关文章

  1. 九、kubernetes命令行工具kubectl

    为了方便在命令行下对集群.节点.pod进行管理,kubernetes官方提供了一个管理命令:kubectl kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作. ...

  2. CloudFoundry命令行和Kubernetes命令行的Restful API消费方式

    先说CloudFoundry的命令行工具CLI.我们在CloudFoundry环境下工作,第一个使用的命令就是cf login. 如果在环境变量里维护CF_TRACE的值为true: 则我们能发现,诸 ...

  3. 手把手教你打造高效的 Kubernetes 命令行终端

    Kubernetes 作为云原生时代的操作系统,熟悉和使用它是每名用户的必备技能.本文将介绍一些提高操作 Kubernetes 效率的技巧以及如何打造一个高效的 Kubernetes 命令行终端的方法 ...

  4. go Cobra命令行工具入门

    简介 Github:https://github.com/spf13/cobra Star:26.5K   Cobra是一个用Go语言实现的命令行工具.并且现在正在被很多项目使用,例如:Kuberne ...

  5. 第九章 kubectl命令行工具使用详解

    1.管理k8s核心资源的三种基础方法 陈述式管理方法:主要依赖命令行CLI工具进行管理 声明式管理方法:主要依赖统一资源配置清单(manifest)进行管理 GUI式管理方法:主要依赖图形化操作界面( ...

  6. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  7. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  8. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  9. nodejs 编写(添加时间戳)命令行工具 timestamp

    Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...

随机推荐

  1. Day13 流程控制

    Linux中的流程控制语句 一.if语句 1.单分支if条件语句 格式:if [ 条件判断式 ] then 程序     fi 注意:1.在Linux中是以if开头,fi结尾.其他地方一般是{开头,} ...

  2. VUE开发之异常篇

    1.WebStorm 编译器报错: Unresolved function or method require() 解决办法:   打开WebStorm 按照以下路径寻找 Preferences -& ...

  3. 听说你还搞不定java中的==和equals?

    相信很多读者关于==和equals懂了又懵,懵了又懂,如此循环,事实上可能是因为看到的博客文章之类的太多了,长篇大论,加上一段时间的洗礼之后就迷路了.本篇文章再一次理清楚.当然如果觉得本文太啰嗦的话, ...

  4. 字符串学习笔记(三)---- StringBuilder

    一.前言 StringBuilder是jdk1.5后出现的,而StringBuffer是jdk1.0就出现了,并且在功能上俩者并无太大区别.但为什么后来要添加一个StringBuilder呢?这是为了 ...

  5. 如何查看网页的header

    1.例如打开要爬取的网页:https://www.zhihu.com/explore 2.按下F12,点击Network 3.刷新页面,点击explore 4.选取request headers,us ...

  6. STM32F103ZET6独立看门狗

    1.IWDG简介 STM32F103ZET6的独立看门狗(IWDG)是由内部LSI(内部约40KHZ低速时钟)时钟驱动的.由于IWDG是由内部低速时钟驱动,所以就算主时钟发生故障,IWDG依然能够工作 ...

  7. Three中的动画实现-[three.js]

    Table Of Content 动画原理 js中动画实现原理setInterval js中动画实现新方法requestAnimationFrame 一个示例 动画原理 动画的本质实际上就是快速地不断 ...

  8. 201771030106-葛佳诚 实验一 软件工程准备-<初读《构建之法——现代软件工程》有问>

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE 作业要求链接 https://www.cnblogs.com/nwnu-da ...

  9. var、let和const的区别详解

      let 和 const 是 ECMAScript6 新推出的特性,其中 let 是能够替代 var 的"标准",所以我们探讨 var.let 和 const 的区别,首先应该知 ...

  10. 薅羊毛? 月入10万? | 这是自动化测试老司机的特长--Python自动化带你薅视频红包,一个都不放过!

    一.目标场景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. ​ 与传统的红包不一样,视频红包包含位置的不确定性.大小不确定性.元素 ID 的不确定性 ...