Kubernets的资源管理

资源

学习kubernets的核心,就是学习如何对集群中的PodPod控制器Service存储等各种资源进行操作。

kubectl api-resources

级别资源名称缩写资源作用
集群nodesno集群组成部分
namespacesns隔离pod
pod资源podspo装载容器
pod资源控制器replication controllersrc控制pod资源
replicasetsrs控制pod资源
deploymentsdeploy控制pod资源
daemonsetsds控制pod资源
jobs控制pod资源
cronjobscj控制pod资源
horizontal pod auto saclershpa控制pod资源
statefulsetssts控制pod资源
服务发现servicessvc统一pod对外接口
ingressing统一pod对外接口
存储资源volume attachments存储
persistent volumespv存储
persistent volume claimspvc存储
配置资源config mapscm配置
secrets配置

yaml

1 使用kubectl create命令生成yaml文件

kubectl create deployment nginx --image=nginx:1.17.1 --dry-run=client -n dev -o yaml
kubectl create deployment nginx --image=nginx:1.17.1 --dry-run=client -n dev -o yaml > test.yaml
#此种方式适用于没有真正部署资源 

--------
2 使用kubectl get命令导出yaml文件
kubectl get deployment nginx -n dev -o yaml --export > test2.yaml

namespace

  • Namespace是kubernetes系统中一种非常重要的资源,它的主要作用是用来实现多套系统的资源隔离或者多租户的资源隔离
kubectl get namespace
kubectl get ns
kubectl get ns default -o wide
kubectl get ns default -o json
kubectl get ns default -o yaml
kubectl describe namespace default
kubectl create namespace dev
kubectl create ns dev
kubectl delete ns dev
kubectl create -f ns-dev.yaml
kubectl delete -f ns-dev.yaml

Pod

  • Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。

  • Pod可以认为是容器的封装,一个Pod中可以存在一个或多个容器。

kubectl get pods -n kube-system
kubectl run (Pod的名称) [参数]
            # --image 指定Pod的镜像
            # --port 指定端口
            # --namespace 指定namespace
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev       
kubectl get pods -n dev
kubectl describe pod nginx -n dev
kubectl get pods -n dev -o wide
kubectl delete pod nginx -n dev


Label

  • Label是kubernetes的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。

  • Label的特点:

    • 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等。
    • 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。
    • Label通常在资源对象定义时确定,当然也可以在对象创建后动态的添加或删除。
  • 可以通过Label实现资源的多纬度分组,以便灵活、方便地进行资源分配、调度、配置和部署等管理工作。

一些常用的Label标签示例如下:

  • 版本标签:“version”:”release”,”version”:”stable”。。。

  • 环境标签:“environment”:”dev”,“environment”:”test”,“environment”:”pro”。。。

  • 架构标签:“tier”:”frontend”,”tier”:”backend”。。。

kubectl label pod xxx key=value [-n 命名空间]
kubectl label pod nginx version=1.0 -n dev
kubectl label pod xxx key=value [-n 命名空间] --overwrite
kubectl label pod nginx version=2.0 -n dev --overwrite
kubectl get pod xxx [-n 命名空间] --show-labels
kubectl get pod nginx -n dev --show-labels
kubectl get pod -l key=value [-n 命名空间] --show-labels
kubectl get pod -l version=2.0 -n dev --show-labels
kubectl label pod xxx key- [-n 命名空间]
kubectl label pod nginx version- -n dev
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml

deployment

● 在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。
● Pod控制器用于Pod的管理,确保Pod资源符合预期的状态,当Pod的资源出现故障的时候,会尝试进行重启或重建Pod。
● 在kubernetes中Pod控制器的种类有很多,本章节只介绍一种:Deployment

kubectl create deployment xxx [-n 命名空间]
kubectl create deployment nginx --image=nginx:1.17.1 -n test

kubectl scale deployment xxx [--replicas=正整数] [-n 命名空间]
kubectl scale deployment nginx --replicas=4 -n dev

kubectl create -f deploy-nginx.yaml
kubectl delete -f deploy-nginx.yaml
kubectl get pods -n dev
kubectl get deployment [-n 命名空间]
kubectl get deployment -n dev

service

  • Service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡。
kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个CLUSTER-IP,这个就是service的IP,在Service的生命周期内,这个地址是不会变化的
kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n test
kubectl get service [-n 命名空间] [-o wide]
kubectl get service -n test

# 创建集群外部可访问的Service

kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个外部也可以访问的Service
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test

kubectl get service [-n 命名空间] [-o wide]
kubectl get service -n test
kubectl delete service xxx [-n 命名空间]
kubectl delete service svc-nginx1 -n test


kubectl  create  -f  svc-nginx.yaml
kubectl  delete  -f  svc-nginx.yaml


数据存储

  • kubernetes的Volume支持多种类型,比较常见的有下面的几个:

    • 简单存储:EmptyDir、HostPath、NFS。
    • 高级存储:PV、PVC。
    • 配置存储:ConfigMap、Secret。

EmptyDir

  • EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。

  • EmptyDir是在Pod被分配到Node时创建的,它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为kubernetes会自动分配一个目录,当Pod销毁时,EmptyDir中的数据也会被永久删除。

  • EmptyDir的用途如下:

    • 临时空间,例如用于某些应用程序运行时所需的临时目录,且无须永久保留。
    • 一个容器需要从另一个容器中获取数据的目录(多容器共享目录)。
  • 接下来,通过一个容器之间的共享案例来使用描述一个EmptyDir。

  • 在一个Pod中准备两个容器nginx和busybox,然后声明一个volume分别挂载到两个容器的目录中,然后nginx容器负责向volume中写日志,busybox中通过命令将日志内容读到控制台。

HostPath

  • HostPath就是将Node主机中的一个实际目录挂载到Pod中,以供容器使用,这样的设计就可以保证Pod销毁了,但是数据依旧可以保存在Node主机上。

NFS

PV

  • PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它和底层具体的共享存储技术有关,并通过插件完成和共享存储的对接。

  • PVC(Persistent Volume Claim)是持久化卷声明的意思,是用户对于存储需求的一种声明。换言之,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。

在这里插入图片描述

  • 使用了PV和PVC之后,工作可以得到进一步的提升:

    • 存储:存储工程师维护。
    • PV:kubernetes管理员维护。
    • PVC:kubernetes用户维护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yolo2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值