第四阶段
时 间:2023年8月14日
参加人:全班人员
内 容:
Kuebernetes资源控制管理
目录
一、Kubectl命令工具
(一)版本更新
(二)版本回滚
(三)删除资源
(四)查看资源使用情况
(五)执行容器命令
二、YAML资源清单
(一)YAML 语言
(二)通过资源清单管理容器资源
(三)使用kubectl命令创建yaml模板
ps备注:huyang1也是k8s-master,因为临时设置的主机名,在新建shell窗口时,忘了修改!
一般来说,生产环境中的线上项目会随着时间的推进不断地进行更新、维护、版本升级、兼容老版本。而此时如果需要对 Nginx 更换版本,就需要滚动更新。
执行以下命令查看nginx版本
[root@k8s-master ~]# kubectl get pods
[root@k8s-master ~]# kubectl exec nginx-deployment-596f5df7f-5ttrd -- nginx -v
通过 set 选项将 Nginx 版本换成 1.19,再监使用-w 先处于监听状态进行听,更新速度快。如果不使用 Ctrl+c 中断监听,会一直持续。
[root@k8s-master ~]# kubectl get deploy,pods
[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
[root@k8s-master ~]# kubectl exec nginx-deployment-8675544c64-4zrg2 -- nginx -v
Ps备注:因为本地有镜像1.19.0版本的nginx,所以速度非常快,但是可以发现,nginx-deploymnet的id都已经发生了变化!
1、若想回滚到上一个版本可以使用 rollout 参数。
[root@k8s-master ~]# kubectl rollout --help //使用—help 查看 rollout 帮助信息
2、通过 histtory 查看历史信息
[root@k8s-master ~]# kubectl rollout history deployment.apps/nginx-deployment
3、通过 undo 执行回滚
[root@k8s-master ~]# kubectl rollout undo deployment.apps/nginx-deployment
4、通过 status 检查回滚
[root@k8s-master ~]# kubectl rollout status deployment.apps/nginx-deployment
[root@k8s-master ~]# kubectl get pods
[root@k8s-master ~]# kubectl exec nginx-deployment-5567b746cd-5flfk -- nginx -v
5、一键返回到状态1
[root@k8s-master ~]# kubectl rollout undo deployment.apps/nginx-deployment --to-revision=1
通过以上步骤,完成了创建、发布、更新、回滚操作,接下来进行删除操作。通过 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
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
通过 describe 可以查看较为详细的容器资源使用情况,包括一些错误信息都能检测出来。
[root@k8s-master ~]# kubectl get pods
[root@k8s-master ~]# kubectl describe pod nginx
查看deployment资源
[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml
[root@k8s-master ~]# kubectl get pods
[root@k8s-master ~]# kubectl describe pod nginx-deployment-596f5df7f-l6gr5
使用 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
在 Kubernetes 中可以使用 YAML 格式的文件来创建符合预期期望的 Pod,这样的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
在创建 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
创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。
[root@k8s-master k8s]# kubectl create -f nginx-deployment.yaml
[root@k8s-master k8s]# kubectl get pods
创建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
访问测试
[root@k8s-master ~]# elinks --dump http://192.168.100.131:32112
[root@k8s-master ~]# elinks --dump http://192.168.100.132:32112
[root@k8s-master ~]# elinks --dump http://192.168.100.133:32112
Ps备注:创建Service资源清单时。记得一定要有pods的存在,也就是要有服务,才可以暴露端口,不然会出现下列情况!
[root@k8s-master k8s]# kubectl create -f nginx-service.yaml
[root@k8s-master k8s]# kubectl get gods
访问测试,访问不成功!因为没有nginx服务存在!
1、创建deployment模板
[root@k8s-master ~]# kubectl create deployment tomcat --image=tomcat:8 -o yaml --dry-run > tomcat-deployment.yaml
2、查看创建的模板
[root@k8s-master ~]# vim tomcat-deployment.yaml
3、创建tomcat容器资源
[root@k8s-master ~]# kubectl create -f tomcat-deployment.yaml
4、查看创建状态
[root@k8s-master ~]# kubectl get pod
5、创建service模板
[root@k8s-master ~]# kubectl expose deployment tomcat --port=8080 --target-port=8080 --type=NodePort -o yaml --dry-run >tomcat_service.yaml
6、编辑service模板
[root@k8s-master ~]# vim tomcat_service.yaml
7、创建service资源
[root@k8s-master ~]# kubectl create -f tomcat_service.yaml
8、查看创建状态
[root@k8s-master ~]# kubectl get svc
9、访问测试: