kubectl陈述式资源管理

目录

概念

kubectl的基础命令

*每天常用的查看集群的基本信息

deployment的部署方式

[deployment 的特点](#deployment 的特点)

基于deployment创建pod

手动缩容

service的类型以及工作原理

创建service

service的类型

修改service的类型为nodeport

**nodeport实验:对外暴露端口

滚动更新以及回滚

对版本进行滚动更新

回滚

销毁


概念

kubectl 是陈述式资源管理方式(命令行) 管理就是增删改查

资源对象包含pod、控制器、service,我们创建资源对象时会用声明式,用yaml文件写的

陈述式命令的开头是 kubectl

k8s项目的生命周期:发布------修改------更新------回滚------销毁

kubectl的基础命令

kubectl version 查看集群的版本

kubectl api-resources 查看资源对象的版本和简写

kubectl cluster-info 查看集群的信息

journalctl -u kubelet -f 和 tail -f /var/log/messages 查看集群的日志

*每天常用的查看集群的基本信息

kubectl get cs 查看集群组件的健康状态

kubectl get node 查看节点的状态

kubectl get pod 查看默认命名空间里面当前运行的pod 默认命名空间是default

了解即可:

name:pod的名称

ready:1/1 表示正常状态

status :running 表示运行

只有1/1和running才表示pod属于正常状态

restarts 表示pod的重启次数。因为自愈功能,pod在非正常状态下,会自动进行重启,状态正常之后就不会再进行重启。

AGE:当前pod的运行时间

kubectl create ns xy102 创建命名空间

kubectl delete ns xy102 删除命名空间

kubectl get all 查看当前命名空间的所有资源

kubectl get pod -o wide 查看pod的详细信息 (pod被部署在哪个节点上)

deployment的部署方式

资源对象的部署方式叫做deployment。它是无状态部署方式:pod的名称是随机生成的。

deployment 的特点

1.创建时可以指定副本数(pod的数量)、

2.滚动更新:先更新一个,更新好了之后再更新余下的pod

3.自我修复:默认的策略就是重启容器,删除pod相当于重启pod

4.支持回滚:如果更新有问题,可以恢复到上一个版本

5.支持pod数量的扩容和缩容(手动)

基于deployment创建pod

首先要kubectl create ns xy102 创建命名空间

kubectl create deployment test1 --image=nginx:1.22 --replicas=3 -n xy102 基于deployment创建的pod

kubectl delete pod test1-86776958-5br7q -n xy102 重启pod,不能删除

基于 deployment创建的pod, delete pod 相当于重启,不能删除pod

kubectl run nginx1 --image=nginx:1.22 -n xy102 run直接创建pod 删除这个就是真的删除

kubectl describepod -n xy102 test1-86776958-5br7q 查看这个pod的详细情况

创建pod流程:调度策略(把pod部署到哪个节点上)------拉取镜像------创建容器------运行容器

kubectl describe deployments.apps -n xy102 test1 查看创建的资源对象的信息

kubectl logs -f test1-86776958-5br7q -n xy102 查看pod的日志

kubectl exec -it -n xy102 test1-86776958-5br7q bash 进入pod内的容器

手动缩容

方式一:命令行: kubectl scale deployment nginx1 -n xy102 --replicas=1

方式二:在yaml文件:kubectl edit deployment nginx1 -n xy102

进入之后修改replicas即可

注:pod的ip地址随着pod的生命周期有可能会发生变化,内部访问我们通过pod的ip可以直接访问,外部访问不会受到影响。

service的类型以及工作原理

service如何与pod进行关联,这种关联不受pod的ip地址的变化影响

创建service

kubectl expose deployment nginx1 --port=80 --target-port=80 --name=nginx - n xy102

注:前一个port是集群的service的端口,是和容器内的80做的映射

kubectl get svc 查看service

service的类型

1.ClusterIP 默认类型,提供集群内部的一个虚拟ip地址。是用来让其他的pod来访问的,pod可以通过这个service的ip地址直接访问到内部的容器。只能内部访问,外部不能访问。是内部组件通信使用。(对内)

  1. NodePort:在每个节点(集群的所有节点)都会开放一个端口,外部就可以通过本机的ip+端口(nodeport端口)访问pod内的容器服务。每个节点nodeport的端口都是一致的,端口是有范围的:30000-32767 (对外)
修改service的类型为nodeport

kubectl edit svc -n xy102 nginx1

此时80是service端口 31151是所有节点上开放的端口(所有的节点主机本机ip都能访问)

访问的流程:在宿主机上开放的端口31151------service的80端口------pod里面容器的80端口

**nodeport实验:对外暴露端口

流程图:

deployment的标签是app=nginx1

由于service匹配的标签是app=nginx1,只要资源对象的标签包含app=nginx1,所以都可以通过service进行转发

kubectl edit pod nginx2 -n xy102 进入yaml文件

把labels指向app=nginx1

实验结果:

此时访问本机的31151端口 就能访问到所有的pod

总结:nodeport:service根据标签来匹配对应的pod,只要标签匹配,都能转发打到指定的pod内的容器。

3.LoadBalancer:云平台的运营商(阿里云、腾讯云)提供loadbalancer的地址 地址需要付费

提供之后也是通过访问负载均衡的地址,来实现pod的流量转发

4.ExternalName:把service的名称映射到DNS的域名上。就是让pod去访问集群外部的资源,而且设置为此类型service将不能提供四层负载均衡服务。

滚动更新以及回滚

对版本进行滚动更新

kubectl set image deployment/nginx1 nginx=nginx:1.18 -n xy102

此时 kubectl get pod -o wide -n xy102 即可查看是否正则更新

kubectl rollout history deployment/nginx1 -n xy102 查看还原点

数字大小决定了距离上次更新操作的远近,数字越大,就是最近的一次操作

kubectl set image deployment/nginx1 nginx=nginx:1.20 --record -n xy102 record添加更新记录

回滚

kubectl rollout undo deployment/nginx1 --to-revision=5 -n xy102 回滚

销毁

所以基于deployment创建的资源对象的pod如果要删除,首先要先删除deployment,然后再删除service,最后再删除命名空间。

相关推荐
耶啵奶膘36 分钟前
uniapp-是否删除
linux·前端·uni-app
_.Switch2 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410832 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.2 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
芯盾时代2 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方3 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘3 小时前
NFS服务器
运维·服务器
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker