开发者学堂课程【Kubernetes 极速入门:K8S 集群客户端工具_kubectl】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/658/detail/10904
K8S 集群客户端工具_kubectl
内容介绍:
一、场景
二、学习目标
三、学习步骤
四、课程内容
五、学习总结
一、场景
通过上次课程的学习播仔已经实现 k8s 集群的部署,接下来需要在 K8S 集群中去运行企业相关应用,而播仔应该如何使用 k8S 集群运行企业的应用程序呢?
那在这里边我们就需要提到在集群部署软件安装的时候的一个软件 kubectl,我们使用 kubectl 命令就可以来在 K8S 集群当中部署相关的应用。
二、学习目标
本次课程的学习目标主要有两个,第一,了解 kubectl 命令的帮助获取的方法;
第二,了解 kubectl 命令的使用分类,知道了使用分类以后,能够对我们的整个kubectl 集群的操控更加精准一些。
三、学习步骤
学习步骤是按照学习目标进行设置的,也分为两步,第一步就是 kubectl 命令的使用帮助方法,第二步就是 kubectl 命令的使用分类,当然这里面的命令指的是他的字命令。
1、kubectl 命令帮助方法
2、kubectl 子命令使用分类
四、课程内容
1、kubectl 的帮助方法
第一个内容就是的 kubectl 的帮助方法,如果我们想获得 kubectl 的帮助方法,首先我们要确认是否真的已经安装了 kubectl,kubectl 这个命令并不需要在集群的所有主机中都进行安装,但是我们在前期准备过程中已经全部完成了安装上,为什么说不一定需要全部安装,我们会在后期进行讲解。
l 代码命令:
[root@master1 ~]# rpm -qa
|
grep kubect1
首先检查 kubect1是否安装,我们可以使用 rpm -qa 命令,然后用过滤检查是否安装,如果已经安装了,那么我们就可以在此主机当中对 kubect1 的集群进行相关的操作。
[root@master1 ~]# kubect7 --help
第二个我们来看一下获取 kubectl 帮助的具体方法是什么,只需要在 kubect1后面--help 即可,操作十分简便。
l 下面我们进行实际的操作
我们在三个主机当中都进行相应的操作,输入 rpm-qa|grep kubectl 后回车,可以看到我们现在安装的软件版本,然后我们用相同的命令,看到另一主机上也是有kubectl 相关的安装,第三个节点也是一样的,可以看到在第三个点当中,我们也已经安装了 kubectl 软件,那么是否含有 kubectl 的相关命令,我们可以通过kubectl,然后直接使用 table,会看到三个命令,kubeadm、kubectl 和 kubelet,对于 worker1 和 worker22来讲也是一样的,可以看到也是三个相同命令,如果已经安装了,就可以获取到帮助方法,获取方法输入 kubectl--help,然后直接回车,就可以看到 kubectl 相关命令的帮助,这个帮助的内容是相当多的,也就意味着使用 kubectl 来操作 conatect 集群的话,会非常的方便,也非常的简单。
帮助的内容中 kubectl 是来控制集群管理的,如果需要去找更多的信息,可以查看相关链接。下面则是 kubectl 相关的一些命令分类,kubectl 在命令的使用过程当中,会对命令有很多类型的分类,比如说有基础命令的分类(Basic Commands -(Beginner))即适用于初学者的命令分类,还有基础命令分类(Basic Commands (Intermediate)),适用于中级的命令分类,然后还有部署类的命令分类(Deploy Commands),还有集群管理类的命令分类(Cluster Management Commands)等等,这些都属于 kubectl 子命令的分类,接下来我们来看一下我们的具体的子命令的分类。
2、kubectl子命令使用分类
在我们的课程当中提到了很多的分类群组,可以看到有基础命令,有部署命令、集群管理命令、故障诊断命令,还有高级命令、设置命令和其他命令等等,这些就是我们刚才在获得帮助的时候看到的一些命令。
l 基础命令(Basic Commands)
基础命令提到了两个,一个是适用于初学者的基础命令(Basic Commands -(Beginner)),一个是适用于中级的基础命令(Basic Commands (Intermediate))。
初学者的基础命令,比如说创建集群资源的方法(creat),不管是从哪个文件创建呢,还是从标准输入创建都是可以的;还有暴露一些应用的服务,那可以通过 expose命令来完成;可以通过 run 命令在集群当中去运行;利用 set 命令去设置对象的标签、资源的内容等等。在中级基础命令中,get 可以获得资源相关的查看内容,edit可以编辑资源内容,delete 可以删除资源,可以通过文件删除,也可以通过标准输入删除。以上统称为基础命令。
类型 |
命令 |
描述 |
基础命令 |
create |
通过文件名或标准输入创建资源 |
expose |
将一个资源公开为一个新的Service |
|
run |
在集群中运行一个特定的镜像 |
|
set |
在对象上设置特定的功能 |
|
get |
显示一个或多个资源 |
|
explain |
文档参考资料 |
|
edit |
使用默认的编辑器编辑一个资源。 |
|
delete |
通过文件名、标准输入、资源名称或标签选择器来删除资源。 |
类型 |
命令 |
描述 |
部署命令 |
rollout |
管理资源的发布 |
rolling-update |
对给定的复制控制器滚动更新 |
|
scale |
扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job |
|
autoscale |
创建一个自动选择扩容或缩容并设置Pod数量 |
l 部署类命令(Deploy Commands)
部署命令主要是对资源进行滚动更新的管理、应用的规模以及自动扩缩容等等。具体如下表所示:
l 集群管理类的命令
集群管理的命令主要是用来做集群相关的信息查看或者是查看资源占用的 cpu 等等,具体如下表所示:
类型 |
命令 |
描述 |
集群管理命令 |
certificate |
修改证书资源 |
cluster-info |
显示集群信息 |
|
top |
显示资源(CPU/Memory/Storage)使用。需要Heapster运行 |
|
cordon |
标记节点不可调度 |
|
uncordon |
标记节点可调度 |
|
drain |
驱逐节点上的应用,准备下线维护 |
|
taint |
修改节点taint标记 |
l 故障诊断和调试命令
故障诊断和调试命令,比如说当我们遇到某些资源出现一些故障的时候,我们可以通过 describe 命令去查看资源的描述,了解显示的信息;logs 命令主要是打印容器的相关信息,看容器的日志输出;通过 attach 命令进入容器当中去;通过 exec去执行某些命令,以测试应用是否正确,甚至于可以通过 copy 命令文件夹或者脚本等复制到容器当中去。
类型 |
命令 |
描述 |
故障诊断和调试命令 |
describe |
显示特定资源或资源组的详细信息 |
logs |
在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的 |
|
attach |
附加到一个运行的容器 |
|
exec |
执行命令到容器 |
|
port-forward |
转发一个或多个本地端口到一个pod |
|
proxy |
运行一个proxy到Kubernetes API server |
|
cp |
拷贝文件或目录到容器中 |
|
auth |
检查授权 |
l 高级命令
高级命令主要是用来在集群当中应用一些高级类型的选项。比如说 apply 命令就是通过文件名或者是标准输入对资源进行应用部署,它与基础命令 create 的功能是差不多的;patch 命令是使用补丁的修改或者是更新资源字段,后期使用过程中我们会用到。
类型 |
命令 |
描述 |
高级命令 |
apply |
通过文件名或标准输入对资源应用配置 |
patch |
使用补丁修改、更新资源的字段 |
|
replace |
通过文件名或标准输入替换一个资源 |
|
convert |
不同的API版本之间转换配置文件 |
l 设置类命令
设置的命令里面比如说可以设置一些资源的标签,或者更新一些资源标签等等,具体如下表所示:
类型 |
命令 |
描述 |
设置命令 |
label |
更新资源上的标签 |
annotate |
更新资源上的注释 |
|
completion |
用于实现kubect1工具自动补全 |
l 其他命令
其他的命令中比如 api resource、api version等等,具体如下所示:
类型 |
命令 |
描述 |
其他命令 |
api-versions |
打印受支持的API版本 |
config |
修改kubeconfig文件(用于访问API,比如配置认证信息) |
|
help |
所有命令帮助 |
|
plugin |
运行一个命令行插件 |
|
version |
打印客户端和服务版本信息 |
大家在使用过程当中可以针对这些命令的分组来进行使用,当然我们在使用过程中不会刻意的去进行分组,因为大家把所有的命令都能够熟练掌握后就不需要去分组了。
3、使用 kubectl 命令必要环境
使用 kubectl 命令来设置必要环境,我们在集群的三个节点当中,都已经安装了 kubectl,但并不是所有的节点都能够通过 kubectl 命令来管理集群,或者查看信息。
下面可以进行一个简单的验证,首先在 Quick connect master节点当中,直接使用 kubectl getnodes 后可以看到集群的所有节点,如果在 worker3当中也使用相同命令,我们无法完成全部的操作,会发现系统报错,表示连接服务器过程中被拒绝。
系统会询问是否提供了正确的主机或者端口,意味着 worker3虽然安装了 kubectl 命令,但是无法通过该命令来查看相关的集群操作,主要原因是 kubectl 命令在运行过程中用具有必要环境。
部署完 kubectl 命令以后,我们要想使用它来管理集群的时候,会发现一个隐藏的kube 文件夹,在 kube 文件夹当中有一个 config 文件,需要注意的是使用 kubectl命令来管理集群的时候必须使用config文件,因此哪一个主机获得了的该文件,哪个主机就可以来完成整个集群的管理操作。
其实这个文件中写的是 apiVersion:v1,然后下面是一个集群和一个证书,再往下最重要的是192.168.216.100:643,它是用来连接 kubernetes 的 IP 地址加端口,也就是说如果能够联系到这个 api 的 IP 加端口,就可以管理到集群了,所以当这个config 文件放在 worker1中,worker1 就可以完成对集群地管理。
l 如何将 config 文件放置呢?
首先第一步在worker1当中创建一个隐藏文件夹,然后把master1 root 中的kube/config文件拷贝到当前目录下来,此时就可以开始用 kubectl 进行相关的操作。
l 具体代码:
mkdir .kube
创建一个隐藏的文件夹,当然这个文件夹的名字可以自定义
scp master1:/root/.kube/config .kube/
处理完成以后,我们直接拷贝 master1的 root 目录当中.kube 下面的 config,然后把它拷贝到当前位置来,放到这个目录就可以了,拷贝完成以后,使用 kubectl get nodes 来进行相关的验证,可以看到整个集群的主机节点情况,也可以使用kubectl get pods -n kube -system,查看系统 pods 的运行情况。
以上就是对 kubectl 命令使用的过程必要环境的讲解,如果没有必要环境就无法完成 kubectl 的应用。
五、学习总结
本次的课程,主要讲解了K8S集群客户端工具 kubectl 命令的使用方法,主要分成三个部分进行讲解。
第一,kubectl 命令的帮助方法,其实很简单,只要安装了 kubectl,直接使用 kubectl--help 就可以了。
第二,了解 kubectl 命令的分类,分为基础命令、部署命令、集群管理命令、故障诊断和调试命令,还有一些高级命令,比如说kuber apply等高级命令,还有一些是设置类命令,设置某些功能的命令,然后还有一些其他的命令,比如说像api resourses 等等。
第三,就是如何使用kubectl 命令来访问或者是管理集群,以及它的必要的环境是什么,即config文件,这个文件如果存在于某一个主机当中,该主机就可以来管理集群。