k8s 资源管理
k8s 资源管理
文章目录
1. 资源管理介绍
在 kubernetes 中,所有的内容都抽象为资源,用户需要通过操作资源来管理 kubernetes。
- kubernetes 的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在 kubernetes 集群中运行一个个容器,并将指定的程序跑在容器中。
- Kubernetes 的最小管理单元是 pod,而不是容器,所以只能将容器放在 pod 中,而 kubernetes 一般也不会直接管理 pod,而是通过 pod 控制器来管理 pod。
- Pod 可以提供服务之后,就要考虑如何访问 pod 中服务,kubernetes 提供了 service 资源实现这个功能。
- 如果 pod 中程序的数据需要持久化,kubernetes 还提供了各种存储系统。
学习 kubernetes 的核心就是学习如何对集群中 pod、pod 控制器、service、存储等各种资源进行操作。
2. 资源管理方式
- 命令式对象管理:直接使用命令去操作 kubernetes 资源
- kubectl run nginx-pod --image=nginx:1.17.1 --port=80
- 命令式对象配置:通过命令配置和配置文件去操作 kubernetes 资源
- Kubectl create/path -f nginx-pod.yml
- 声明式对象配置:通过 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. 使用推荐:三种方式应该怎么用?
- 创建/更新资源,使用声明式对象配置
kubectl apply -f XXX.yaml
- 删除资源,使用命令式对象配置
kubectl delete -f XXX.yaml
- 查询资源,使用命令式对象管理`kubectl get(describe) 资源名称
更多推荐
所有评论(0)