K8s基础3——应用部署流程、服务编排、集群资源利用率、日志管理

news2024/12/23 9:58:11

文章目录

  • 一、应用部署流程
  • 二、服务编排
    • 2.1 YAML文件格式说明
    • 2.2 部署应用
      • 2.2.1 命令部署
      • 2.2.2 yaml文件部署
        • 2.2.2.1 编写deployment.yaml文件
        • 2.2.2.2 编写service.yaml文件
        • 2.2.2.3 两个yaml文件混用
        • 2.2.2.4 测试——service和deployment的标签不一致导致访问网页混乱
      • 2.2.3 自定义yaml文件
        • 2.2.3.1 create命令生成
        • 2.2.3.2 get命令导出
        • 2.2.3.3 查看yaml文件字段
  • 三、集群资源利用率
    • 3.1 安装插件
    • 3.2 命令使用
  • 四、查看集群资源
  • 五、日志管理

一、应用部署流程

部署流程:

  1. 编写dockerfile,制作镜像。
  2. 使用控制器部署pod,部署时需要指定制作的镜像。常见控制器有deployment、statefulset、daemonset。
  3. 把需要访问交互的应用端口暴露出来,方便数据交互。暴露方式有service、ingress。
  4. 暴露出来后,客户端就可以正常访问运维了。
    在这里插入图片描述

基础资源概念:

  • Pod:K8s最小部署单元,一组容器的集合。
  • Deployment:最常见的控制器,用于更高级别部署和管理Pod。
  • Service:为一组Pod提供负载均衡,对外提供统一访问入口。
  • Label :标签,附加到某个资源上,用于关联对象、查询和筛选。
  • Namespaces :命名空间,将对象逻辑上隔离,也利于权限控制,默认有四个。
    • default:默认命名空间。
    • kube-system:K8s系统方面的命名空间。
    • kube-public:公开的命名空间,谁都可以访问。
    • kube-node-lease:K8s内部命名空间。

资源关系图:
在这里插入图片描述

二、服务编排

2.1 YAML文件格式说明

  • K8s是一个容器编排引擎,使用YAML文件编排要部署应用,因此在学习之前,应先了解YAML语法格式:
    • 缩进表示层级关系。
    • 不支持制表符“tab”缩进,使用空格缩进。
    • 通常开头缩进 2 个空格。
    • 字符后缩进 1 个空格,如冒号、逗号等。
    • “—” 表示YAML格式,一个文件的开始。
    • “#”注释。

2.2 部署应用

2.2.1 命令部署

1.创建一个名为web的deployment,使用镜像nginx。

[root@k8s-master ~]# kubectl  create deployment web1 --image=nginx
deployment.apps/web created

2.查看是否创建成功。
在这里插入图片描述

3.给名为web1的deployment创建一个service暴露其内部应用,名为text,应用端口为80,svc端口为80,暴露端口为31697。

[root@k8s-master ~]# kubectl  expose deploy web1 --name=text --port=80 --target-port=80 --type=NodePort

在这里插入图片描述

4.集群任意节点IP:31697,访问web页面。
在这里插入图片描述

2.2.2 yaml文件部署

  • 命令部署虽然繁杂,但初始学习可以很好的运用参数。等熟练后就可以使用yaml文件部署,操作简单。
  • 相关命令:
    • 部署:kubectl apply -f xxx.yaml
    • 卸载:kubectl delete -f xxx.yaml

2.2.2.1 编写deployment.yaml文件

在这里插入图片描述

1.编辑一个yaml文件,K8s官网deployment.yaml文件模板。

[root@k8s-master bck]# cat qingjun1.yaml 
apiVersion: apps/v1   ## API版本
kind: Deployment      ##资源类型
metadata:             ##资源元数据,包括名称、所在命名空间。
  name: qingjun1    ## 控制器名称。
spec:                 ## 资源规格,包括副本数量、标签选择器。
  replicas: 3
  selector:
    matchLabels:          ##标签选择器,自定义键值对,与metadata.labels保持一致。
      app: demo2 
  template:           ## Pod模板内容,包括Pod元数据、规格、容器配置。
    metadata:         ##pod元数据。
      labels:
        app: demo2
    spec:                   ##pod规格,在下面可以定义服务应用。
      containers:               ##容器规格。
      - name: web     ## Pod名称。
        image: nginx  ##镜像地址。

2.导入yaml文件创建deployment。

[root@k8s-master bck]# kubectl apply -f qingjun1.yaml

3.查看创建结果。
在这里插入图片描述

2.2.2.2 编写service.yaml文件

在这里插入图片描述

在这里插入图片描述

1.编辑一个yaml文件,K8s官方service.yaml文件模板。

[root@k8s-master bck]# cat baimu.yaml 
apiVersion: v1
kind: Service       ##资源类型
metadata:           ##资源元数据,包括资源名称、所在命名空间。
  name: java-demo2    ##资源名称。
spec:               ##资源规格,包括标签选择器。
  selector:         ##标签选择器,与需要暴露关联的deployment中的标签保持一致。
    app: demo2
  ports:
    - protocol: TCP    ##使用协议。
      port: 80           ##svc端口,通过clusterip访问使用,默认80。
      targetPort: 8080     ##容器内运行服务端口
  type: NodePort      ##端口类型,这个类型代表将应用暴露到外面,浏览器能访问。

2.导入yaml文件,查看service。

[root@k8s-master bck]# kubectl apply -f baimu.yaml 
[root@k8s-master bck]# kubectl get service

在这里插入图片描述
3.访问web页面。
在这里插入图片描述

2.2.2.3 两个yaml文件混用

1.创建一个命名空间test。

[root@k8s-master bck]# kubectl create ns test
namespace/test created

2.创建yaml模板文件,我这里创建2个:web1.yaml、web2.yaml。

[root@k8s-master bck]# cat web1.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web1
  namespace: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web1
  template:
    metadata:
      labels:
        app: web1
    spec:
      containers:
      - name: web
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: web1
  namespace: test
spec:
  selector:
    app: web1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort



[root@k8s-master bck]# cat web2.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web2
  namespace: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web2
  template:
    metadata:
      labels:
        app: web2
    spec:
      containers:
      - name: web
        image: httpd
---
apiVersion: v1
kind: Service
metadata:
  name: web2
  namespace: test
spec:
  selector:
    app: web2
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

3.导入两个yaml文件,创建deployment和service。

[root@k8s-master bck]# kubectl apply -f web1.yaml -f web2.yaml 

在这里插入图片描述

4.查看结果。

[root@k8s-master bck]# kubectl get pod -n test
[root@k8s-master bck]# kubectl get service -n test

在这里插入图片描述
5.访问web1是nginx,访问web2是apache。
在这里插入图片描述

2.2.2.4 测试——service和deployment的标签不一致导致访问网页混乱

1.现在蒋web2.yaml文件中的service标签改成web1。
在这里插入图片描述
2.重新导入web2.yaml文件,访问网页是Nginx的页面。

[root@k8s-master bck]# kubectl apply -f web2.yaml 
[root@k8s-master bck]# kubectl get service -n test

在这里插入图片描述
在这里插入图片描述
3.得出结论,service转发是根据deployment的标签来识别的,这种情况是不应该出现的。
在这里插入图片描述
4.此时可以查看service转发pod的IP信息。

[root@k8s-master bck]# kubectl get endpoints -n test

在这里插入图片描述
5.所以我们常常会给deploytment定义两个标签,与service标签需要一致。
在这里插入图片描述
6.卸载服务。
在这里插入图片描述

2.2.3 自定义yaml文件

2.2.3.1 create命令生成

命令示范:

  • kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run=client > my-deploy.yaml

1.先尝试运行,–dry-run参数是尝试运行不实际创建应用资源对象,选择项有client(客户端)、service(API),–replicas代表创建3个副本。

[root@k8s-master ~]# kubectl  create deployment java-demo --image=nginx --replicas=3 --dry-run=client
deployment.apps/java-demo created (dry run)

2.输出yaml文件内容。

[root@k8s-master ~]# kubectl  create deployment java-demo --image=nginx --replicas=3 --dry-run=client -o yaml

在这里插入图片描述

3.导出yaml文件。

[root@k8s-master ~]# kubectl  create deployment java-demo --image=nginx --replicas=3 --dry-run=client -o yaml > deployment.yaml

在这里插入图片描述

4.此时可以适当修改导出来的yaml文件内容,因为导出来的内容是给API提交时的内容,有些参数我们用不上。

[root@k8s-master ~]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null     ##时间戳字段,k8s官方维护的,不属于用户定义,删不删出都不影响容器相关操作。这里就可以先删除。
  labels:
    app: java-demo    ##deployment的标签,用于过滤,与service也要保持一样,四点一线,不常用。
  name: java-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: java-demo
  strategy: {}      
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: java-demo
    spec:
      containers:
      - image: lizhenliang/java-demo
        name: java-demo
        resources: {}
status: {}

2.2.3.2 get命令导出

命令示范:

  • kubectl get deployment nginx -o yaml > my-deploy.yaml
  • 常常用在将已创建的资源yaml文件导出来,方便调试运维。

1.查看已创建的deployment有哪些。

在这里插入图片描述

2.导出deployment的yaml文件。

[root@k8s-master ~]# kubectl get deploy web1  -o yaml > web1.yaml

在这里插入图片描述

3.查看导出的yaml文件。这里的内容是从k8s里面导出来的,k8s创建资源时会添加很多字段,所以比create创建出来的yaml文件字段多一些。
在这里插入图片描述

4.删除不常用的字段,修改后内容如下。
在这里插入图片描述

2.2.3.3 查看yaml文件字段

  • 当我们在编写yaml时,若是忘记一些字段是可以通过命令来查看的,这个命令非常常用。

命令示范:

  • kubectl explain pods.spec.containers
  • kubectl explain deployment

1.查看书写格式。
在这里插入图片描述
2.查看第一级别。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.查看spec第一级别。在这里插入图片描述

4.查看第四级别。

[root@k8s-master bck]# kubectl explain deployment.spec.template.spec.containers

在这里插入图片描述

三、集群资源利用率

Metrics Server插件概念:

  • 是一个集群范围的资源使用情况的数据聚合器,作为一个应用部署在集群中。
  • Metric server从每个节点上Kubelet API收集指标,通过K8s聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。
  • 项目地址

工作原理:

  1. 使用kubectl top 命令查看资源使用率时,会给apiserver发送请求。
  2. metric-server是作为pod部署的,此时apiserver向metric-server发送请求查看它收集各个节点上的资源利用率信息。
  3. metric-server作为聚合器通过https方式与各个节点上的kubelet对接,将各节点上的容器使用信息收集过来。
  4. kubelet代码里内涵了cadvisor插件,此插件是专门收集容器指标的。

原理图:
在这里插入图片描述
官方:
在这里插入图片描述

Metrics Server版本K8s版本
0.6.x1.19+
0.5.x*1.8+
0.4.x*1.8+
0.3.x1.8-1.21
  • 其他版本:
    在这里插入图片描述

3.1 安装插件

1.根据K8s版本下载对应的yaml文件。

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml

2.增加kubelet-insecure-tls参数,这个参数作用是告诉metrics-server不验证kubelet提供的https证书。当然也可以使用携带ca证书来访问,但是要挂载比较麻烦。
在这里插入图片描述

3.导入查看,如果状态True并能返回数据说明Metrics Server服务工作正常。

 kubectl  apply -f metrics-server.yaml 
 kubectl get apiservices |grep metrics
 kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes

在这里插入图片描述

3.2 命令使用

1.查看所有节点cpu使用情况。
在这里插入图片描述
2.查看pod的内存使用情况。
在这里插入图片描述

四、查看集群资源

1.查看master组件状态。
kubectl get cs
2.查看节点运行状态。
kubectl get node
3.查看资源的详情,此命令在排错时经常用到。

kubectl describe <资源类型> <资源名称>

在这里插入图片描述

4.查看资源创建时的yaml文件内容。

kubectl get <资源类型> <资源名称>  -o yaml

在这里插入图片描述
5.查看资源状态、IP等详情。

kubectl get <资源类型> <资源名称>  -o wide

在这里插入图片描述
6.查看资源标签。
在这里插入图片描述

五、日志管理

工作中需要用到哪些日志?

  • 组件日志,比如kubelet、apiserver等等。
  • 应用服务日志。

日志类型:

  1. 标准输出,比如kubelet log 或docker log查看就是将日志输出在屏幕上实时查看。
  2. 日志文件,直接查看日志文件里记录的日志。

1.查看kubelet组件日志。所有组件除了kubelet是systemd守护进程管理的组件,其他组件都是pod部署。

[root@k8s-node2 ~]# journalctl -u  kubelet  -f

在这里插入图片描述
2.查看其他组件日志。

[root@k8s-node2 ~]# kubectl  logs [pod名称] -n [pod所在命名空间]

在这里插入图片描述
3.系统日志,有的组件可以和系统进行交互,有些信息也可以在系统日志中查看。
在这里插入图片描述
4.查看标准输出到宿主机的日志文件。

日志管理流程:

  1. 使用kubectl logs查看日志时,会给apiserver发送请求,apiserver再给对应节点上的kubelet发送请求日志。
  2. 目标节点上的kubelet给docker发送请求,尝试调取docker管理的日志文件。
  3. 最后将docker管理的日志我呢见内容标准输到屏幕。
/var/lib/docker/containers/<container-id>/<container-id>-json.log

在这里插入图片描述
5.查看容器内日志文件。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491119.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用JIRA管理你的项目——(三)基于LDAP用户管理

JIRA提供了基于LDAP方式的用户管理&#xff0c;也就是用户密码的管理交给LDAP&#xff0c;而JIRA只管理用户在系统中的角色。 相关链接&#xff1a; 用JIRA管理你的项目——&#xff08;一&#xff09;JIRA环境搭建 用JIRA管理你的项目——&#xff08;二&#xff09;JIRA语言…

AI 工具合辑盘点(五)持续更新

AI 视频生成和编辑工具 当今&#xff0c;视频已经成为最受欢迎的媒介之一。我们喜欢观看视频&#xff0c;但是制作高质量的视频需要耗费大量时间和精力。 无论你是内容创作者、专业视频编辑师&#xff0c;还是完全的新手&#xff0c;按照传统方式制作视频需要掌握各种知识、技…

[杂谈]从《天堂2》到永恒之塔私服的感慨

不才在下是个老丫头了&#xff0c;平时喜欢潜水&#xff0c;还是在玩激战时注册的多玩论坛号&#xff0c;也不怎么说话&#xff0c;都是看别人说得多&#xff08;害羞嘛……&#xff09;。 想当年《天堂二》内测时&#xff0c;刚好在成都开了个内测号 首发会&#xff0c;我大清…

[230509]托福听力真题TPO66|精听 Lecture2:marine biology class|9:45~11:30+12:00~12:30

目录 Lecture 2 一、要点 二、文本 三、文本注释 概括描述fins ⬆️ 详细描述two general types of fins ⬇️ 1st type 2nd type 今日marine biology class重点 不是所有的鱼都有caudal fins caudal fins的两个例子 四、复听笔记 Lecture 2 一、要点 1. 开…

网络安全监管

网络安全监管 网络安全法律体系建设计算机犯罪、信息安全等基本概念我国立法体系及网络安全法我国的立法体系网络安全法出台背景基本概念安全法主要结构第一章 总则第二章 网络安全支持与促进第三章 网络运行安全第四章 网络信息安全第五章 监测预警与应急处置第六章 法律责任 …

基于Python的PROSAIL模型介绍以及使用

1、介绍 PROSAIL是两种模型耦合得到的。 SAIL是冠层尺度的辐射传输模型&#xff0c;把冠层假设成是连续的且具有给定几何形状和密度的水平均匀分布的介质层&#xff0c;从而模拟入射辐射与均匀介质之间的相互作用&#xff0c;具体还是挺复杂的。而PROSPECT就是叶片尺度的辐射传…

​kali下搭建WiFi钓鱼热点​

在linux下建立无线热点并不像在windows下开启网络共享或者使用无线网卡驱动设置AP模式即可。 linux下的无线共享要用到两个软件&#xff1a;hostapd(创建无线热点)、dnsmasq(dns服务和dhcp服务). 1.安装以上两个软件&#xff1a; 1 2 apt-get install hostapd apt-get install…

【Java】字符串String

目录 1.字符串的构造 2.字符串转换 2.1字符串与数值转换 2.2大小写转换 2.3字符串转数组 2.4格式化 3.字符串操作 3.1字符串比较 3.2字符串查找 3.3字符串替换 3.4字符串拆分 3.5字符串截取 3.6去除空格 4.字符串的不可变性 5.字符串修改 5.1StringBuffer…

基于FreeRTOS的CPU利用率计算教程详解(STM32版)

前言&#xff1a;FreeRTOS 是一个 RTOS 类的嵌入式实时操作系统&#xff0c;作为实时操作系统其必定拥有任务调度的属性。通过系统自身的任务调度算法实现任务安全且高效的切换&#xff0c;这就不可避免的引出了各个任务对 CPU 的利用率问题&#xff08;裸机情况下 CPU 利用率默…

自行车和电动自行车上亚马逊标准有什么区别?UL2849,16CFR1512

自行车 自行车是一种两轮的或三轮的交通工具&#xff0c;完全靠人力驱动后轮前进。本政策所涵盖的自行车包括当座位调整到最高位置时&#xff0c;座位离地面超过 25 英寸的自行车&#xff0c;以及座位高度为 25 英寸或以下的人行道自行车。本政策也适用于公路使用的卧式自行车…

有人看好、有人唱衰,无代码能不能开发复杂应用?

司马说 工欲善其事&#xff0c;必先利其器&#xff0c;软件开发也是如此。《人月神话》有一章的标题就是“巧匠因为他的工具而出名”。软件开发与编码工作是一项枯燥无味的任务&#xff0c;但现在这项工作很可能利用软件本身来完成。 无代码开发颠覆了传统编码的开发模式&#…

【工具使用】- git实现gitee托管代码以及检出代码

1. 下载Git工具 git下载地址1&#xff1a;https://git-scm.com/download/win git下载2&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/Git%20for%20Windows%202.40.1/ 下载完成后安装 安装直接执行exe可执行程序&#xff0c;下一步…

晒出新高度?2023夏季小红书防晒趋势前瞻

夏日将临&#xff0c;防晒需求激增&#xff0c;进入市场旺季。今年防晒赛道朝着“防护升级&#xff0c;多面兼顾”大势发展。 哪些趋势值得关注&#xff1f;本期&#xff0c;千瓜将通过小红书数据分析和笔记内容洞察&#xff0c;为品牌提供数据支持和方向参考。 月增长高达501.…

分布式事务 [面试]

1. 基础概念 1.1 什么是事务 事务可以看做是一次大的活动&#xff0c;它由不同的小活动组成&#xff0c;这些活动要么全部成功&#xff0c;要么全部失败。 1.2 本地事务 在计算机系统中&#xff0c;更多的是通过关系型数据库来控制事务&#xff0c;这是利用数据库本身的事务…

TBSS和dpabifiber

以前用过TBSS&#xff0c;最近好久没用&#xff0c;又忘记了&#xff0c;现在重新捡起来。 首先是QSIprep和QSIrecon。 QSIPrep预处理后&#xff0c;文件夹包括anat和dwi。anat和fmriprep是一样的&#xff0c;就不介绍了。 dwi&#xff1a; 可以看出&#xff0c;这些就是在原始…

全景丨0基础学习VR全景制作,平台篇第16章:热点功能-图片

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 功能说明 应用场景 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的交互&#xff0c;增加用户的多元化体验。 图片热点&#xff0c;即点击热点后弹出单张…

总结841

学习目标&#xff1a; 5月&#xff08;张宇强化前10讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 重做了5道记录本上的极限题&#xff0c;值得庆幸的是&#xff0c;有一道极限题之前有三种解法&#xff…

【c语言】函数递归调用

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ…

98. 验证二叉搜索树【68】

难度等级&#xff1a;中等 上一篇算法&#xff1a; 剑指 Offer 54. 二叉搜索树的第k大节点【37】 力扣此题地址&#xff1a; 98. 验证二叉搜索树 - 力扣&#xff08;Leetcode&#xff09; 1.题目&#xff1a;98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断…

阿里云服务器配置选择流程(2023新版教程)

阿里云服务器ECS选购指南&#xff0c;阿里云百科分享2023阿里云服务器新手选择流程&#xff0c;选购云服务器有两个入口&#xff0c;一个是选择活动机&#xff0c;只需要选择云服务器地域、系统、带宽即可&#xff1b;另一个是在云服务器页面&#xff0c;自定义选择云服务器配置…