Kuebernetes资源控制管理

第四阶段

时  间:2023年8月14日

参加人:全班人员

内  容:

Kuebernetes资源控制管理

目录

一、Kubectl命令工具

(一)版本更新

(二)版本回滚

(三)删除资源

(四)查看资源使用情况

(五)执行容器命令

二、YAML资源清单

(一)YAML 语言

(二)通过资源清单管理容器资源

(三)使用kubectl命令创建yaml模板


 

ps备注:huyang1也是k8s-master,因为临时设置的主机名,在新建shell窗口时,忘了修改!

一、Kubectl命令工具

(一)版本更新

        一般来说,生产环境中的线上项目会随着时间的推进不断地进行更新、维护、版本升级、兼容老版本。而此时如果需要对 Nginx 更换版本,就需要滚动更新。

执行以下命令查看nginx版本

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第1张图片

[root@k8s-master ~]# kubectl exec nginx-deployment-596f5df7f-5ttrd -- nginx -v

Kuebernetes资源控制管理_第2张图片

        通过 set 选项将 Nginx 版本换成 1.19,再监使用-w 先处于监听状态进行听,更新速度快。如果不使用 Ctrl+c 中断监听,会一直持续。

[root@k8s-master ~]# kubectl get deploy,pods

Kuebernetes资源控制管理_第3张图片

[root@k8s-master ~]# kubectl set image deployment.apps/nginx-deployment nginx=nginx:1.19

[root@k8s-master ~]# kubectl get pods -w实时查看变化

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第4张图片

[root@k8s-master ~]# kubectl exec nginx-deployment-8675544c64-4zrg2 -- nginx -v

Kuebernetes资源控制管理_第5张图片

        Ps备注:因为本地有镜像1.19.0版本的nginx,所以速度非常快,但是可以发现,nginx-deploymnet的id都已经发生了变化!

(二)版本回滚

1、若想回滚到上一个版本可以使用 rollout 参数。

[root@k8s-master ~]# kubectl rollout --help //使用—help 查看 rollout 帮助信息

Kuebernetes资源控制管理_第6张图片

 

2、通过 histtory 查看历史信息

[root@k8s-master ~]# kubectl rollout history deployment.apps/nginx-deployment

Kuebernetes资源控制管理_第7张图片

 

3、通过 undo 执行回滚

[root@k8s-master ~]# kubectl rollout undo deployment.apps/nginx-deployment

Kuebernetes资源控制管理_第8张图片

 

4、通过 status 检查回滚

[root@k8s-master ~]# kubectl rollout status deployment.apps/nginx-deployment

Kuebernetes资源控制管理_第9张图片

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第10张图片

[root@k8s-master ~]# kubectl exec nginx-deployment-5567b746cd-5flfk -- nginx -v

Kuebernetes资源控制管理_第11张图片

 

5、一键返回到状态1

[root@k8s-master ~]# kubectl rollout undo deployment.apps/nginx-deployment --to-revision=1

Kuebernetes资源控制管理_第12张图片

 

(三)删除资源

        通过以上步骤,完成了创建、发布、更新、回滚操作,接下来进行删除操作。通过 kubectl get deploy 查看 deployment 信息,并且使用 kubectl delete 删除 deployment;通过 kubectl get svc 查看 sevice 信息,并且使用 kubectl delete 删除 sevice。

1、没有暴露端口的情况下删除

[root@k8s-master ~]# kubectl get deploy

[root@k8s-master ~]# kubectl get pods

[root@k8s-master ~]# kubectl delete deployment/nginx-deployment

[root@k8s-master ~]# kubectl get deploy

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第13张图片

 

2、暴漏端口情况下删除

[root@k8s-master ~]# kubectl get pods

[root@k8s-master ~]# kubectl get svc

[root@k8s-master ~]# kubectl delete deployment/nginx-deployment

[root@k8s-master ~]# kubectl delete svc/nginx-service

[root@k8s-master ~]# kubectl get svc

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第14张图片

 

(四)查看资源使用情况

        通过 describe 可以查看较为详细的容器资源使用情况,包括一些错误信息都能检测出来。

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第15张图片

[root@k8s-master ~]# kubectl describe pod nginx

Kuebernetes资源控制管理_第16张图片

 

查看deployment资源

[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl get pods

Kuebernetes资源控制管理_第17张图片

[root@k8s-master ~]# kubectl describe pod nginx-deployment-596f5df7f-l6gr5

Kuebernetes资源控制管理_第18张图片

 

(五)执行容器命令

使用 exec 可以进入pod,完成相关操作

[root@k8s-master ~]# kubectl get pods

[root@k8s-master ~]# kubectl exec -it nginx-deployment-596f5df7f-l6gr5 bash

root@nginx-deployment-596f5df7f-l6gr5:/#  /etc/init.d/nginx status

root@nginx-deployment-596f5df7f-l6gr5:/#  nginx -v

Kuebernetes资源控制管理_第19张图片

 

二、YAML资源清单

        在 Kubernetes 中可以使用 YAML 格式的文件来创建符合预期期望的 Pod,这样的YAML 文件一般称之为资源清单。

(一)YAML 语言

        YAML 语言是一个可读性高,用来表达数据序列的语言格式。YAML 是"YAMLAin't a MarkupLanguage"(YAML 不是一种标记语言)的递归缩写。在开发这个语言时,YAML 的意思其实是:"YetAnother Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

(1)基本语法

·缩进时不允许使用 Tab 键,只允许使用空格;

·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可;

·# 用于标识注释,从这个字符一直到行尾,都会被解释器忽略。

(2)支持的数据结构

·对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/ 字典(dictionary);

·数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list);

·纯量(scalars):单个的、不可再分的值字符串。包括布尔值、整数、浮点数、Null、时间、日期。

(二)通过资源清单管理容器资源

        前面介绍了使用 kubectl 命令创建容器资源方法。基于这种命令方式创建容器资源,优点在于简单直观快捷、上手比较快,适合临时测试或实验。除了 kubectl 命令方式创建资源之外,还可以通过 YAML 配置文件来创建容器资源。

        基于 YAML 配置文件创建容器资源的方式,优点在于配置文件提供了创建资源的模板,能够重复部署,可以像管理代码一样管理部署,适合正式的、跨环境的、规模化部署。

YAML 语法格式:

·缩进标识层级关系;

·不支持制表符(Tab键)缩进,使用空格缩进;

·通常开头缩进两个空格;

·字符后缩进一个空格,如冒号、逗号等;

·“---”表示 YAML 格式,一个文件的开始;

·“#”表示注释。

通过 kubectl api-versions 查看以 group/version 的格式显示服务器所支持的 API 版本。

[root@k8s-master ~]# kubectl api-versions

Kuebernetes资源控制管理_第20张图片

 

        在创建 Deployment 资源清单之前先创建 demo 目录,用于存放资源清单的文件。在创建的 nginx-deployment.yaml 资源清单中,定义以下信息。

kind:指定资源类型为 deployment;

metadata:为元数据对象;

name:指定资源 deployment 的名称;

labels:为标签,定义标签选择器为 app: nginx,和 template 定义的遥相呼应,目的在于明确标识对象的属性。启动 Pod 的时候,通过 nodeSelector 指定要调度到的 node 节点的标签;

spec:为详细定义对象;

replicas:定义副本数为 3;

matchLabels :用 于定 义一 组 Label , 与直 接写 在 Selector 中 作用 相同 。

matchExpression :用于定义一组基于集合的筛选条件,可用的条件运算符包括:In、NotIn、Exists 和 DoesNotExist;

template:为模板,这里是 Pod 的定义。定义标签选择器为 app: nginx,容器名称为 nginx,为镜像 1.19.6,对外暴露的端口为 80。

apiVersion: apps/v1 #指定API版本

kind: Deployment #指定资源类型

metadata: #指定属性

  name: nginx-deployment #指定名称

  labels: #定义标签

    app: nginx

spec: #定义详细信息

  replicas: 3 #指定副本数量

  selector: #定义选择器信息

    matchLabels:

      app: nginx

  template: #指定模板

    metadata:

      labels:

        app: nginx

    spec: #定义容器信息

      containers:

      - name: nginx

        image: nginx:1.19.6

        ports:

        - containerPort: 80

[root@k8s-master ~]# mkdir k8s

[root@k8s-master ~]# cd k8s

[root@k8s-master k8s]# vim nginx-deployment.yaml

Kuebernetes资源控制管理_第21张图片

        创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。

[root@k8s-master k8s]# kubectl create -f nginx-deployment.yaml

[root@k8s-master k8s]# kubectl get pods

Kuebernetes资源控制管理_第22张图片

 

创建Service资源清单

        在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。

[root@k8s-master k8s]# vim nginx-service.yaml

[root@k8s-master k8s]# kubectl create -f nginx-service.yaml

service/nginx-service created

[root@k8s-master k8s]# kubectl get svc

[root@k8s-master k8s]# kubectl get gods

Kuebernetes资源控制管理_第23张图片

 

访问测试

[root@k8s-master ~]# elinks --dump http://192.168.100.131:32112

Kuebernetes资源控制管理_第24张图片

[root@k8s-master ~]# elinks --dump http://192.168.100.132:32112

Kuebernetes资源控制管理_第25张图片

[root@k8s-master ~]# elinks --dump http://192.168.100.133:32112

Kuebernetes资源控制管理_第26张图片

 

        Ps备注:创建Service资源清单时。记得一定要有pods的存在,也就是要有服务,才可以暴露端口,不然会出现下列情况!

[root@k8s-master k8s]# kubectl create -f nginx-service.yaml

[root@k8s-master k8s]# kubectl get gods

Kuebernetes资源控制管理_第27张图片

 

访问测试,访问不成功!因为没有nginx服务存在!

Kuebernetes资源控制管理_第28张图片

 

(三)使用kubectl命令创建yaml模板

1、创建deployment模板

[root@k8s-master ~]# kubectl create deployment tomcat --image=tomcat:8 -o yaml --dry-run > tomcat-deployment.yaml

Kuebernetes资源控制管理_第29张图片

 

2、查看创建的模板

[root@k8s-master ~]# vim tomcat-deployment.yaml

Kuebernetes资源控制管理_第30张图片

 

3、创建tomcat容器资源

[root@k8s-master ~]# kubectl create -f tomcat-deployment.yaml

Kuebernetes资源控制管理_第31张图片

 

4、查看创建状态

[root@k8s-master ~]# kubectl get pod

Kuebernetes资源控制管理_第32张图片

Kuebernetes资源控制管理_第33张图片

5、创建service模板

[root@k8s-master ~]# kubectl expose deployment tomcat --port=8080 --target-port=8080 --type=NodePort -o yaml --dry-run >tomcat_service.yaml

Kuebernetes资源控制管理_第34张图片

 

6、编辑service模板

[root@k8s-master ~]# vim tomcat_service.yaml

Kuebernetes资源控制管理_第35张图片

 

7、创建service资源

[root@k8s-master ~]# kubectl create -f tomcat_service.yaml

8、查看创建状态

[root@k8s-master ~]# kubectl get svc

Kuebernetes资源控制管理_第36张图片

 

9、访问测试:

Kuebernetes资源控制管理_第37张图片

Kuebernetes资源控制管理_第38张图片 

 

你可能感兴趣的:(linux,kubernetes,docker)