Kubernetes 资源管理

发布于 2024-02-07 10:06:12 字数 7790 浏览 21 评论 0

一. 介绍

在 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

集群级别资源

资源名称缩写资源作用
nodesno集群组成部分
namespacens隔离 Pod

Pod 资源

资源名称缩写资源作用
podspo装载容器

Pod 资源控制器

资源名称缩写资源作用
replicationcontrollersrc控制 Pod 资源
replicasetsrs控制 Pod 资源
deploymentsds控制 Pod 资源
daemonsetsds控制 Pod 资源
jobs 控制 Pod 资源
cronjobscj控制 Pod 资源
horizontalpodautoscalershpa控制 Pod 资源
statefulsetssts控制 Pod 资源

服务发现资源

资源名称缩写资源作用
servicessvc统一 Pod 对外接口
ingressing统一 Pod 对外接口

存储资源

资源名称缩写资源作用
volumeattachments 存储
persistentvolumespv存储
persistentvolumeclaimspvc存储

配置资源

资源名称缩写资源作用
configmapscm配置
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

走过海棠暮

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

missyouangeled

文章 0 评论 0

三生一梦

文章 0 评论 0

压抑⊿情绪

文章 0 评论 0

☆獨立☆

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文