Kubernetes 资源管理
一. 介绍
在 Kubernetes 中所有内容都抽象为资源,用户通过操作资源来管理 Kubernetes。
Kubernetes 本质上就是一个集群系统,用户可以在集群中部署各种各样的服务,所谓的部署服务,其实就是在 Kubernetes 集群中运行若干个容器,并将指定的程序放在容器中。
Kubernetes 最小管理单元是 Pod 而不是容器,所以只能将容器放在 Pod 中,二 Kubernetes 一般也不会直接管理 Pod,而是通过 Pod 控制器来管理 Pod。
Pod 可以提供服务之后,就需要考虑如何访问 Pod 的中的服务,Kubernetes 提供了 Service 资源实现了这个功能。
当然,如果 Pod 中程序的数据需要持久化,Kubernetes 提供了各种存储系统。
学习 Kubernetes 的核心,就是学习如何对集群上的 Pod、Pod 控制器、Service、存储等各种资源进行操作。
二. 资源管理方式
命令式对象管理,直接使用命令去操作 Kubernetes 资源
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
命令式对象配置:通过命令配置和配置文件去操作 Kubernetes 资源
kubectl create/patch -f nginx-pod.yaml
声明对象配置:通过 apply 命令和配置文件去操作 Kubernetes 资源(创建和更新)
kubectl apply -f nginx-pod.yaml
类型 | 操作对象 | 适用环境 | 优点 | 缺点 |
---|---|---|---|---|
命令式对象管理 | 对象 | 测试 | 简单 | 只能操作活动对象,无法审计、跟踪 |
命令式对象配置 | 文件 | 开发 | 可以审计、跟踪 | 项目大时,配置文件多,操作麻烦 |
声明对象配置 | 目录 | 开发 | 支持目录操作 | 意外情况下难以调试 |
2.1 命令式对象管理
kubectl 是 Kubernetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl 命令的语法如下:
kubectl [command] [type] [name] [flags]
- command:指定要对资源执行的操作,例如 create、get、delete
- type:指定资源类型,比如 deployment、pod、service
- name:指定资源的名称,名称大小写敏感
- flags:指定额外的可选参数
# 查看所有 pod
kubectl get pod
# 查看某个 pod
kubectl get pod [pod_name]
# 查看某个 pod,以 yaml 格式展示结果
kubectl get pod [pod_name] -o yaml
# 查看某个 pod,展示详细信息
kubectl get pod [pod_name] -o wide
(1)command
基本命令
命令 | 作用 |
---|---|
create | 创建一个资源 |
edit | 编辑一个资源 |
get | 获取一个资源 |
patch | 更新一个资源 |
delete | 删除一个资源 |
explain | 解释一个资源 |
运行和调试
命令 | 作用 |
---|---|
run | 在集群中运行一个指定镜像 |
expose | 暴露资源给 Service |
describe | 显示资源内部信息 |
logs | 输出容器在 Pod 中的日志 |
attach | 进入运行中的容器 |
exec | 执行容器中的一个命令 |
cp | 在 Pod 内外复制文件 |
rollout | 管理资源的发布 |
scale | 扩缩容 Pod 的数量 |
autoscale | 自动调整 Pod 的数量 |
高级命令
命令 | 作用 |
---|---|
apply | 通过文件对资源进行管理 |
label | 更新资源上的标签 |
其它命令
命令 | 作用 |
---|---|
cluster-info | 显示集群信息 |
version | 显示当前 Server 和 Client 的版本 |
(2)type
Kubernetes 中资源类型繁多,下面列举一下常用的资源,如果有需要可以通过下列命令查看资源列表:
kubectl api-resources
集群级别资源
资源名称 | 缩写 | 资源作用 |
---|---|---|
nodes | no | 集群组成部分 |
namespace | ns | 隔离 Pod |
Pod 资源
资源名称 | 缩写 | 资源作用 |
---|---|---|
pods | po | 装载容器 |
Pod 资源控制器
资源名称 | 缩写 | 资源作用 |
---|---|---|
replicationcontrollers | rc | 控制 Pod 资源 |
replicasets | rs | 控制 Pod 资源 |
deployments | ds | 控制 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 | 配置 |
下面以一个 namespace、pod 的创建和删除简单演示下列命令的使用:
# 创建一个 namespace
kubectl create namespace dev
# 获取 namesapce
kubectl get ns
# 在 dev namespace 下创建并运行一个 nginxPod
kubectl run pod --image=nginx -n dev
# 查看新建的 Pod (只要不是对 default 命名空间下资源的操作都需要加上-n 参数,指明操作的命名空间)
Kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod-864f9875b9-2vdfq 1/1 Running 0 60s
# 删除指定 Pod
kubectl delete pods pod-864f9875b9-2vdfq -n dev
# 删除指定 namespace
kubectl delete ns dev
2.2 命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作 Kubernetes 资源。
(1)创建一个 nginxpod.yaml,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:1.17.1
(2)执行 create 命令,创建资源:
[root@node01 ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
此时发现创建了两个资源,分别是 namespace 和 pod
(3)执行 get 命令查看资源
[root@node01 ~]# kubectl get -f nginxpod.yaml
NAME STATUS AGE
namespace/dev Active 2m56s
NAME READY STATUS RESTARTS AGE
pod/nginxpod 1/1 Running 0 2m55s
(4)删除资源
[root@node01 ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
2.3 声明式对象配置
声明式对象配置与命令式对象配置很相似,但是它只有一个命令 apply,主要用于资源的创建与更新。
# 首次执行一次 kubectl apply -f nginxpod.yaml 文件,代表创建资源
[root@node01 ~]# kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
# 第二次执行 kubectl apply -f nginxpod.yaml 文件,代表更新配置,但是由于配置文件内容并没有改变,所以会显示
namespace/dev unchanged
pod/nginxpod unchanged
其实声明式对象配置就是使用 apply 描述一个资源的最终状态(在 yaml 文件中定义)。如果描述的资源不存在,则创建该资源;如果描述的资源存在,则尝试更新该资源。
三. Node 节点运行 kubectl
默认情况下只能在 Master 节点上运行 kubectl 命令,我们需要将 Master 节点 ~/.kube
文件夹复制到 Node 节点上才能在 Node 节点上运行该命令:
# 将家目录下,kube 文件夹拷贝到 node02 节点的家目录下(这里写 node02 是因为 hosts 中配置 node02 的 IP)
scp ~/.kube/ node02:~/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Kubernetes 集群搭建
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论