如何做自己的网站赚钱,办公室装修费用会计分录,株洲seo主管,网站建设服务兴田德润文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类… 文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类型2.2.1 NodePort2.2.2 ClusterIP2.2.3 LoadBalancer2.2.4 ExternalName 2.3 k8s Service 的端点类型2.3.1 Port2.3.2 NodePort2.3.3 TargetPort2.3.4 ContainerPort 3. 陈述式资源管理方式的基础命令3.1 创建3.1.1 创建命名空间3.1.2 create子命令3.1.3 run子命令 3.2 get ---- 查看基本信息3.2.1 Kubernetes 集群组件的状态3.2.2 命名空间3.2.3 Service服务3.2.4 pod信息3.2.5 Node节点列表 3.3 describe ---- 查看资源详细信息3.4 logs ---- 查看日志3.5 delete ---- 删除指定的资源3.6 exec ---- 跨主机登录容器3.7 scale ---- replicas(副本数) 4. 项目的生命周期4.1 创建-----kubectl create命令4.2 发布-----kubectl expose命令4.3 更新 ----- kubectl set命令4.4 回滚 ----- kubectl rollout 命令 1. K8s管理资源的方法类别
1.1 陈述式资源管理方式
主要依赖命令行工具kubectl进行管理 可理解为使用一条命令和参数选项来实现资源的管理操作
1.2 声明式资源管理方式
主要依赖统一资源配置清单进行管理 可以理解为使用yaml配置文件的定义来实现资源的管理操作
1.3 GUI式资源管理方法
主要依赖图形化操作界面进行管理
2. 陈述式资源管理方式
k8s中文文档http://docs.kubernetes.org.cn/683.html2.1 命令行工具 ---- Kubelet
2.1.1 简介
kubectl 是官方的CLI命令行工具用于与 apiserver 进行通信将用户在命令行输入的命令组织并转化为 apiserver 能识别的信息进而实现管理 k8s 各种资源的一种有效途径
2.1.2 特性 优点 1.可以满足90%以上的使用场景 2.对资源的增、删、查操作比较容易 缺点 1.命令冗长复杂难以记忆 2.特定场景下无法实现管理需求 3.对资源的修改麻烦需要patch来使用json串更改。
2.1.3 kubelet拓展命令
#kubectl 的命令大全
kubectl --help-h #查看k8s版本信息
kubectl version#查看资源对象简写
kubectl api-resources#查看集群信息
kubectl cluster-info#node节点查看日志
journalctl -u kubectl -f2.1.4 kubectl基本语法
kubectl [command] [Type] [NAME] [flags]command: 子命令 用于操作kubernetes集群资源对象的命令
TYPE: 资源对象的类型 区分大小写,能以单数复数或者简写形式表示
NAME: 资源对象的名称 区分大小写,如果不指定名称系统则将返回属于TYPE的全部对象的列表
flags: 子命令的可选参数 2.1.5 Kubectl工具的自动补全
#二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证)
#可以使用以下方式开启命令自动补全
vim /etc/bashrcsource (kubectl completion bash)2.2 k8s Service 的类型
2.2.1 NodePort 将Service的端口号映射到每个Node的一个端口号上这样集群中的任意Node都可以作为Service的访问入口地址即NodeIP:NodePort 每个端口只能是一种服务端口范围只能是 30000-32767。
2.2.2 ClusterIP
默认值它是Kubernetes系统自动分配的虚拟IPCluster IP:Port)只能在集群内部访问
2.2.3 LoadBalancer LoadBalancer和NodePort很相似目的都是向外部暴露一个端口区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备而这个设备需要外部环境支持的外部服务发送到这个设备上的请求会被设备负载之后转发到集群中
2.2.4 ExternalName ExternalName类型的服务用于将集群外的服务定义为Kubernetes的集群的Service并且通过externalName字段指定外部服务的地址可以使用域名或IP格式集群内的客户端应用通过访问这个Service就能访问外部服务了。
2.3 k8s Service 的端点类型 Service是通过标签选择器绑定Pod的标签来关联Pod的端点Endpoint)。
2.3.1 Port
Service 的ClusterIP 使用的端口
2.3.2 NodePort
在NodePort类型的service定义的端口在每个node节点上开启的端口即 nodeIP 使用的端口默认范围为30000~32767
2.3.3 TargetPort
使用云负载设备和service做映射外部用户通过云负载设备即可将请求转发到node节点再通过nodeIP:nodePort访问service并转发给其关联的Pod。
2.3.4 ContainerPort
相当于给一个外部地址做别名集群内的Pod可以通过这个service访问相关的外部服务。8875
K8S集群内部的客户端可以通过 http://clusterIP:port -- podIP:containerPortK8S集群外部的客户端可以通过 http://nodeIP:nodePort -- podIP:containerPort3. 陈述式资源管理方式的基础命令
3.1 创建
run为一次性的创建运行删除后不会自动生成没有pod控制器。
create创建的删除后还会自动生成有pod控制器拥有副本集控制。
3.1.1 创建命名空间
kubectl create ns name#示例
kubectl create ns scj3.1.2 create子命令
kubectl create [-n 命名空间] 资源类型 资源名称 [选项]--image镜像 --replicas副本数 --port容器端口#示例
kubectl create service service-name --tcpport:target-portkubectl create pod pod-name --imagecontainer-imagekubectl create deployment deployment-name --imagecontainer-image3.1.3 run子命令
#创建并运行
kubectl run 资源名称 --image镜像 --replicas副本数 --port容器端口3.2 get ---- 查看基本信息
#基本格式
kubectl get resource [-o wide|json|yaml] [-n namespace]获取资源的相关信息-n指定命令空间-o指定输出格式
resource可以是具体资源名称如pod nginx- xxx;也可以是资源类型如pod; 或者all (仅展示几种核心资源并不完整)--all-namespaces 或-A :表示显示所有命令空间
--show-labels :显示所有标签
-l x:仅显示标签为x的资源
-l xy:仅显示包含x标签且值为y的资源3.2.1 Kubernetes 集群组件的状态
kubectl get componentstatuses
kubectl get cs #简写get pods --show-labels
#查看有哪些标签面试常问3.2.2 命名空间
命名空间在 Kubernetes 中主要用于隔离和管理资源名称。
每个命名空间具有自己的资源名称空间保证了资源名称的唯一性。
#获取当前集群中所有命名空间的列表kubectl get namespace
kubectl get ns #简写#获取命名空间中的所有资源的列表kubectl get all [-n namespace]
#不指定命名空间则默认查看default命名空间3.2.3 Service服务
kubectl get service
kubectl get svc 3.2.4 pod信息
kubectl get pods [-n namespace] [-o wide|json|yaml]kubectl get pods --all-namespaces -o wide3.2.5 Node节点列表
kubectl get nodes3.3 describe ---- 查看资源详细信息
#基本格式
kubectl describe [-n 命名空间] 资源类型 资源名称#示例
#先根据kubectl get pods -A找到要查看的资源
kubectl describe pod etcd-master01 -n kube-system3.4 logs ---- 查看日志
kubectl logs [-n 命名空间] Pod资源名称 [-c 容器名称] [-f] [-p]
#查看Pod容器的日志选项对象功能-n命名空间用于指定 Pod 所属的命名空间如果不指定命名空间将默认使用默认命名空间-c容器名称可选的容器参数用于指定要获取日志的容器名称如果 Pod 中只有一个容器可以省略此参数-f可选的跟踪参数用于告诉命令持续输出日志-p可选的先前参数用于获取已经终止的 Pod 的先前日志如果 Pod 重新创建或重新调度该参数可以用来获取先前的日志
#举个例子
kubectl logs -n kube-system kube-proxy-ggw6p3.5 delete ---- 删除指定的资源
Pod没有重启的概念重启的是容器 被自动删除和重新创建
#删除命名空间app
kubectl delete [-n 命名空间] 资源类型 资源名称|--all [--force --grace-period0]#示例
kubectl delete pod nginx-764b95f4c5-7t65m #若pod无法删除 总是处于terminate状态 则要强行删除pod
kubectl delete pod name [-n namespace ] --force --grace-period0#grace-period表示过渡存活期默认30s在删除pod之前允许POD慢慢终止其上的容器进程从而优雅退出0表示立即终止pod。3.6 exec ---- 跨主机登录容器
kubectl exec可以跨主机登录容器docker exec 只能在容器所在主机上登录。
kubectl exec -it [-n 命名空间] Pod资源名称 [-c 容器名称] sh|bash#示例
kubectl exec -it nginx-764b95f4c5-hsj59 sh3.7 scale ---- replicas(副本数)
用于调整 Kubernetes 集群中 Deployment 或 StatefulSet 对象的副本数量
kubectl scale [-n 命名空间] deployment|statefulset 资源名称 --replicas副本数#增加副本数扩容
kubectl scale deployment nginx --replicas6#减少副本数缩容
kubectl scale deployment nginx --replicas1kubectl scale deployment nginx --replicas0
#reolicas0等于清空4. 项目的生命周期
创建–发布–更新–回滚–删除
4.1 创建-----kubectl create命令
创建并运行一个或多个容器镜像。
创建一个deployment 或job 来管理容器。
kubectl create --help
kubectl create service svc资源类型 svc资源名称 --tcpclusterIP的端口:容器的端口#举个例子
#启动 nginx 实例暴露容器端口 80设置副本数 3
kubectl create deployment nginx --imagenginx:1.14 --port80 --replicas3kubectl get pods
kubectl get all4.2 发布-----kubectl expose命令
将资源暴露为新的 Service。
kubectl expose --helpkubectl expose [-n 命名空间] deployment 资源名称 --name 自定义svc资源名称 --type svc资源类型 --port clusterIP的端口 --targetPort 容器的端口ClusterIP|NodePort|LoadBalancer|ExternalName#示例
#为deployment的nginx创建service
#并通过Service的80端口转发至容器的80端口上
#Service的名称为nginx-service类型为NodePort
kubectl expose deployment nginx --port80 --target-port80 --namenginx-service --typeNodePort#查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide#查看关联后端的节点
kubectl get endpoints#查看 service 的描述信息
kubectl describe svc nginxcurl 10.244.3.3:80
curl 10.244.3.4:80
curl 10.244.4.3:80curl 192.168.67.100:30724#在master01操作 查看访问日志
kubectl logs nginx-d9d8cf5c7-6zpc2
kubectl logs nginx-d9d8cf5c7-85rvh
kubectl logs nginx-d9d8cf5c7-nffcz 4.3 更新 ----- kubectl set命令
更改现有service的一些信息
kubectl set --help#更新 Kubernetes 集群中某个 Deployment 的容器镜像
kubectl set image deployment deployment资源名称 容器名镜像名
#更改 Kubernetes 中服务对象的标签选择器
kubectl set selector service svc资源名称 标签keyvalue#示例#查看当前 nginx 的版本号
curl -I http://192.168.67.100:30724#将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginxnginx:1.15kubectl get pods,svc -o wide#再次查看nginx版本号
curl -I 192.168.67.100:311344.4 回滚 ----- kubectl rollout 命令
#查看指定 deployment 资源的历史记录包括版本号、更新时间和事件
kubectl rollout history deployment deployment资源名称#回滚
kubectl rollout undo deployment deployment资源名称 [--to-revisionN]指定版本回滚#状态
kubectl rollout status deployment deployment资源名称#示例
#查看历史版本
kubectl rollout history deployment/nginx #执行回滚到上一个版本
kubectl rollout undo deployment/nginx#检查回滚状态
kubectl rollout status deployment/nginx#执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision1