k8s的陈述式资源管理

k8s的陈述式资源管理

命令行

kubectl命令行工具

优点:90%以上的场景都可以满足

对资源的增,删,查比较方便,对改不不太好

缺点:

命令比较冗长,复杂,难记

声明式:

k8s当中的yml文件来实现资源管理---声明式

GUI:图形化工具的管理

1 kubectl命令的详解 查看 部署 产看pod的情况(详细的信息,日志,发布和回滚)

kubectl get cs #查看master节点的状态(基本信息查看)

kubectl get pod #查看默认命名空间的内pod的信息

kubectl get ns #查看当前集群所有的命名空间

kubectl get pod -n kube-system #要查看指定命令空间内的pod需要加-n 命令空间的名称

kubectl get pod -o wide #查看默认命名空间内pod的详细信息

#kubectl get node #查询节点的信息和状态

kubectl get node -o wide #查看node节点的详细信息。

kubectl describe pod +pod的名称 #查看已经部署好的pod的详细信息。

kubectl create ns xxx 创建命名空间

#如果是基于deployment方式创建的pod,或者是daemonset方式创建的pod,是由控制器创建的pod,使用delete删除pod是不删不掉的,相当于重启pod.l

#基于deployment方式创建pod.一旦删除deployment,基于这个deployment创建的pod都会被删除。

不是基于控制器创建,会被直接删除。(比如 run 创建的)

deployment的部署pod:

陈述式部署:命令行

声明式: yaml文件部署

滚动更新:不是一次性的把所有pod全部部署,而是一个个来。pod的更新时使用,逐步的引入新的pod.逐步的减少日的pod.

自我修复:如果有pod节点发生故障,deployment会自动启动新的pod来进行代替

回滚:如果更新有问题,deployment会提供还原点,可以手动还原到未更新前的状态。

扩容和缩容: deployment可以随时调整pod的数量,以适应流量的变化。

上述的功能必须是基于deployment创建的服务才可以。绝大多岁的POD都是使用deployment创建的。

daemonset:不能通过命令行创建。只能在yaml文件当中定义这种创建方式。

后台运行创建,在每个节点上都创建一个相同方式的,相同版本的容器运行的pod

一般都是依赖环境和重要组件,一般也不会去对

kubectl exec -it nginx-dn-6d6cd9c7c5-j7ffr bash #远程进入节点容器。

docker的exec只能在本机内部使用,不能跨主机,kubectl exec可以跨主机进入容器。

kubectl delete pod nginx-dn-6d6cd9c7c5-j7ffr --force --grace-period=o

快速结束pod的创建(主要是用于结束卡在销毁状态的pod.)

grace-period:表示过度存活旗,默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod=0,表示立刻停止pod.必须要force.

#对deployment创建的pod进行扩缩容

#创建pod时并没有指定副本数,后续也可以对他的副本数进行修改。

kubectl scale deployment nginx-dn --replicas=3 扩容

kubectl scale deployment nginx-dn --replicas=1 缩容

service的类型:

ClusterlP:创建service的默认类型,提供一个集群内部的虚拟ip地址,这是service的默认类型。通过这个虚拟ip可以直接访问pod的资源,无法对外提供访问。

NodePort:会在每个node节点上都开放一个相同的端口。外部可以通过node的本机ip+端口,防护pod资源。集群外部访问service资源的一种方式。四层代理方式

nodeip:nodeport

随机指派,也可以指定30000-32767

kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

--port=80service集群的端口

--target-port=80 pod内部容器的端口

LoadBalancer:如果service的类型设定为LoadBalancer,映射地址(云平台提供LoadBalancer的地址)这种用法仅用于公有云服务供应商在云台上设置的service的场景。外部来访问,实现负载均衡。LoadBalancer这个是地址是要付费的。

创建好了service,指定类型为LoadBalancer,会给你提供一个地址来带代理pod内部的ip地址。

ExternalName: DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalName的service类型,不能提供负载均衡,必须要设置一个LoadBalancer的地址才可以实现。

更新和回滚以及发布的方式:

项目的生命周期:

创建------发布-----更新-----回滚-----删除

更新版本:

加标签:

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

回到1 这个还原点

查看当前命名空间里的所有信息的详细信息

三种常见的项目发布方式:

蓝绿发布
金丝雀发布(灰度发布)
滚动发布

应用程序升级,面临的最大的问题是新旧业务之间的切换。立项.........定稿......需求发布.............开发----测试.......发布,测试之后上线,再完美也会有问题。为了不让发生的问题影响所有用户,上述的三种发布方式。

蓝绿发布∶把应用服务集群标记为两个组,蓝组和绿组。先升级蓝组,要把蓝组从负载均衡当中移除,绿组继续提供服务。

蓝组升级完毕,在把绿组从负载均衡当中移除,绿组升级,然后都加入回负载均衡当中去,完成对外服务。

对硬件资源要求很高,但是有了云计算和微服务,现在的成本也大大降低了

蓝绿发布的特点:

1、---旦出现问题,问题的影响范围很大

2、发布策略简单

3、基于现在的云计算和微服务,用户无感知。

4、升级和回滚都比较方便。

缺点:

1 在发布升级的过程之中,只有一部分集群在对外提供服务,可能会是集群的负载能力下降,响应变慢,需要注意给集群增加负载能力()

2 短时间内可能会浪费---定的资源成本。

金丝雀发布(灰度发布):

deployment控制器创建的服务,才可以使用这种发布方式。滚动更新,暂停。发布的过程中,暂时停止,只有一部分的pod先升级,其他的pod还是处于老的版本。只有一部分用户可以访问新的版本,绝大数用户还是在老版本。确定无问题之后,再把剩下的老版本,升级成新的版本,把暂停取消,继续发布。如果有问题,可以立刻回滚。暂停不是回滚,一旦取消暂停只能全部升级完毕之后,再回滚。

更新一个pod就暂停:

继续更新:

灰度发布:

1、自动化的要求比较,对运维人员的要求比较高

2、方便问题,及时解决。影响范围比较小。

3、用户无感知,平滑过度。节约资源。

4、发布策略比较复杂。

5、不易回滚,必须要全部发布成功之后才能回滚。

滚动更新:

deployment的默认就是滚动更新。

相关推荐
bloglin999997 小时前
vmware部署centos7启动docker容器后无法访问服务
运维·docker·容器
夜听莺儿鸣7 小时前
502-003_Linux 中断与异常(一):从Linux角度理解中断与异常
linux·中断与异常·linux中断
杨云龙UP8 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
向成科技9 小时前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
Fcy6489 小时前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
码农小韩10 小时前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well061210 小时前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班10 小时前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
额额额对了10 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
子木HAPPY阳VIP11 小时前
Ubuntu 关闭防火墙操作步骤
linux·运维·ubuntu