(三)Kubernetes集群常用资源管理

本文详细介绍了Kubernetes中的资源管理,包括资源类型、YAML语言的应用、kubectl命令及其参数、命令式与声明式配置的区别,以及在Node节点执行kubectl的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.kubernetes资源管理介绍

2.YAML语言介绍

3.kubernetes资源管理方式

4.kubectl命令参数

4.1.kubectl基本操作

4.2.kubectl常用命令参数

4.3.k8s常用资源类型

5.k8s集群资源管理方式

5.1.命令式对象管理

5.2.命令式对象配置

5.3.声明式对象配置

6.在node节点执行kubectl命令


1.kubernetes资源管理介绍

在kubernetes中,所有的内容都抽象称为资源,用户需要通过操作资源来管理k8s

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署,就是在k8s集群中运行一个个的容器,将执行的程序运行在容器中

kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在pod中,而k8s一般也不会直接管理pod,而是通过pod控制器来管理pod

pod可以提供服务,就要考虑如何访问pod中的服务,kubernetes提供了service和ingress这两种资源来时间这个功能

当pod数据需要持久化,k8s也提供了很多种存储系统

在这里插入图片描述

2.YAML语言介绍

kubernetes中资源配置文件都是基于YAML语言编写

YAML语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 冒号后面至少有一个空格
  • #表示注释
  • 多段yaml配置放在一个文件中使用—分隔

YAML支持的数据类型

  • **纯量:**单个的、不可再分的值
  • **对象:**键值对的集合
  • **数组:**一组按次序排列的值

yaml转换json工具:http://json2yaml.com/convert-yaml-to-json

纯量数据

1.布尔类型
test1: true

2.整形
test2: 234

3.浮点型
test3: 5.27

4.null类型
test4: ~

5.日期类型
test5: 2020-01-01

6.时间类型
test6: 2020-02-11T9:02+09:00

7.字符串类型
test7: jiangxl

在这里插入图片描述

对象

jiangxl:
	job: it
  ad: beijing

数组

hosts:
  - 192.168.10.1
  - 192.168.10.2

3.kubernetes资源管理方式

  • 命令式对象管理:直接使用命令对资源进行操作

    kubectl run nginx-pod --image=nginx --port=80

  • 命令式对象配置:通过命令指定配置文件去操作资源

    kubectl create -f nginx-pod.yaml

  • 声明式对象配置:通过apply命令和配置文件去操作资源,相当于更新

    kubectl apply -f nginx-pod.yaml

类型操作对象适用环境优点缺点
命令式对象管理一个资源测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置一个文件生产可以审计、跟踪项目大时,配置文件太多,操作复杂
声明式对象配置整个目录生产支持目录操作意外情况下难以调试

4.kubectl命令参数

使用kubectl命令可以对集群的各种资源对象进行管理

kubectl命令语法:

​ kubectl [command] [type] [name] [flags]

**command:**指定要对资源进行什么操作,如create、delete、get

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

**name:**指定资源的名称

**flags:**指定额外的可选参数

4.1.kubectl基本操作
1.查看所有pod
[root@k8s-master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6d4cf56db6-wwmvl   1/1     Running   0          3h44m

2.查看某个pod
[root@k8s-master ~]# kubectl get pod nginx-6d4cf56db6-wwmvl
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6d4cf56db6-wwmvl   1/1     Running   0          3h45m

3.查看pod的yaml文件
[root@k8s-master ~]# kubectl get pod nginx-6d4cf56db6-wwmvl -o yaml

4.查看pod的json格式
[root@k8s-master ~]# kubectl get pod nginx-6d4cf56db6-wwmvl -o json

5.查看pod的详细信息
[root@k8s-master ~]# kubectl get pod nginx-6d4cf56db6-wwmvl -o wide

6.查看所有的资源类型
[root@k8s-master ~]# kubectl api-resources

4.2.kubectl常用命令参数

基本命令参数

命令含义
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显示集群版本
4.3.k8s常用资源类型

集群级别资源

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

pod资源

资源名称缩写资源作用
podpo装在容器

pod资源控制器

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

服务发现资源

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

存储资源

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

配置资源

资源名称缩写资源作用
configmapscm配置
secrets配置

5.k8s集群资源管理方式

创建更新资源:kubectl apply -f xxx.yaml kubect create -f xxx.yaml

删除资源:kubectl delete -f xxx.yaml

查看资源:kubect get|describe 资源名

5.1.命令式对象管理

索引命令式对象管理,就是通过kubectl命令加上各种参数运行一个资源

kubectl的-n参数用于指定namespace

创建一个namespace运行一个pod后再删除

1.创建一个dev的namespace
[root@k8s-master ~]# kubectl create ns dev
namespace/dev created

2.查看所有的namespace
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
cattle-system     Active   4h13m
default           Active   5h53m
dev               Active   6s
kube-node-lease   Active   5h53m
kube-public       Active   5h53m
kube-system       Active   5h53m

3.在dev namespace下运行一个nginx的pod
[root@k8s-master ~]# kubectl run pod --image=nginx -n dev
pod/pod created

4.查看创建的pod
[root@k8s-master ~]# kubectl get pod -n dev
NAME   READY   STATUS    RESTARTS   AGE
pod    1/1     Running   0          5m8s

5.删除一个pod
[root@k8s-master ~]# kubectl delete pod pod -n dev
pod "pod" deleted

6.删除一个namespace
[root@k8s-master ~]# kubectl delete ns dev
namespace "dev" deleted

5.2.命令式对象配置

所谓命令式对象配置就是kubectl命令加yaml配置文件的形式,yaml配置文件中定义了pod运行容器的各种参数

下面操作一个通过yaml来创建nginx pod

1.设置vim tab空格数
[root@k8s-master ~]# vim .vimrc 
set ts=2

2.编写nginx yaml文件
[root@k8s-master ~]# cd k8s_1.19_yaml/
[root@k8s-master ~/k8s_1.19_yaml]# cat nginxpod.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx
    
3.通过yaml创建pod
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginx-pod created

4.查看pod信息
[root@k8s-master ~/k8s_1.19_yaml]# kubectl get all -n dev
NAME            READY   STATUS    RESTARTS   AGE
pod/nginx-pod   1/1     Running   0          18s

5.通过yaml删除pod
[root@k8s-master ~/k8s_1.19_yaml]# kubectl delete -f nginxpod.yaml 
namespace "dev" deleted
pod "nginx-pod" deleted

5.3.声明式对象配置

所谓声明式对象配置其实就是更新资源的一些配置,比如nginx pod要更换新的镜像、更改pod名这些操作都需要用更新来实现

使用apply操作资源时,如果资源不存在,则创建,相当于执行了create命令,如果资源以及存在,则会更新

1.准备一个nginx yaml文件
[root@k8s-master ~/k8s_1.19_yaml]# vim nginxpod.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

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

2.使用kubectl create创建
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginx-pod created

3.更新yaml文件中镜像版本
[root@k8s-master ~/k8s_1.19_yaml]# vim nginxpod.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev

---

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: dev
spec:
  containers:
  - name: nginx-containers	
    image: nginx:1.15							#镜像版本调整为1.15

4.更新yaml
[root@k8s-master ~/k8s_1.19_yaml]# kubectl apply -f nginxpod.yaml 
namespace/dev configured
pod/nginx-pod configured

5.查看更新的过程
[root@k8s-master ~/k8s_1.19_yaml]# kubectl describe pod nginx-pod -n dev
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  93s   default-scheduler  Successfully assigned dev/nginx-pod to k8s-node2
  Normal  Pulling    93s   kubelet            Pulling image "nginx"
  Normal  Pulled     92s   kubelet            Successfully pulled image "nginx" in 907.242957ms
  Normal  Created    92s   kubelet            Created container nginx-containers
  Normal  Started    91s   kubelet            Started container nginx-containers
  Normal  Killing    22s   kubelet            Container nginx-containers definition changed, will be restarted
  Normal  Pulling    22s   kubelet            Pulling image "nginx:1.15"
可以看到镜像从nginx调整为nginx:1.15 	

6.在node节点执行kubectl命令

默认情况下,node节点无法执行kubectl命令

kubectl命令运行是需要配置文件的,配置文件默认在集群master节点初始化时,将文件放在了$HOME/.kube目录,如果想在node节点运行kubelet命令,需要将master节点的.kube目录拷贝至node节点上即可使用

一般不建议在node节点也开启kubectl命令

1.master节点将配置文件拷贝至node节点
[root@k8s-master ~]# scp -r .kube root@192.168.81.220:/root/
[root@k8s-master ~]# scp -r .kube root@192.168.81.230:/root/

2.查看node节点是否可用使用kubectl命令
[root@k8s-node1 ~]# kubectl get node
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   6h45m   v1.19.6
k8s-node1    Ready    <none>   6h27m   v1.19.6
k8s-node2    Ready    <none>   6h26m   v1.19.6

[root@k8s-node2 ~]# kubectl get node
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   6h44m   v1.19.6
k8s-node1    Ready    <none>   6h26m   v1.19.6
k8s-node2    Ready    <none>   6h26m   v1.19.6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值