Kubernetes资源管理

Kubernetes资源管理#

简介#

Linux 中拥有一切皆文件的概念,在 Python 中含有一切皆对象的概念,而在 K8S 中含有一切皆资源的概念

其实K8S 本质上是一组服务器组成的集群系统,用户可以在该集群之中部署各种服务,所谓各种服务其实就是运行在 pod 中的一个个容器资源,并且将指定的程序运行到 pod 之中,例如在 pod 中含有一个 MySQL 容器对外提供服务

K8S 中最小的管理单元是 pod 而不是容器,所以我们只能将容器运行在 pod 之中,而且 K8S 一般也不会直接操控 pod 而是通过 pod 控制器对 pod 进行管理操控

当容器成功的在 pod 之中运行,我们就需要思考如何访问这个容器,在 K8S 之中提供了 service 资源来帮我忙进行容器的访问

如果 pod 中程序的数据需要持久化,K8S 还提供了各种存储系统

image-20210926190058743

资源管理方式#

资源管理类型#

  • 命令式对象管理:直接使用命令操作K8S资源
Copy
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  • 命令式对象配置:通过命令配置和配置文件操作K8S资源
Copy
kubectl create/patch -f nginx-pod.yaml
  • 声明式对象配置:通过apply命令和配置文件取操作K8S资源
Copy
kubectl apply -f nginx-pod.yaml
类型 操作 适用场景 优点 缺点
命令式对象管理 对象 测试 操作简单 无法跟踪,审计
命令式对象配置 文件 开发 跟踪,审计 项目大的时候,配置文件多,操作麻烦
声明式对象配置 目录 开发 目录操作 意外情况下难以调试

命令式对象管理#

  • kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。
  • 语法如下
Copy
kubectl [command] [type] [name] [flags]
  • command:需要执行的命令 例如create/get/delete等
  • type:指定资源的类型 例如deployment/pod/service
  • name:指定资源名称,名称大小写区分
  • flags:指定额外的参数

command操作#

Copy
# 查看所有pod kubectl get pods # 查看指定pod加上pod名称 kubectl get pods nginx-55f8fd7cfc-s56b5

image-20210926200957153

Copy
# 查看pod详细信息 kubectl get pod nginx-55f8fd7cfc-s56b5 -o wide

image-20210926201217905

Copy
# 查看pod节点以yaml或者json格式展示信息 kubectl get pod nginx-55f8fd7cfc-s56b5 -o yaml

image-20210926201421782

type操作#

Copy
# 创建一个名为dev的名称空间 kubectl create namespace dev

image-20210926201950029

Copy
# 查看指定名称空间 kubectl get namespaces dev

image-20210926202057499

Copy
# 增加一个pod节点命名为nginx 运行在dev名称空间下 kubectl run nginx --image=nginx:1.17.1 -n dev # 查看指定名称空间下的pod节点 kubectl get pods -n dev

image-20210926202427550

Copy
# 删除名称空间下指定pod kubectl delete pods nginx -n dev # 查看pod节点 kubectl get pods -n dev

image-20210926202723038

Copy
# 查看创建过程 kubectl describe pod nginx -n dev

image-20210926224022956

Copy
# 删除指定的名称空间 kubectl delete namespace dev # 查看名称空间 kubectl get namespaces

image-20210926202857381

命令式对象配置#

Copy
# 创建nginxpod.yaml文件 cat > nginxpod.yaml << EOF apiVersion: v1 # 创建名称空间 kind: Namespace metadata: # 名称空间命名为dev name: dev --- apiVersion: v1 kind: Pod metadata: # 创建nginxpod name: nginxpod # 加入dev名称空间 namespace: dev spec: containers: # 容器名称 - name: nginx-containers # nginx镜像 image: nginx:1.17.1 EOF # 加载yaml配置文件 kubectl create -f nginxpod.yaml # 查看配置文件状态 kubectl get -f nginxpod.yaml

image-20210926214755325

Copy
# 查看名称空间 kubectl get namespaces dev

image-20210926215054725

Copy
# 查看pod节点 kubectl get pod -n dev

image-20210926215138609

Copy
# 删除namespace与pod kubectl delete -f nginxpod.yaml

image-20210926215844639

总结#

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

声明式对象配置#

概述#

  • 声明式对象配置:通过apply命令和配置文件去操作kubernetes的资源。

  • 声明式对象配置和命令式对象配置类似,只不过它只有一个apply命令。

  • apply相当于create和patch

应用示例#

Copy
# 使用配置文件 kubectl apply -f nginxpod.yaml # 再次使用配置文件 kubectl apply -f nginxpod.yaml

image-20210926222943661

Copy
# 更新上述nginx版本再次加载文件 image: nginx:1.17.1 ---> image: nginx:1.17.2 kubectl apply -f nginxpod.yaml

image-20210926223029070

Copy
# 查看创建信息 kubectl describe pods -n dev nginxpod

image-20210926223220797

总结#

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

  • 使用apply操作资源:

    • 如果资源不存在,就创建,相当于kubectl create。

    • 如果资源存在,就更新,相当于kubectl patch。

使用方式推荐#

  • 创建和更新资源使用声明式对象配置:kubectl apply -f xxx.yaml。

  • 删除资源使用命令式对象配置:kubectl delete -f xxx.yaml。

  • 查询资源使用命令式对象管理:kubectl get(describe) 资源名称。

node节点运行kubectl#

kubectl的运行需要进行配置,它的配置文件是$HOME/.kube,如果想要在Node节点上运行此命令,需要将Master节点的.kube文件夹复制到Node节点上,即在Master节点上执行下面的操作:

Copy
scp -r $HOME/.kube k8s-node1:$HOME

快速编写yaml文件#

  • 此种方式适用于没有真正部署资源。
  • 使用kubectl create命令生成yaml文件:
Copy
kubectl create deployment nginx --image=nginx:1.17.1 --dry-run=client -n dev -o yaml

如果yaml文件太长,可以写入到指定的文件中。

Copy
kubectl create deployment nginx --image=nginx:1.17.1 --dry-run=client -n dev -o yaml > test.yaml
posted @   SR丶  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS