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

命令式对象管理

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

command操作

# 查看所有pod
kubectl get pods

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

image-20210926200957153

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

image-20210926201217905

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

image-20210926201421782

type操作

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

image-20210926201950029

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

image-20210926202057499

# 增加一个pod节点命名为nginx 运行在dev名称空间下
kubectl run nginx --image=nginx:1.17.1 -n dev

# 查看指定名称空间下的pod节点
kubectl get pods -n dev

image-20210926202427550

# 删除名称空间下指定pod
kubectl delete pods nginx -n dev

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

image-20210926202723038

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

image-20210926224022956

# 删除指定的名称空间
kubectl delete namespace dev

# 查看名称空间
kubectl get namespaces 

image-20210926202857381

命令式对象配置

# 创建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

# 查看名称空间
kubectl get namespaces dev 

image-20210926215054725

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

image-20210926215138609

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

image-20210926215844639

总结

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

声明式对象配置

概述

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

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

  • apply相当于create和patch

应用示例

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

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

image-20210926222943661

# 更新上述nginx版本再次加载文件
image: nginx:1.17.1 ---> image: nginx:1.17.2

kubectl apply -f nginxpod.yaml

image-20210926223029070

# 查看创建信息
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节点上执行下面的操作:

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

快速编写yaml文件

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

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

kubectl create deployment nginx --image=nginx:1.17.1 --dry-run=client -n dev -o yaml > test.yaml
原文地址:https://www.cnblogs.com/SR-Program/p/15340870.html