当前位置: 首页 > news >正文

02_k8s资源清单

02_k8s资源清单

1.k8s常用资源分类

1.1工作负载workloads

在这里插入图片描述

https://kubernetes.io/zh-cn/docs/concepts/workloads/简单来说使用k8s发布应用主要有就是选用那种pod控制器来管理,运行pod那么就是如下几种控制类型Deployment 和 ReplicaSet 
Deployment是用来管理几群上的无状态的应用,Deployment中所有的pod都是等价的,并且在需要时可以被替代StatefulSet让你能够运行一个或者多个应用状态的podsDaemonSet定义提供节点本地支撑设施的pods,Job和CronJob。定义一些一直运行到结束并且停止的任务

1.2发现服务,负载均衡

service
将运行在一组pods上的应用程序公开为网络服务的抽象方法
使用k8s,无需修改应用程序即可使用服务发现机制
Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。Ingress-nginx就是k8s集群下的负载均衡器软件。
https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/#what-is-ingress

在这里插入图片描述

1.3匹配资源,存储资源

https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。pods可以将其作为环境变量,命令行参数或存储卷中的配置文件ConfigMap将你的环境配置信息和容器镜像,解耦,便于应用配置修改注意
ConfigMap并不提供保密或者加密功能如果存储数据是加密的使用secret

存储资源

https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/Container中文件在磁盘上是临时存放的,这给container中运行的重要应用程序带来问题
1.当容器崩溃时,容器是重新起一个新的
2.在同一个pod运行多个容器并且共享文件出现k8s(volume)这一抽象概念就解决了这个问题

1.4集群内资源分配

Namespace
Node
Role
ClusterRole
RoleBinding
ClusterRoleBinding

2.资源配置清单

2.1k8s资源清单

声明式管理k8s

https://kubernetes.io/zh-cn/docs/tasks/manage-kubernetes-objects/declarative-config/

docker,我们有两种方式管理容器

1.docker run

  1. docker-compose.yaml

k8s也一样除了直接运行镜像生产容器,同样也可以使用yaml来描述所创建爱你的k8s资源

最后,关于yaml的编写,到底应该写哪些资源,按什么要求去写
这就要看官网给的【k8s对象】文档
https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/kubernetes-objects/

命令的方式查看资源的解释

kubectl explain pod 查看pod是什么,有哪些字段
kubectl explain pod.spec  查看pod有什么规范

2.2 理解集群资源

组件是为了支撑k8s平台的运行,安装好软件

资源是如何使用k8s的能力的定义。比如k8s可以使用pod来管理业务应用

那么Pod就是k8s集群中的一类资源,集群中的所有资源

3.如何理解namespace

命令空间,集群的一个虚拟概念,雷诗雨资源池,一个池子里可以有各种资源,绝大多数资源都属于namespace

集群安装好后都会默认如下几个namespace

[root@k8s-master-10 ~]#kubectl get namespaces
NAME              STATUS   AGE
default           Active   27h
kube-flannel      Active   23h
kube-node-lease   Active   27h
kube-public       Active   27h
kube-system       Active   27h在不同的ns下的资源,需要用-n参数,主动指定ns环境,才能看到对应资源池下的内容。
  • 所有的Namespace资源你,在创建时候都需要指定namespace,若不指定默认会在default的命名空间下
  • 相同的namespace下的同类资源不可以重命名,不通类型的资源可以重名
  • 不通namespace下的同类资源可以重名
  • 通常在项目使用,我们会创建带有业务含义的namespace做逻辑上的整合

3.1kubectl使用

类似于docker,kubectl是命令工具,用于api-server交互,内置丰富的命令功能及其强大

https://kubernetes.io/docs/reference/kubectl/overview/
kubectl -h 
kubectl get -h 
kubectl create -h 
kubectl create namespace -h

3.2pod工作流程

  1. 一个资源文件,通过调用APIserver 执行创建pod
  2. APISERVER 收到用户的pod请求,将pod信息写入到etcd中
  3. 调度人list-watch的方式,发现新的pod数据,但是这个pod还没有绑定到某一个节点上
  4. 调度器通过算法计算出合适的node节点,并调用APIserver把信息更新到etcd中。
  5. kubectl 同样通过list-watch发现有新的pod调度到本机器的node节点上时,会根据pod清单描述信息拉取镜像,启动容器,同时生成时间信息
  6. 同时,把容器信息写入到API-SERVER中的etcd数据库中

架构设计的几个思考点

  1. 系统各个组件分工明确(APIServer是所有请求入口,CM是控制中枢,Scheduler主管调度,而Kubelet负责运行),配合流畅,整个运行机制一气呵成。
  2. 除了配置管理和持久化组件ETCD,其他组件并不保存数据。
    1. 意味除ETCD外其他组件都是无状态的。
    2. 因此从架构设计上对kubernetes系统高可用部署提供了支撑。
  3. 同时因为组件无状态,组件的升级,重启,故障等并不影响集群最终状态,只要组件恢复后就可以从中断处继续运行。
  4. 各个组件和kube-apiserver之间的数据推送都是通过list-watch机制来实现。

4.使用资源清单创建pod

docker调度的是容器,在k8s集群中,最小的调单位是pod

为什么引入pod

  • 与容器引擎解耦
    • docoker ,RKT平台设计与引擎的具体的实现解耦
  • 多容器共享网络|存储|进程空间,支持的业务场景更加灵活

命令创建pod

kubectl create deplyment nginx --image=nginx:alpinekubectl get pod -o wide [root@k8s-master-10 ~]#kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP         NODE          NOMINATED NODE   READINESS GATES
nginx-565785f75c-jmszl   1/1     Running   0          30s   10.2.2.2   k8s-node-12   <none>           <none>
yuchao-nginx             1/1     Running   1          27h   10.2.1.3   k8s-node-11   <none>           <none>
[root@k8s-master-10 ~]#

导出pod配置为一个yaml清单

这是一个获取yaml的技巧# 指定导出某个pod的yaml文件
[root@k8s-master-10 ~]#kubectl get pod yuchao-nginx -o yaml > yuchao-nginx-pod.yaml# 查看pod的label信息
[root@k8s-master-10 ~]#kubectl get pod yuchao-nginx --show-labels

查看精简后的pod-yaml

# 查看精简后的yaml
apiVersion: v1
kind: Pod
metadata:labels:run: yuchao-nginx
spec:containers:- image: nginx:1.17.9imagePullPolicy: IfNotPresentname: yuchao-nginx

删除创建的pod

[root@k8s-master-10 ~]#kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-565785f75c-jmszl   1/1     Running   0          18m
yuchao-nginx             1/1     Running   1          27h[root@k8s-master-10 ~]#kubectl delete pod yuchao-nginx 
pod "yuchao-nginx" deleted
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-565785f75c-jmszl   1/1     Running   0          19m
[root@k8s-master-10 ~]#貌似可以?再删这个nginx试试?[root@k8s-master-10 ~]#kubectl delete po nginx-565785f75c-jmszl 
pod "nginx-565785f75c-jmszl" deleted[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#kubectl get po
NAME                     READY   STATUS    RESTARTS   AGE
nginx-565785f75c-48jhc   1/1     Running   0          84s
[root@k8s-master-10 ~]#哎我去?干不掉?为啥?副本控制器啊!!你的nginx pod谁创建的啊?deployment啊!![root@k8s-master-10 ~]#kubectl get deployments.apps  -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   1/1     1            1           24m   nginx        nginx:alpine   app=nginx
[root@k8s-master-10 ~]#

查看deployment和pod

[root@k8s-master-10 ~]#kubectl get deployments.apps  -o wide
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
nginx   1/1     1            1           24m   nginx        nginx:alpine   app=nginx
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#kubectl get po --show-labels -owide
NAME                     READY   STATUS    RESTARTS   AGE     IP         NODE          NOMINATED NODE   READINESS GATES   LABELS
nginx-565785f75c-48jhc   1/1     Running   0          2m34s   10.2.1.4   k8s-node-11   <none>           <none>            app=nginx,pod-template-hash=565785f75c

删除deployment

[root@k8s-master-10 ~]#kubectl delete deployments.apps nginx 
deployment.apps "nginx" deleted
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#kubectl get po
No resources found in default namespace.[root@k8s-master-10 ~]#kubectl get deployments.apps 
No resources found in default namespace.
[root@k8s-master-10 ~]#

基于资源清单创建资源

[root@k8s-master-10 ~]#cat nginx-pod.yaml 
# 查看精简后的yaml
apiVersion: v1
kind: Pod
metadata:name: yuchao-nginxlabels:run: yuchao-nginx
spec:containers:- image: nginx:1.17.9imagePullPolicy: IfNotPresentname: yuchao-nginx
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#
[root@k8s-master-10 ~]#kubectl create -f nginx-pod.yaml 
pod/yuchao-nginx created
[root@k8s-master-10 ~]#

对于各个参数的解释

#参看精简后的yaml
apiServer: v1 # api语法的版本
kind: pod # 资源类型
metdata: name: yzk  # pod创建者是谁labels:  # 标签身份run: nginx 
spec:  # pod相关参数,基于explain可以看到具体字段container:  # pod相关信息- image: nginx:latest imagePullPolicy: IfNotPresent #拉取镜像策略name: yuchao-nginx #容器命名

运行结果

[root@k8s-master-10 ~]#kubectl get po -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP         NODE          NOMINATED NODE   READINESS GATES
yuchao-nginx   1/1     Running   0          36s   10.2.1.5   k8s-node-11   <none>           <none>

查看pod具体字段的详细解释

[root@k8s-master-10 ~]#kubectl explain pod.spec.containers.ports

5.标签玩法

https://support.huaweicloud.com/basics-cce/kubernetes_0011.html

5.1Node标签的设置

Lable是在object上pod的键值对。可以在创建object的时候指定,也可以在object创建后指定,Lables的值对系统本事并没有什么含义,只是对用户才有意义

当资源变得非常多的时候,如何分类管理就显得非常重要,kubernetes提供了一种机制来资源分类,那即是Lables标签,Lable非常简单但是却非常强大,在k8s中几乎所有的资源都可以用Lables来组织

Lable的具体形式是key-value的标记对,可以在创建资源的时候,也可以在后期添加的时候。

以pod为例子,当pod变得多起来,就显得杂乱且难以管理。

图解label作用

在这里插入图片描述

使用Label标签后

1760255485509)

Label selector

Label不是唯一的,很多object可能有相同的label

通过label selector,客户端、用户可以指定一个object集合,通过label selector对object的集合进行操作

查看Node的标签信息

kubectl get nodes --show-labels

修改pod清单,使用node选择器

默认pod是scheduler自动选择的node
我们也可以指定具体的机器Node

yaml

apiVersion: v1
kind: Pod
metadata:name: yuchao-nginxlabels:run: yuchao-nginx
spec:containers:- name: yuchao-nginximage: nginx:1.14.0imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80nodeSelector:#diskType: ssdserviceType: db

基于NodeSelector创建pod

[root@k8s-master-10 ~]#kubectl get po -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP         NODE          NOMINATED NODE   READINESS GATES
yuchao-nginx   1/1     Running   0          18m   10.2.1.5   k8s-node-11   <none>           <none>
[root@k8s-master-10 ~]#[root@k8s-master-10 ~]#kubectl create -f label-nginx-pod.yaml 
pod/yuchao-nginx created
[root@k8s-master-10 ~]#kubectl get po -o wide
NAME           READY   STATUS              RESTARTS   AGE   IP       NODE          NOMINATED NODE   READINESS GATES
yuchao-nginx   0/1     ContainerCreating   0          6s    <none>   k8s-node-12   <none>           <none>
[root@k8s-master-10 ~]## -w参数,检测组件变化
[root@k8s-master-10 ~]#kubectl get po -o wide -w
NAME           READY   STATUS              RESTARTS   AGE   IP       NODE          NOMINATED NODE   READINESS GATES
yuchao-nginx   0/1     ContainerCreating   0          17s   <none>   k8s-node-12   <none>           <none>
yuchao-nginx   1/1     Running             0          21s   10.2.2.3   k8s-node-12   <none>           <none>

5.2Pod标签

问题

当pod数量增多,并且每一个服务部署不同版本,没有一个方便管理某一类pod的方法是困难的

接下来我们使用label管理pod的方法

一个pod可以有多个标签而且不仅仅是pod,其他类型也有。针对我们设置2个标签分别是app和release版本

yaml

apiVersion: v1 # 遵循v1版本的Kubernetes API
kind: Pod # 这个yaml描述的是一个Pod
metadata:name: yuchao-nginx-v1  # Pod的名称labels: release: devapp: nginxspec:containers:- image: nginx:1.14.0   # 创建容器使用的镜像name: yuchao-nginx #容器的名称ports:- containerPort: 80 # 应用监听的端口, 指定端口是展示性的protocol: TCP

6.写yaml的正确姿势

1.拿来主义,从机器中已有的资源中拿$ kubectl -n kube-system get po,deployment,ds修改所需字段即可。2.学会在官网查找, https://kubernetes.io/docs/home/3.从kubernetes-api文档中查找, https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#pod-v1-core4. kubectl explain 查看具体字段含义。
http://www.dtcms.com/a/473389.html

相关文章:

  • 2025年渗透测试面试题总结-109(题目+回答)
  • uniapp配置自动导入uni生命周期等方法
  • flink的Standalone-HA模式安装
  • Flink时态表关联:实现数据“时间旅行”的终极方案
  • 做哪类英文网站赚钱wordpress 页面 列表
  • nginx + spring cloud + redis + mysql + ELFK 部署
  • 【黑马点评 - 实战篇01】Redis项目实战(Windows安装Redis6.2.6 + 发送验证码 + 短信验证码登录注册 + 拦截器链 - 登录校验)
  • 汕头市通信建设管理局网站二网站手
  • FreeRTOS小记
  • 数据结构实战:顺序表全解析 - 从零实现到性能分析
  • 【C++进阶】继承上 概念及其定义 赋值兼容转换 子类默认成员函数的详解分析
  • 华为matebook16s 2022禁用触摸板和触摸屏操作
  • GridRow 和 Column 有啥区别
  • 030159网站建设与维护中国科技成就素材
  • Echarts 5.6.0 Grid 坐标系中 Y 轴可视化的优化之路
  • Java 线程池如何知道一个线程的任务已经执行完成
  • JVM字节码与类的加载(一):类的加载过程详解
  • 强军网网站建设网站需要备案才能建设吗
  • 耄大厨——AI厨师智能体(3-工具调用)
  • (二)黑马React(导航/账单项目)
  • SA-LSTM
  • 【Java并发】深入理解synchronized
  • Docker 安装 Harbor 教程
  • Python+Flask+Prophet 汽车之家二手车系统 逻辑回归 二手车推荐系统 机器学习(逻辑回归+Echarts 源码+文档)✅
  • AI_NovelGenerator:自动化长篇小说AI生成工具
  • 济南网站制作开通免费个人简历模板官网
  • 全链路智能运维中的异常检测与根因定位技术
  • 解构 CodexField:创作者经济到模型金融化的代币逻辑与潜力
  • SpringBoot 实现自动数据变更追踪
  • C语言⽂件操作讲解(3)