k8s的陈述式资源管理:
命令行:主要通过kubectl命令行工具
优点:90%以上的场景都可以满足
对资源的增删查比较方便,对改不是很友好
缺点:
命令比较冗长:复杂、难记
声明式:
k8s当中的yaml文件来实现资源管理---声明式
GUI:图形化工具的管理
kubectl命令详解,查、部署、查看pod的情况包括详细信息和日志以及发布和回滚
kubectl version 查看k8s的版本
kubectl api-resources 查看所有api的资源对象名称
kubectl cluster-info 查看k8s集群的信息
kubectl get componentstatuses 查看master节点的状态
kubectl get pod 查看默认命名空间内pod信息
kubectl get ns 查看当前集群所有的命名空间
kubectl get pod -n kube-system 要查看指定命名空间内的pod需要加-n 命名空间的名称
kubectl get pod -0 wide 查看默认命名空间内pod的详细信息
kubectl get pod -n kube-system -o wide 查看指定命名空间的详细信息
kubectl get node 查询节点的信息和状态、
kubectl get node -o wide 查看node节点的详细信息
kubectl describe pod nginx 查看已经部署好的pod的详细信息
kubectl logs -n kube-system etcd-master01 如何查看pod输出的日志
先声明动画 create delete get 对象: ns pod service 对象的名称 wqb nginx-6799fc88d8-5kn97
nginx 加-n查询指定的命名空间对象
deployment的部署pod:
陈述时部署:命令行
声明式:yaml文件进行部署
deplotment部署可以实现滚动更新
滚动更新:不是一次性的把所有pod全部部署,而是一个一个来,pod的更新时使用,逐步的引入新的pod:逐步减少新的pod
自我修复:如果有pod节点发生故障,deployment会自动启动新的pod来进行代替
回滚:如果更新有问题,deployment会提供还原点,可以手动还原到未更新前的状态
扩容和缩容:通过deplayment可以随时调整pod的数量,以适应流量的变化
上诉的功能必须是基于deployment创建的服务才可以,绝大多数的pod都是使用deployment来创建。
kubectl get deployments.apps
kubectl get deployments.apps
daemonset:不能同各国命令行创建,只能通过yaml文件来定义这种创建方式
后台运行创建,在每个节点上都创建一个相同方式的相同版本的容器运行的pod
一般都是依赖环境和重要组件,一般也不会去对这些资源进行操作
如果是基于deployment方式创建的pod,或者daemonset方式创建pod,是由控制器创建的pod
使用delete删除pod是删不掉的,相当于重启pod
kubectl delete deployments.apps nginx-w2 -n wqv 基于控制器删除,基于deployment方式创建pod,一旦删除deployment,基于这个deployment创建的pod都会被删除
不是基于控制器创建的用delete会被直接删除掉
远程进入节点容器
kubectl exec -it nginx-w3-5654b5db87-2g24p bash -n wqv
dockerexec只能在本机内部使用,不能跨主机使用,kubectl exec可以跨主机进入容器
快速的让容器结束的命令
kubectl delete pod nginx-wqb-568fcf58f-rpgqj --force --grace-period=0
grace-period=0:表示过度存活期,默认是30秒,可以让pod优雅的结束容器内的进程,然后退出pod ,=0表示立刻停止pod,必须要force
主要是用于结束卡在销毁状态的pod
如何对基于控制器创建pod进行扩容和缩容
kubectl scale deployment nginx-w2 --replicas=1
创建pod时并没有指定副本数,后续也可以对他的副本进行修改,仅限于deployment创建的pod
如何把服务的service进行发布:
service的类型***
ClusterIP:创建service的默认类型,提供一个集群内部的虚拟ip地址,这是service的默认的类型,通过这个虚拟ip可以直接访问pod资源,但是仅限于内部请求,无法对外提供访问
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内部容器的端口
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1
10.96.184.140:集群内部的ip地址,外部是不可以访问这个ip地址的
80:对应的是内部的service的端口
32326:和内部service的80端口做映射
pod内部的容器端口是固定的,--port是service和容器端口 做映射的端口,可以是任意的
LoadBalancer:如果service的类型设定为LoadBalancer,云平台提供一个映射地址,这种用法仅用于公有云服务供应商在云平台上设置好了设置的service的场景,然后再通过外部实现负载均衡,这个地址要付费
创建好了service指定类型为LoadBalancer,会给你提供一个地址来代理pod内部的ip地址
ExternalNname:DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalNname的service类型不能提供负载均衡,必须要设置一个LoadBalancer的地址才可以实现
工作中用NodePort 用ExternalNname:做DNS映射
更新和回滚,以及发布的方式
项目的声明周期:
创建------发布------更新------回滚------删除
kubectl set image deployment nginx1 nginx=nginx:1.10
数字的大小决定了距离上次操作的远近,数字最大就是最近的一次操作
kubectl rollout undo deployment nginx1 --to-revision=1 回滚到1