Kubernetes 资源管理

Kubernetes 管理资源

1. 资源管理介绍

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

kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。

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

Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service资源实现这个功能。

当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储系统。

2. 资源管理方式

  • 命令式对象管理:直接使用命令去操作kubernetes资源
//例如:
[root@kiwi111 ~]#  kubectl create deployment httpd --image=httpd
  • 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
//例如:
kubectl create/patch -f httpd_pod.yaml
  • 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源
kubectl apply -f httpd_pod.yaml
类型操作对象适用环境优点缺点
命令式对象管理对象测试简单只能操作活动对象,无法审计、跟踪
命令式对象配置文件开发可以审计、跟踪项目大时,配置文件多,操作麻烦
声明式对象配置目录开发支持目录操作意外情况下难以调试

2.1 命令式对象管理

kubectl命令

//语法:
kubectl [command] [type] [name] [flags]

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

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

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

flags:指定额外的可选参数

操作

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的版本

资源类型

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配置

命令的使用

//创建一个资源控制器并指定httpd镜像
[root@kiwi111 ~]#  kubectl create deployment httpd --image=httpd

//获取pod资源控制器
[root@kiwi111 ~]#  kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
httpd   1/1     1            1           17m

//编辑名为httpd的service
[root@kiwi111 ~]# kubectl edit svc/httpd

//更新
[root@kiwi111 ~]# kubectl patch deployment patch-demo --patch-file patch-file.yaml

//删除一个资源控制器
[root@kiwi111 ~]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
httpd   1/1     1            1           36m
[root@kiwi111 ~]# kubectl delete deploy httpd
deployment.apps "httpd" deleted
[root@kiwi111 ~]# kubectl get deployment
No resources found in default namespace.

//展示资源文档
[root@kiwi111 ~]# kubectl explain deployment

//创建一个指定httpd镜像的容器
[root@kiwi111 ~]# kubectl run httpd --image=httpd
pod/httpd created
[root@kiwi111 ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
httpd   1/1     Running   0          14s

//暴露80端口
[root@kiwi111 ~]# kubectl run httpd --image=httpd
[root@kiwi111 ~]# kubectl expose pods httpd --port=80
service/httpd exposed

//查看httpd容器的描述信息
[root@kiwi111 ~]# kubectl describe pods httpd

//查看在pod中的日志
[root@kiwi111 ~]# kubectl logs httpd

//执行容器里的一个命令
[root@kiwi111 ~]# kubectl exec httpd -- ls
bin
build
cgi-bin
conf
error
htdocs
icons
include
logs
modules

//从容器里复制一份文件到物理机
[root@kiwi111 ~]# kubectl cp httpd:conf /root/conf -c httpd
[root@kiwi111 ~]# ls
anaconda-ks.cfg  httpd.conf  kube-flannel.yml  magic
conf             kiwi        kubernetes_init   mime.types

//从物理机复制文件到容器里面
[root@kiwi111 ~]# kubectl cp kiwi httpd:/root/
[root@kiwi111 ~]# kubectl exec httpd -- ls /root/
kiwi

//创建一个namespace
[root@kiwi111 ~]# kubectl create namespace kiwi
namespace/kiwi created

//获取namespace
[root@kiwi111 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   47h
kiwi              Active   21s
kube-flannel      Active   47h
kube-node-lease   Active   47h
kube-public       Active   47h
kube-system       Active   47h

//在此namespace下创建并运行一个容器的pod
[root@kiwi111 ~]# kubectl run pod kiwi --image=kiwi111/nginx:v0.2 -n kiwi
pod/pod created

//查看新创建的pod
[root@kiwi111 ~]# kubectl get pod -n kiwi

2.2 命令式对象配置

命令式对象配置就是使用命令配合配置文件一起来操作kubernetes资源。

创建一个nginx_pod.yaml文件,内容如下

[root@kiwi111 ~]# cat nginx_pod.yml 
apiVersion: v1
kind: Namespace
metadata: 
  name: kiwi

---

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

执行创建命令

[root@kiwi111 ~]# kubectl create -f nginx_pod.yml 
namespace/kiwi created
pod/nginx created

查看资源

[root@kiwi111 ~]# kubectl get -f nginx_pod.yml 
NAME             STATUS   AGE
namespace/kiwi   Active   63s

NAME        READY   STATUS             RESTARTS   AGE
pod/nginx   0/1     Running   0          63s

删除资源

[root@kiwi111 ~]#  kubectl delete -f nginx_pod.yml 
namespace "kiwi" deleted
pod "nginx" deleted

2.3 声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。

//第一次执行这个命令时,创建资源成功
[root@kiwi111 ~]# kubectl apply -f nginx_pod.yml 
namespace/kiwi created
pod/nginx created

//再次执行资源没有变动
[root@kiwi111 ~]# kubectl apply -f nginx_pod.yml 
namespace/kiwi unchanged
pod/nginx unchanged


总结:
    其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
    使用apply操作资源:
        如果资源不存在,就创建,相当于 kubectl create
        如果资源已存在,就更新,相当于 kubectl patch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值