一、资源管理介绍
在Kubernetes中所有内容都抽象为资源,用户需要通过操作资源来管理Kubernetes。
-
kubernetes的本质上就是一个集群系统,用户可以在集群中部署名种服务,所谓的部署服务,其实就是在 kubernetes集群中运行一 个个的容器,并将指定的程序跑在容器中
-
kubernetes的最小管理单元是pod而不是容器, 所以只能将容器放在 pod中,而kubernetes一般也不会直接管理Pod, 而是通过 Pod控制器 来管理Rod的。
-
Pod可以提供服务之后,就要考虑如何访问Pod中的服务,kubernetes提供了 service 资源实现这个功能。
-
当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系統。
二、资源管理方式
1.命令式对象管理:直接使用命令操作资源
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
2.命令式对象配置:通过命令配置和配置文件去操作资源
kubectl create/patch -f nginx-pod.yml
3.声明式对象配置:通过apply命令和配置文件去操作资源
只适合用于创建和更新资源
kubectl apply -f nginx-pod.yml
命令式对象管理
kubectl命令
kubecul是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能在集群上进行容器化应用的 安装部署。kubectl命令的语法如下 :
kubectl [command] [type] [namel] [flags]
command:指定要对资源执行的操作,例create、 get、 delete
type :指定资源类型,比如deployment、pod、 service
name:指定资源的名称,名称大小写敏感
fags: 指定额外的可选参数
#查看所有pod
kubectl get pod
# 查看某个
pod kubectl get pod pod_name
# 查看某个pod,以ymal格式展示结果
kubectl get pod pod_name -o yaml
常用的操作命令
命令分类 | 命令 | 作用 |
---|---|---|
基本命令 | create | 创建一个资源 |
基本命令 | edit | 编辑一个资源 |
基本命令 | get | 获取一个资源 |
基本命令 | patch | 更新一个资源 |
基本命令 | delete | 删除一个资源 |
基本命令 | explain | 展示资源文档 |
运行和调试 | run | 在集群中运行一个指定的镜像 |
运行和调试 | expose | 暴露资源为service |
运行和调试 | describe | 显示资源内部信息 |
运行和调试 | logs | 输出容器在pod中的日志 |
运行和调试 | attach | 进入运行中的容器 |
运行和调试 | exec | 执行容器中的一个命令 |
运行和调试 | cp | 在pod内外复制文件 |
运行和调试 | rollout | 管理资源的发布 |
运行和调试 | scale | 扩(缩)容pod的数量 |
运行和调试 | autoscale | 自动调整pod数量 |
高级命令 | apply | 通过文件对资源进行配置 |
高级命令 | lable | 更新资源上的标签 |
其他命令 | cluster-info | 显示集群信息 |
其他命令 | version | 显示当前server和client的版本 |
资源类型
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl api-resources
经常使用的资源
资源分类 | 资源名称 | 缩写 | 作用 |
---|---|---|---|
集群级别资源 | node | no | 集群组成部分 |
集群级别资源 | namespace | ns | 隔离pod |
pod资源 | pods | po | 装载容器 |
pod资源控制器 | node | no | 集群组成部分 |
pod资源控制器 | replicationcontrollers | r c | 控制pod资源 |
pod资源控制器 | replicasets | rs | 控制pod资源 |
pod资源控制器 | deployments | deploy | 控制pod资源 |
pod资源控制器 | daemonsets | ds | 控制pod资源 |
pod资源控制器 | jobs | ---- | 控制pod资源 |
pod资源控制器 | cronjobs | cj | 控制pod资源 |
pod资源控制器 | horizontalpodautpscalers | hpa | 控制pod资源 |
pod资源控制器 | statefilsets | sts | 控制pod资源 |
服务发现资源 | service | svc | 统一pod对外接口 |
服务发现资源 | ingreess | ing | 统一pod对外接口 |
存储资源 | volumeattachments | ---- | 存储 |
存储资源 | persistentvolumes | pv | 存储 |
配置资源 | configmaps | cm | 配置 |
配置资源 | secrets | — | 配置 |
例子:
命令式对象配置
就是使用配置文件一起来操作资源
1.创建一个nginx.yml
# 创建一个dev的namespace
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
# 在dev命名空间中创建一个pod
apiVersion: v1
kind: Pod
metadata:
name: nginxpod # pod的名字
namespace: dev
spec:
containers:
- name: nginx-containers # pod中容器的名字
image: nginx:1.17.1
2.执行create命令,创建资源
[root@k8s-master ~]# kubectl create -f nginxpod.yml
namespace/dev1 created
pod/nginxpod1 created
会发现创建了两个资源namespace和pod
需要删除刚创建的两个资源时,可以使用命令:
kubectl delete -f nginxpod.yml
声明式对象配置
仅仅用于新增和更新,使用两次apply命令会发现,提示没有更新,它的作用就是,资源存在就更新,相当于kubectl patch 命令;资源存不在就创建相,当于kubectl create 命令;
扩展
kubectl可以在node节点上运行吗?
kubect的运行是需要进行配置的,它的配置文件是在master上面的$HOME/.kube, 如果想要在node节点运行此命令,需要将 master上的.kube文件复制到node节点上,即在master节点上执行下面操作:
scp -r ~/.kube node1: ~/
使用推荐 三种方式应该怎么用?
创建/更新资源 使用声明式对象配置 kubectl apply f xxxyaml
删除资源 使用命令式对象配置 kebect delete -f xxxyaml
查询资源 使用命令式对象管理 Kubact get(desaribe) 资源名称