命令行:kubectl命令行工具
- 优点:90%以上的场景都可以满足
对资源的增删改查比较方便,对改不是很友好。
- 缺点:命令比较冗长,复杂,难记
声明式:
看到声明式都是k8s当中的yml文件来实现资源管理。
GUI:
图形化工具
kubectl命令的详解,查看,部署,查看pod的情况(详细信息,日志,发布和回滚)
相关命令字典:Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区
k8s中基本管理信息的查看
查看k8s的版本
查看k8s的版本
kubectl version
k8s中所有资源对象和资源对象的简写
kubectl api-resource
k8s的集群信息
kubectl cluster-info
查看master节点的状态
kubectl get cs
查看node节点的状态
kubectl get pod
查看默认命名空间内的pod信息
kubectl get ns
查看当前集群所有的命名空间
kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源
kubectl get pod -o wide
查看默认命名空间内pod的详细信息
kubectl get pod -n kube-system
-n来声明查看指定命名空间的资源
kubectl get pod -o wide
查看默认命名空间内pod的详细信息
查看指定命名空间的pod
kubectl get pod -n kube-system -o wide
kubectl get node
查询节点的信息和状态
kubectl get node -o wide
查看node节点的详细信息
如何查看pod的详细信息
查看已经部署好的pod的详细信息
kubectl get node
查看
详细查看
kubectl describle pod myapp-hj-567cb4489c-fq2fd
如果查看指定命名空间的内容,一定要加-n,不加则显示默认
如何查看pod内部的日志
kubectl logs -f myapp-hj-567cb4489c-fq2fd
kubectl logs -n kube-system etcd-master01
kubectl create ns zzr
kubectl delete ns zzr
kubectl delete pod myapp-hj-567cb4489c-fq2fd
先声明动作,再跟上对象,最后是对象的名称
pod的部署
deployment的部署pod:
陈述式部署:命令行
声明式:yml文件部署
滚动更新:不是一次性的把所有pod全部部署,而是一个一个来。pod的更新时使用,逐步引入新的pod,逐步减少旧的pod。
自我修复:如果有pod节点发生故障,deployment会自动启动新的pod来进行代替。
回滚:如果更新有问题,deployment会提供还原点,可以手动还原到未更新前的状态。
扩容和缩容:deployment可以随时调整pod的数量,以适应流量的变化。
上述的功能必须是基于deployment创建的服务才可以。绝大多数服务都是通过deployment来进行创建的
daemonset:不能通过命令行创建,只能在yml文件中定义这种创建方式。
后台运行创建,在每一个节点上都创建一个相同方式的,相同版本的容器运行的pod。
一般都是依赖环境和重要组件,一般也不会对这些资源进行操作。
kubectl get pod -n zzr
kubectl create deployment nginx-hj --image=nginx --replicas=3 -n zzr
kubectl get pod -n zzr
-n:指定命名空间
如果是基于deployment方式创建的pod,或者是daemonset方式创建的pod,是由控制器创建的pod,使用delete删除pod是删不掉的,相当于重启,
不是基于控制器创建的pod,是直接删除
远程进入节点容器
kubectl exec -it nginx-zzr-6bdd8bcbb5-c5tdv bash
docker的exec只能在本机内使用,不能跨主机,kubectl exec可以跨主机进入容器
kubectl create deployment nginx-zzr --image=nginx --replicas=3 -n zzr
kubectl exec -it nginx-zzr-6bdd8bcbb5-8ph4k bash -n zzr
root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html
root@nginx-zzr-6bdd8bcbb5-8ph4k:/# echo k8s-nginx > /usr/share/nginx/html/index.html
如果有容器一直卡在"销毁"状态:
kubectl delete pod 容器名 --force --grace-period=0
grace-period:表示过度存活期,默认是30秒。可以让pod优雅的结束容器内的进程,然后退出pod
=0:立刻停止pod,必须要有force才能实现
主要是用于结束卡在销毁状态的pod
对deployment创建的pod进行扩容和缩容
kubectl scale deployment 容器名 --replicas=所需副本数
kubectl scale deployment myapp-hj --replicas=2
如何把服务的service进行发布
service的类型:
kubectl get svc:查看当前命名空间的service
ClusterIP:
创建service的默认类型,提供一个集群内部的虚拟IP地址,这是service的默认类型。通过这个虚拟IP会直接访问pod的资源,无法对外提供访问。
NodePort:
会在每一个node节点上都开放一个相同的端口。外部可以通过node的本机ip+端口,访问pod资源。集群外部访问service资源的一种方式。四层代理方式。
nodeip:nodeport
随即指派,也可以指定30000-32767
基于deployment的创建方式
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
myapp-zzr ClusterIP 10.96.38.125 <none> 30000/TCP 20h
nginx-service NodePort 10.96.181.60 <none> 80:31989/TCP 2s
10.96.232.240 集群内部的IP地址,外部是不可以访问这个IP地址
80:对应的是内部的service端口
31989:和内部的service的80端口做映射
kubectl expose deployment nginx1 --port=8080 --target-port=80 --name=nginx1-service --type=NodePort
--port=8080:service和容器映射的端口,可以是任意
--target-port=80:容器内部的服务端口
如何实现负载均衡
kubectl edit svc nginx-service
修改nodeport端口。
LoadBalancer:
如果service的类型设定为LoadBalancer,映射地址(云平台提供LoadBalancer地址)
公有云服务供应商在云平台上设置的service的场景。外部来访问,实现负载均衡。LoadBalancer这个地址是要付费的。
创建好了service,指定类型为LoadBalancer,会提供一个地址来代理pod内部的IP地址。
ExternalName:
DNS映射,给service分配一个域名,通过域名来访问后端pod资源。ExternalName的service类型,不能提供负载均衡,必须要设置一个LoadBalancer才可以实现。
做映射对外提供访问是nodeport
ExternalNmae需要映射
LoadBalancer需要花钱
更新和回滚以及发布的方式:
项目的生命周期:
创建------》发布------》更新-------》回滚------》删除
如何回滚:
查看回滚点:
kubectl rollout history deployment nginx1
数字越大,就是最近的操作
如何给回滚点加表示
kubectl set image deployment nginx1 nginx=nginx:1.15 --record
kubectl rollout undo deployment nginx1 --to-revision=1
如何查看
1.kubectl rollout status deployment nginx1
2.kubectl get pod -w
kubectl rollout history deployment nginx1
kubectl get all
查看所有集群的信息