陈述式

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

在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 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命令大全

好文阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。