2、k8s资源管理_命令式对象管理演示简单创建删除

k8s 的资源管理方式

  • 命令式对象管理:直接使用命令去操作 k8s 资源(参数 nginx-pod 为 pod 名称)

kubectl run nginx-pod –image=nginx:1.17.1 –port=80

  • 命令式对象配置:通过命令配置和配置文件去操作 k8s 资源 即将命令写到文件中类似于 docker-compose(参数 create/patch == 创建/更新 即要做的事是 通过文件 创建和更新 nginx-pod 要做的事情定义在 nginx-pod 文件中 )

nginx-pod.yaml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: v1
kind: Namespace
metadata:
name: dev

---

apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:latest

kubectl create/patch -f nginx-pod.yaml

  • 声明式对象配置:通过 apply 命令和配置文件去操作 k8s 资源( apply 只用于创建和更新资源 即如果有则更新资源 无则创建资源 如删除则需要用 kubectl delete)

kubectl apply -f nginx-pod.yaml

上述三种方式优缺点和应用场景

类型操作对象适用环境优点缺点
命令式对像管理对象测试简单只能操作活动对象,无法审计,跟踪
命令式对象配置文件开发可以审计,跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试

一. 命令式对象管理

kubectl命令

kubectl 是 kuberbetes 集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:

kubectl 【conmand】【type】【name】【flags】

conmand:指定要对资源执行的操作、例如create、get、delete、apply

type: 指定资源类型,比如 deployment,pod,service

name:指定资源的名称 名称大小写敏感

flags:指定额外的可选参数

1
2
3
4
5
6
7
8
9
10
# 查看所有pod
kubectl get pod
# 查看某个pod
kubectl get pod pod_name
# 查看pod详细信息
kubectl get pod pod_name -o wide
# 以json形式显示
kubectl get pod pod_name -o json
# 查看某个pod以yaml方式显示结果
kubectl get pod pod_name -o yaml

查询<span class="ne-text">pod</span>

1. 上方 commond`操作

kubernetes允许对资源进行多种操作,可以通过–help查看详细的操作命令

kubectl –help

经常使用的操作有下面这些:

命令分类命令翻译命令作用
基本命令create创建创建一个资源
edit编辑编辑一个资源
get获取获取一个资源
patch更新更新一个资源
delete删除删除一个资源
explain解释展示资源文档
运行和调试run运行在集群中运行一个指定的镜像
expose暴露暴露资源为 Service
describe描述显示资源内部信息
logs日志输出容器在 pod 中的日志输出容器在 pod 中的日志
attach缠绕进入运行中的容器进入运行中的容器
exec执行容器中的一个命令执行容器中的一个命令
cp复制在Pod内外复制文件
rollout首次展示管理资源的发布
scale规模扩(缩)容Pod的数量
autoscale自动调整自动调整Pod的数量
高级命令applyrc通过文件对资源进行配置
label标签更新资源上的标签
其他命令cluster-info集群信息显示集群信息
version版本显示当前Server和Client的版本

a. 演示上方操作如下

①.基本命令

②.运行和调试

  • kubectl expose deploy nginx –port=80 –target-port=80 –type=NodePort 暴露端口
  • kubectl describe pod nginx-54b7d798b5-2cxdv 查看容器详细信息

2.资源类型对应上方``

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:

kubectl api-resources

经常使用的资源有下面这些:

资源分类资源名称缩写资源作用
集群级别资源nodesno集群组成部分
namespacesns隔离Pod
pod资源podspo装载容器
pod资源控制器replicationcontrollersrc控制pod资源
replicasetsrs控制pod资源
deploymentsdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontalpodautoscalershpa控制pod资源
statefulsetssts控制pod资源
服务发现资源servicessvc统一pod对外接口
ingressing统一pod对外接口
存储资源volumeattachments存储
persistentvolumespv存储
persistentvolumeclaimspvc存储
配置资源configmapscm配置
secrets配置

nodes

  • kubectl get nodes 查询节点信息

a. 下面以一个 namespace / pod的创建和删除简单演示下命令的使用:

查看缩写命令:kubectl api-resources

1
2
3
4
5
6
7
8
9
10
11
12
# 创建一个namespace
kubectl create namespace dev
# 或者使用缩写
kubectl create ns dev
# 查看是否创建成功
kubectl get ns
# 创建一个pod在dev下面 不指定则会在default下面
kubectl create deployment nginx --image=registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:nginx-latest -n dev
# 使用此命令创建的pod删除后会自动重建需要使用下方命令才能彻底删除
# 原因:当一个Pod被删除后,如果它是由一个ReplicaSet、Deployment或其他控制器管理的,那么控制器会自动创建一个新的Pod来替代被删除的Pod,以确保应用的可用性和副本数目的一致性。
kubectl delete deployment nginx -n dev
kubectl delete service nginx -n dev

查看创建的pod详细信息

1
2
3
4
5
6
7
8
9
10
11
12
# 查看dev 命名空间下面的pod
kubectl get pod -n dev
# 查看创建过程中的详细信息
kubectl describe pod nginx-54b7d798b5-9p97w -n dev
# 删除dev下面刚刚创建的pod
kubectl delete pod nginx-54b7d798b5-9p97w -n dev
# 此时查看发现还有 其实之前的我们已经删了 只是它又重新启动了一个而已
kubectl get pods -n dev
# 删除dev namespace(稍微等待一会儿)
kubectl delete ns dev
# 查看ns 和 pod此时dev没了下面的pod也没了
kubectl get ns

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/12/image_cd93f06166727df2e0922f4a69f070b2.png

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/12/image_f20d485db3208befe88b697a698fc5ca.png