1. 资源管理介绍

在 kubernetes 中,所有的内容都抽象为资源,用户需要通过操作资源来管理 kubernetes。

  1. kubernetes 的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在 kubernetes 集群中运行一个个容器,并将指定的程序跑在容器中。
  2. Kubernetes 的最小管理单元是 pod,而不是容器,所以只能将容器放在 pod 中,而 kubernetes 一般也不会直接管理 pod,而是通过 pod 控制器来管理 pod。
  3. Pod 可以提供服务之后,就要考虑如何访问 pod 中服务,kubernetes 提供了 service 资源实现这个功能。
  4. 如果 pod 中程序的数据需要持久化,kubernetes 还提供了各种存储系统。

学习 kubernetes 的核心就是学习如何对集群中 pod、pod 控制器、service、存储等各种资源进行操作。

2. 资源管理方式

  1. 命令式对象管理:直接使用命令去操作 kubernetes 资源
    • kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  2. 命令式对象配置:通过命令配置和配置文件去操作 kubernetes 资源
    • Kubectl create/path -f nginx-pod.yml
  3. 声明式对象配置:通过 apply 和配置文件去操作 kubernetes 资源
    • Kubectl apply -f nginx-pod.yml
类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试

2.1 命令式对象管理

Kubectl 命令

Kubectl 是 kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。
Kubectl 命令的语法如下:
Kubectl [command] [type] [name] [flags]

  • command:用来指定要对资源执行的操作,例如 create、get 以及 delete 等。
  • type:用来指定资源类型,资源类型是区分字母大小写的。用户可以以单数、复数以及缩略的形式指定资源类型,例如 pod、pods 或者 po 等。
  • name:用来指定资源的名称,资源名称也是区分字母大小写的。如果没有指定资源名称,则默认显示所有的资源。
  • flags:指定可选的参数。例如,可以使用 -s 或者 -server 参数,指定 Kubernetes API server 的地址和端口。

此外,用户可以通过kubectl help命令查找更多的帮助信息

kubectl get pods:查看所有 pod
kubectl get pod POD_NAME:查看某个 pod
kubectl get pod POD_NAME -o yaml:查看某个 pod,以 yaml 格式展示结果

资源对象类型

Kubernetes 中所有的内容都抽象为资源,可以通过kubectl api-resources查看
在这里插入图片描述

子命令

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出格式

默认情况下,kubectl 命令输出格式为纯文本。但是,用户可以通过-o或者--output选项来指定其他的输出格式。
在这里插入图片描述

namespace / pod的创建和删除演示

//创建一个namespace
[root@master ~]# kubectl create namespace kk
namespace/kk created

//获取namespace
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d22h
kk                Active   29s
kube-flannel      Active   2d22h
kube-node-lease   Active   2d22h
kube-public       Active   2d22h
kube-system       Active   2d22h

//在此namespace下创建并运行一个nginx的pod
[root@master ~]# kubectl run pod1 --image=nginx -n kk
pod/pod1 created

//查看新创建的pod
kubectl get pod1 -n kk

//删除指定pod
Kubectl delete pod pod-xxxxxx

//删除指定的namespace
[root@master ~]# kubectl delete ns kk
namespace "kk" deleted
  • default:所有未指定的 Namespace 的对象都会被分配在 default 命名空间。
  • kube-node-lease:集群节点之间的心跳维护,v1.13 开始引入。
  • kube-public:此命名空间的资源可以被所有人访问(包括未认证用户)。
  • kube-system:所有由kubernetes系统创建的资源都处于这个命名空间。

2.2 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作 kubernetes 资源

//创建一个nginxpod.yaml,内容如下
apiVersion: v1
kind: Namespace
metadata:
  name: kk
---

apiVersion: v1
kind: pod
metadata:
  name: nginxpod
  namespace: kk
spec:
  containers:
  - name: nginx-containers
    image: ngins:latest


//执行create命令,创建资源
[root@master ~]# kubectl create -f nginxpod.yaml 
//此时发现创建了两个资源对象,分别是namespace和pod


//执行get命令,查看资源
[root@master ~]# kubectl get -f nginxpod.yaml 
//这样就显示了两个资源对象的信息


//执行delete命令,删除资源
[root@master ~]# kubectl delete -f nginxpod.yaml 
//此时发现两个资源对象被删除了

总结:命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml 配置文件(里面是命令需要的各种参数)

2.3 声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令 apply。

//首先执行一次kubectl  apply  -f  yaml文件,发现创建了资源
[root@master ~]# kubectl apply -f nginxpod.yaml 

//再执行一次kubectl  apply  -f   yaml文件,发现说资源没有变动
[root@master ~]# kubectl apply -f nginxpod.yaml 

总结:
其实声明式对象配置就是使用 apply 描述一个资源最终的状态(在 yaml 中定义状态)

使用 apply 操作资源:

  • 如果资源不存在,就创建,相当于kubectl create
  • 如果资源已存在,就更新,就相当于kubectl patch

3. kubectl 可以在 node 节点上运行吗?

Kubectl 的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在 node 节点运行此命令,需要将 master 上的.kube文件复制到 node 节点上,即在 master 节点上执行下面操作
scp -r HOME/.kube node1:HOME/

4. 使用推荐:三种方式应该怎么用?

  1. 创建/更新资源,使用声明式对象配置kubectl apply -f XXX.yaml
  2. 删除资源,使用命令式对象配置 kubectl delete -f XXX.yaml
  3. 查询资源,使用命令式对象管理`kubectl get(describe) 资源名称
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐