常州在线制作网站,wordpress版块插件,网站建设的后如何发布,html5怎么做二手网站1、k8s集群资源管理方式分类
#xff08;1#xff09;陈述式资源管理方式#xff1a;增删查比较方便#xff0c;但是改非常不方便
使用一条kubectl命令和参数选项来实现资源对象管理操作
#xff08;2#xff09;声明式资源管理方式#xff1a;yaml文件管理
使用yam…1、k8s集群资源管理方式分类
1陈述式资源管理方式增删查比较方便但是改非常不方便
使用一条kubectl命令和参数选项来实现资源对象管理操作
2声明式资源管理方式yaml文件管理
使用yaml配置文件里定义的配置实现资源对象的管理操作
2、陈述式资源管理方法
1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
2.kubectl 是官方的CLI命令行工具用于与 apiserver 进行通信将用户在命令行输入的命令组织并转化为 apiserver 能识别的信息进而实现管理 k8s 各种资源的一种有效途径
3.kubectl 的命令大全 kubectl --help k8s中文文档http://docs.kubernetes.org.cn/683.html
4.对资源的增、删、查操作比较方便但对改的操作就不容易了
3、kubectl命令
1通用操作
1查看版本信息
kubectl version 2查看资源对象简写
kubectl api-resources 3查看集群信息
kubectl cluster-info #查看集群信息
kubectl get cs #查看master节点组件状态
kubectl get nodes #查看k8s所有node节点状态 4配置kubectl自动补全
source (kubectl completion bash) #默认只在当前shell有效vim /etc/bashrc #可添加到该文件的末尾
bash切换环境即可 5node节点查看日志
journalctl -u kubelet -f #-f实时跟踪 2基本管理信息查看
kubectl get resource [-o wide|json|yaml] [-n namespace]
获取资源的相关信息-n 指定命令空间-o 指定输出格式
resource可以是具体资源名称如pod nginx-xxx也可以是资源类型如pod或者all(仅展示几种核心资源并不完整)
--all-namespaces 或 -A 表示显示所有命名空间
--show-labels 显示所有标签
-l app 仅显示标签为app的资源
-l appnginx 仅显示包含app标签且值为nginx的资源wide显示详细信息
kubectl get -n kube-flannel pods #查看命名空间kube-flannel下的所有pod资源
kubectl get -n kube-flannel pods kube-flannel-ds-b9765 #-n指定具体命名空间查看指定的kube-flannel-ds-b9765资源kubectl get -n kube-flannel pods kube-flannel-ds-b9765 -o wide #显示kube-flannel-ds-b9765
资源的详细信息 kubectl get -n kube-system pods --show-labels # --show-labels 查看指定命名空间下资源的标签
kubectl get -n kube-system pods --show-labels -l k8s-app #通过-l筛选k8s-app 标签的资源
kubectl get -n kube-system pods --show-labels -l k8s-appkube-dns #进一步筛选k8s-app标签值等于kube-dns的资源 kubectl get -n kubernetes-dashboard all #all选项会列出指定命名空间下pod、service、控制器资源 kubectl get -n kubernetes-dashboard pods
kubectl get -n kubernetes-dashboard pods,service
kubectl get -n kubernetes-dashboard pods,service,deploy
#想提示查看多个资源可在资源中间以分隔
kubectl get -n kubernetes-dashboard all #查看所有资源 1查看 master 节点状态
kubectl get componentstatuses
kubectl get cs 2查看命名空间
kubectl get namespace
kubectl get ns
//命令空间的作用用于允许不同 命名空间 的 相同类型 的资源 重名的 3查看default命名空间的所有资源
kubectl get all [-n default] 3创建查看pod资源
1创建pod资源方法1此种方法不能直接删除pod资源因为指定了副本数删除后会自动创建新的副本
1、创建命名空间并创建副本控制器来启动Pod
kubectl get nskubectl create namespace xy101
kubectl create deployment nginx1 --imagenginx -r 3 --port80 -n xy101 #即可指定命名空间创建资源不可在同一个命名空间中创建相同名称的同种资源
kubectl get -n xy101 all 2、查看某个资源的详细信息
kubectl describe -n xy101 deployments.apps nginx1 #deployments.apps资源的名称 3、查看命名空间xy101 中的pod 信息
kubectl describe -n 命名空间 资源类型 资源名称 kubectl describe -n xy101 pod nginx1-794dd8cb7b-4klp6 4、删除pod
kubectl delete -n 命名空间 资源类型 资源名称 kubectl delete -n xy101 pod nginx1-794dd8cb7b-4klp6 #此种方法创建的pod资源若直接删除pod无法删除由于设置了副本数删除一个会自动再创建一个 2创建pod资源方法2此种方法创建的pod是独立存在的没有控制器管理
kubectl run -n 命名空间 Pod资源名称 --image镜像 --port容器端口kubectl run -n xy101 nginx2 --imagenginx --port80 #此种方法创建的pod无控制器进行管理可直接删除kubectl delete -n xy101 pod nginx2 #此种方法创建的pod可直接删除 4登录容器
kubectl exec可以跨主机登录容器docker exec 只能在容器所在主机上登录
kubectl exec -n 命名空间 -it Pod资源名称 [-c 容器名称] -- sh|bash|命令kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbxjz -- sh
kubectl exec -it -n xy101 pod/nginx1-794dd8cb7b-cbxjz -- ls -l #在不进入容器的前提下查看其中内容 当一个pod中存在多个容器可使用-c指定登录的容器kubectl describe -n xy101 pod/nginx1-794dd8cb7b-cbxjz #查看资源下的容器
kubectl exec -it -n xy101 -c nginx pod/nginx1-794dd8cb7b-cbxjz -- sh #使用-c指定登录的容器 5 查看容器日期、扩缩容
1查看Pod中容器的日志
kubectl logs -n 命名空间 Pod资源名称 [-c 容器名称] [-f] [-p] #-p表示查看Pod容器重启前的日志kubectl logs -n xy101 nginx1-794dd8cb7b-cbxjz -c nginx 2扩缩容
kubectl scale -n 命名空间 Pod控制器资源类型 资源名称 --replicas副本数deployment|statefulsetkubectl scale -n xy101 deployment nginx1 --replicas2 6删除操作
1删除副本控制器
kubectl get -n xy101 all
kubectl delete -n xy101 deployments.apps nginx1 删除重启pod资源由于存在deployment/rc之类的副本控制器删除pod也会重新拉起若pod无法删除总是处于terminate状态则要强行删除pod kubectl delete pod pod-name -n namespace --force --grace-period0
#grace-period表示过渡存活期默认30s在删除pod之前允许pod慢慢终止其上的容器进程从而优雅退出0表示立即终止podkubectl delete -n xy101 pod nginx1-794dd8cb7b-8589m --force --grace-period0
kubectl get -n xy101 all 2删除全部pod资源进行重建
kubectl delete -n xy101 pods --all
kubectl get -n xy101 all 3删除命名空间
kubectl delete ns 网络空间
kubectl delete ns xy101 4查看service关联的Pod端点
kubectl describe -n 命名空间 资源类型 资源名称
kubectl describe -n xy101 svc svc-nginx1
kubectl get -n xy101 endpoints 资源名称 #直接查看关联端点
#以上两种方法可以查看端点不多的情况若端点比较多就无法详细查看到kubectl describe -n 命名空间 endpoints 资源名称
kubectl describe -n xy101 endpoints svc-nginx1 5如何修改标签选择器的值
#创建service
kubectl create -n 命名空间 service svc资源类型 资源名称 --tcpclusterIP的端口:容器端口
kubectl create -n xy101 service nodeport svc-1 --tcp8080:80 #修改service标签选择器
kubectl set -n 命名空间 selector 资源类型 资源名称 标签keyvaluekubectl set -n xy101 selector svc svc-1 appnginx1 4、项目的生命周期
项目的生命周期创建--发布--更新--回滚--删除
1创建
kubectl create ns xy101 #创建命名空间
kubectl create -n xy101 deployment nginx1 --imagenginx --port80 --replicas3 #创建资源 2发布 service 的 type 类型 ●ClusterIP默认类型分配一个集群内部的虚拟 IP 地址仅在集群内部可访问。例如Pod和Pod之间的通信如果是Kubernetes集群外的请求访问是不行的。 ●NodePort宿主机上开启一个特定端口默认范围 30000-32767直接与Pod的端口相连实现访问宿主机IP端口能够直接访问到Pod。用途允许外部访问但通常用于开发或测试。 ●LoadBalancer使用外接负载均衡器完成到服务的负载分发此模式需要使用云服务商提供的负载均衡器将请求分发到所有的Node上再结合kube-proxy实现流量接入 外部客户端 - 云负载均衡器 - Kubernetes 节点 - kube-proxy - Pod LoadBalancer和NodePort很相似目的都是向外部暴露一个端口区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备而这个设备需要外部云环境支持的外部服务发送到这个设备上的请求会被设备负载均衡转发到K8S集群中。 ●externalName将外部服务映射到集群内部并以DNS的形式用于Pod中服务对外部服务访问。 Kubernetes 之所以需要 Service一方面是因为 Pod 的 IP 不是固定的Pod可能会重建另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。 Service 通过 Label Selector 实现的对一组的 Pod 的访问。 对于容器应用而言Kubernetes 提供了基于 VIP虚拟IP 的网桥的方式访问 Service再由 Service 重定向到相应的 Pod。 创建service方法1
kubectl expose -n 命名空间 Pod控制器资源类型 资源名称 --namesvc资源名称 --tpyesvc类型 --portclusterIP的端口 --targetPort容器端口kubectl expose -n xy101 deployment nginx1 --namesvc-nginx1 --port8080 --target-port80 --typeClusterIP #创建类型为ClusterIP的service所有节点服务器即可通过访问http://clusterIP:port访问service
curl http://10.96.140.49:8080 kubectl expose -n xy101 deployment nginx1 --namesvc-nginx2 --port8080 --target-port80 --typeNodePort #创建service类型为NodePortkubectl get -n xy101 svcnetstat -lntp | grep :31392 #在每个节点都可监听到这个端口 K8S集群外部/内部用户都可以通过nodeIP:nodePort来访问service 3更新
重新创建一个service做测试
kubectl create -n xy101 deployment myapp-test01 --imagesoscscs/myapp:v1 --port80 --replicas2 #创建pod资源
kubectl expose -n xy101 deployment myapp-test01 --nametest02 --port8080 --target-port80 --typeNodePort #创建service类型选择NodePort
外部服务器即可通过nodeip:nodeport访问关联的pod kubectl set image -n 命名空间 Pod控制器资源类型 资源名称 容器名镜像名:标签
kubectl set image -n xy101 deployment myapp-test01 myappsoscscs/myapp:v2kubectl describe -n xy101 deployments.apps myapp-test01 4回滚
kubectl rollout history -n 命名空间 Pod控制器资源类型 资源名称 kubectl rollout undo -n 命名空间 Pod控制器资源类型 资源名称 [--to-revisionN]kubectl rollout status -n 命名空间 Pod控制器资源类型 资源名称kubectl rollout history -n xy101 deployment myapp-test01 #查看历史回滚记录
kubectl rollout undo -n xy101 deployment myapp-test01 #撤销上一次的 rollout
kubectl rollout undo -n xy101 deployment myapp-test01 --to-revision2 #指定回滚版本
kubectl rollout status -n xy101 deployment myapp-test01 #查看回滚状态 5删除
kubectl delete -n xy101 deployments.apps myapp-test01 #删除控制器
kubectl delete -n xy101 service test02 #删除service 总结 service资源的四种类型 ClusterIP默认的service资源类型可提供clusterIP:Port供k8s集群内部访问service关联的pod端点 NodePort会在每个node节点上都开启相同的端口k8s集群内、外部用户可以通过nodeIP:nodePort来访问service关联的pod端点 LoadBalancer借助第三方云负载均衡器将请求分发到k8s集群的node节点上再通过nodeIP:nodePort来访问service关联的pod端点 externalName相当于给外部地址域名/IP做映射k8s集群内的pod可以通过这个service访问相关的外部服务 service是通过标签选择器匹配pod的标签来自动发现pod的端点podIP: containerPort service的端口 Portservice的clusterIP使用的端口只能在k8s集群内部被访问到k8s集群内部的客户端可通过clusterIP:port来访问service nodePortNodePort类型的service使用的端口会在每个节点上都开启相同的端口也就是nodeIP使用的端口默认访问为30000~32767k8s集群外部、内部用户都可以通过nodeIP:nodePort来访问service targetPortpod容器使用的端口service会将发送给port或nodeport的请求转发给targetPort映射的pod容器端口