k8s的陈述式资源管理

发布时间:2023年12月29日

陈述式

所谓陈述式管理就是通过命令行管理。

在k8s中陈述式是通过kubectl命令行工具进行管理。

kubectl的优点:90%以上的场景都可以满足。对增、删、查比较方便,但是改不是很友好

缺点:命令比较冗长、复杂、难记

除了陈述式还有声明式和GUI。

声明式:k8s当中的yaml文件来实现资源管理就是声明式资源管理。

GUI:图形化工具

一般操作使用陈述式

部署服务会通过声明式

日常工作使用GUI

kubectl 命令的详解

如何使用kubectl查看、部署、查看pod情况(详细信息和日志)以及如何发布和回滚呢?

kubectl version
#查看k8s版本信息

kubectl api-resources
#查看所有资源对象的名称


?

kubectl cluster-info
#查看集群信息

基本信息查看

查看master节点

kubectl get cs
#查看当前master节点的状态

查看默认命名空间pod

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

查看集群内的命名空间

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

查看pod信息

kubectl get pod -n kube-system
#查看指定的命名空间
#-n:声明指定命名空间的名称

kubectl get pod -o wide
#查看默认命名空间内pod的部署情况、详细信息
#-o wide:会打印出来pod在集群内部的IP地址和pod部署在哪个节点上。

kubectl get pod -o wide -n kube-system
#查看指定命名空间内pod的详细情况

查看节点信息

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

kubectl get node -o wide
#查看node节点的详细信息
#-o wide:会打印出来节点的真实IP和使用版本

查看指定pod的信息

kubectl describe pod myapp-test-5d94dbb4f
#查看已经部署好的pod详细信息
#可以查看到pod完整的创建信息。
#只要 get pod 可以查看到就可以使用 describe 查看到

kubectl describe pod -n kube-system etcd-master01 
#查看不同命名看空间的pod详细信息

查看pod的日志

kubectl logs myapp-test-5d94dbb4f-5t84v
#查看pod的日志信息
kubectl logs -f myapp-test-5d94dbb4f-5t84v
#-f:动态查看日志

kubectl logs -f -n kube-system etcd-master01
#查看不同命名空间的pod日志信息

创建和删除命名空间

kubectl create ns test
#创建命名空间
#需要先声明动作再加上对象的名称

kubectl delete ns test
#删除命名空间
#需要先声明动作再加上对象的名称

kubectl delete pod myapp-test-5d94dbb4f-5t84v
#删除指定pod
#需要先声明动作再加上对象的名称
#如果不是默认命名空间还需要-n声明命名空间

deployment创建方式

deployment部署pod有两种方式

1、 陈述式:命令行

2、 声明式:yaml文件部署

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

自我修复:如果有pod节点发生故障,deployment副本控制器,会自动启动新的pod来代替。

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

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

上述功能如果想要实现,必须是基于deployment创建的服务才可以。绝大多都是deployment创建的

kubectl get deployments
#查看默认命名空间使用deployment创建的pod数量
kubectl get deployments -n kube-system
#-n:指定命名空间查看

daemonset创建方式

daemonset:不能通过命令行创建,只能通过yaml文件中点定义的方式创建

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

daemonset一般都是依赖环境和重要组件。一般不会对这些资源进行操作。

kubectl get daemonsets -n kube-system
#daemonset不能通过命令行创建,只能通过yaml文件中点定义的方式创建

deployment部署pod

kubectl create deployment nginx-zyg --image=nginx
#在默认命名空间内使用deployment部署pod
kubectl create deployment nginx-zyg --image=nginx --replicas=3 -n test
#在指定命名空间内使用deployment的方式部署pod

删除指定pod

kubectl delete pod nginx-zyg-5c98c86c57-hpd8j -n test
#删除指定命名空间内的pod

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

kubectl delete deployments nginx-zyg -n test 
#基于deployment方式创建的pod一旦删除deployment,基于deployment创建的pod都会被删除(慎用)

kubectl run nginx1 --image=nginx
#基于run创建一个nginx
kubectl delete pod nginx1
#不是基于控制器创建的pod,使用delete将会被直接删除。

远程进入节点容器

kubectl exec -it nginx-zyg-5c98c86c57-949t7 bash
#docker的exec只能在本机内部使用,不能跨主机。kubectl的exec可以跨主机进入容器

kubectl exec -it -n test nginx-6799fc88d8-tpl6n bash
#远程进入指定命名空间内的pod节点容器。

立刻停止pod

kubectl delete pod nginx-zyg-5c98c86c57-949t7 --force --grace-period=0
#--grace-period:过度的存活期。默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod
#=0:表示立即停止pod。必须要force实现。

主要是用于结束卡在销毁状态的pod

基于控制器创建的pod进行扩容和缩容

扩容

kubectl scale deployment nginx-zyg --replicas=3
#--replicas=3:从1个变成3个

缩容

kubectl scale deployment nginx-zyg --replicas=1
#--replicas=1:从3个变成1个

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

发布服务的service

kubectl get svc
#查看当前命名空间的service的类型
#-n:指定命名空间
kubectl delete svc nginx 
#删除当前命名空间的service
#-n:指定命名空间

ClusterIP类型

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

NodePort类型

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

nodeip:nodeport

会随机指派,也可以指定。

端口会从30000-32767的固定范围随机指派一个端口,或者可以指定一个这个范围内的端口。

基于deployment创建的pod可以使用的方式

kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
#--port=80:声明service集群的端口
#--target-port=80:声明pod内部容器的端口

nginx-service   NodePort    10.96.94.66   <none>        80:30386/TCP      9s
#10.96.94.66:集群内部的IP地址,外部不可以访问这个IP地址
#80:对应的是内部的service的端口
#30386:和内部的service的端口做映射

pod内部的容器端口是固定的。

--port是service和容器映射的端口可以自定义

但是--target-port容器内部的端口是固定的不可以自定义

80:30386这里的80是内部容器和service端口做的映射

这里的30386是外部主机和内部的service的端口做的映射

容器内部的端口 --port 先和service做映射。这个端口不能对外访问。如果类型是 NodePort 会在每个node节点上开通一个相同的端口,这个端口就是service和本机端口的映射。所以访问30386就可以访问容器内的服务。

修改service的默认端口

kubectl edit svc nginx1-server
#修改service的默认端口

LoadBalancer类型

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

创建好了service,指定类型为LoadBalancer。

kubectl expose deployment nginx1 --port=8080 --target-port=80 --name=nginx2-server --type=LoadBalancer

ExternalName类型

ExternalName:DNS映射,给service分配一个域名,通过域名来访问后端pod资源。

使用ExternalName的service的类型,不能提供负载均衡,和 LoadBalancer 类型一样必须要设置一个LoadBalancer的地址才可以实现。

kubectl edit svc nginx1-server
#进入service内直接修改

需要在hosts里做映射

四个类型我都知道

默认类型只对内访问

NodePort类型我配置过可以对外访问

LoadBalancer类型需要花钱

ExternalName类型需要配置域名

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

项目的生命周期:创建 > 发布 > 更新 > 回滚 > 删除

滚动更新

kubectl set image deployment nginx1 nginx=nginx:1.10
#滚动更新服务的版本

回滚

kubectl rollout history deployment nginx1
#查看回滚点信息
#数字的大小决定了距离上次操作的远近。数字越大就是最近的一次操作

kubectl set image deployment nginx1 nginx=nginx:1.15 --record 
#滚动更新服务的版本
#--record:可以在回滚点上添加标识

kubectl rollout undo deployment nginx1 --to-revision=1
#指定回滚点还原

kubectl rollout status deployment nginx1
#查看回滚过程

kubectl get pod -w
#动态查看回滚状态

kubectl get all
#查看当前命名空间内部的所有信息。
#-o wide:可以查看到详细信息
#-n:指定命名空间查看

命令大全

http://docs.kubernetes.org.cn/683.html
#kubctl命令大全
文章来源:https://blog.csdn.net/m0_75209491/article/details/135284244
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。