首页 文章 精选 留言 我的

精选列表

搜索[全栈信创],共10004篇文章
优秀的个人博客,低调大师

kubernetes集群全栈监控报警方案kube-prometheus

参考文档 http://www.servicemesher.com/blog/prometheus-operator-manual/ https://github.com/coreos/prometheus-operator https://github.com/coreos/kube-prometheus 背景环境 kubernetes集群1.13版本,纯二进制版本打造,参考k8s1.13集群部署 coreos/kube-prometheus从coreos/prometheus-operator独立出来了,后续entire monitoring stack只能去coreos/kube-prometheus 目前在该环境下部署还没有遇到坑 监控原理 Prometheus读取Metrcs,读取etcd或者api的都行 查看etcd的metrics输出信息 [root@elasticsearch01 yaml]# curl --cacert /k8s/etcd/ssl/ca.pem --cert /k8s/etcd/ssl/server.pem --key /k8s/etcd/ssl/server-key.pem https://10.2.8.34:2379/metrics 查看kube-apiserver的metrics信息 [root@elasticsearch01 yaml]# kubectl get --raw /metrics 实施部署 注意:This will be the last release supporting Kubernetes 1.13 and before. The next release is going to support Kubernetes 1.14+ only.后续版本只支持k8s1.14+,所以后续要下载release版本,目前只有一个版本所以可以直接git clone 1.下载原代码 [root@elasticsearch01 yaml]# git clone https://github.com/coreos/kube-prometheus Cloning into 'kube-prometheus'... remote: Enumerating objects: 5803, done. remote: Total 5803 (delta 0), reused 0 (delta 0), pack-reused 5803 Receiving objects: 100% (5803/5803), 3.69 MiB | 536.00 KiB/s, done. Resolving deltas: 100% (3441/3441), done. 2.查看原配置文件 [root@elasticsearch01 yaml]# cd kube-prometheus/manifests [root@elasticsearch01 manifests]# ls 00namespace-namespace.yaml 0prometheus-operator-0alertmanagerCustomResourceDefinition.yaml 0prometheus-operator-0prometheusCustomResourceDefinition.yaml 0prometheus-operator-0prometheusruleCustomResourceDefinition.yaml 0prometheus-operator-0servicemonitorCustomResourceDefinition.yaml 0prometheus-operator-clusterRoleBinding.yaml 0prometheus-operator-clusterRole.yaml 0prometheus-operator-deployment.yaml 0prometheus-operator-serviceAccount.yaml 0prometheus-operator-serviceMonitor.yaml 0prometheus-operator-service.yaml alertmanager-alertmanager.yaml alertmanager-secret.yaml alertmanager-serviceAccount.yaml alertmanager-serviceMonitor.yaml alertmanager-service.yaml grafana-dashboardDatasources.yaml grafana-dashboardDefinitions.yaml grafana-dashboardSources.yaml grafana-deployment.yaml grafana-serviceAccount.yaml grafana-serviceMonitor.yaml grafana-service.yaml kube-state-metrics-clusterRoleBinding.yaml kube-state-metrics-clusterRole.yaml kube-state-metrics-deployment.yaml kube-state-metrics-roleBinding.yaml kube-state-metrics-role.yaml kube-state-metrics-serviceAccount.yaml kube-state-metrics-serviceMonitor.yaml kube-state-metrics-service.yaml node-exporter-clusterRoleBinding.yaml node-exporter-clusterRole.yaml node-exporter-daemonset.yaml node-exporter-serviceAccount.yaml node-exporter-serviceMonitor.yaml node-exporter-service.yaml prometheus-adapter-apiService.yaml prometheus-adapter-clusterRoleAggregatedMetricsReader.yaml prometheus-adapter-clusterRoleBindingDelegator.yaml prometheus-adapter-clusterRoleBinding.yaml prometheus-adapter-clusterRoleServerResources.yaml prometheus-adapter-clusterRole.yaml prometheus-adapter-configMap.yaml prometheus-adapter-deployment.yaml prometheus-adapter-roleBindingAuthReader.yaml prometheus-adapter-serviceAccount.yaml prometheus-adapter-service.yaml prometheus-clusterRoleBinding.yaml prometheus-clusterRole.yaml prometheus-prometheus.yaml prometheus-roleBindingConfig.yaml prometheus-roleBindingSpecificNamespaces.yaml prometheus-roleConfig.yaml prometheus-roleSpecificNamespaces.yaml prometheus-rules.yaml prometheus-serviceAccount.yaml prometheus-serviceMonitorApiserver.yaml prometheus-serviceMonitorCoreDNS.yaml prometheus-serviceMonitorKubeControllerManager.yaml prometheus-serviceMonitorKubelet.yaml prometheus-serviceMonitorKubeScheduler.yaml prometheus-serviceMonitor.yaml prometheus-service.yaml 3.新建目录重新梳理下 [root@elasticsearch01 manifests]# mkdir -p operator node-exporter alertmanager grafana kube-state-metrics prometheus serviceMonitor adapter [root@elasticsearch01 manifests]# mv *-serviceMonitor* serviceMonitor/ etheus/[root@elasticsearch01 manifests]# mv 0prometheus-operator* operator/ [root@elasticsearch01 manifests]# mv grafana-* grafana/ [root@elasticsearch01 manifests]# mv kube-state-metrics-* kube-state-metrics/ [root@elasticsearch01 manifests]# mv alertmanager-* alertmanager/ [root@elasticsearch01 manifests]# mv node-exporter-* node-exporter/ [root@elasticsearch01 manifests]# mv prometheus-adapter* adapter/ [root@elasticsearch01 manifests]# mv prometheus-* prometheus/ [root@elasticsearch01 manifests]# ls 00namespace-namespace.yaml alertmanager kube-state-metrics operator serviceMonitor adapter grafana node-exporter prometheus [root@elasticsearch01 manifests]# ls -lh total 36K -rw-r--r-- 1 root root 60 Jun 3 20:05 00namespace-namespace.yaml drwxr-xr-x 2 root root 4.0K Jun 4 14:23 adapter drwxr-xr-x 2 root root 4.0K Jun 4 14:23 alertmanager drwxr-xr-x 2 root root 4.0K Jun 4 14:23 grafana drwxr-xr-x 2 root root 4.0K Jun 4 14:23 kube-state-metrics drwxr-xr-x 2 root root 4.0K Jun 4 14:23 node-exporter drwxr-xr-x 2 root root 4.0K Jun 4 14:23 operator drwxr-xr-x 2 root root 4.0K Jun 4 14:23 prometheus drwxr-xr-x 2 root root 4.0K Jun 4 14:23 serviceMonitor 4.部署前注意问题a.镜像问题其中k8s.gcr.io/addon-resizer:1.8.4镜像下载不了,需要借助阿里云中转下,其他镜像默认都能下载,如遇到不能下载的也需要中转下再tag到自己私有镜像库 [root@VM_8_24_centos ~]# docker pull registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4 1.8.4: Pulling from minminmsn/addon-resizer 90e01955edcd: Pull complete ab19a0d489ff: Pull complete Digest: sha256:455eb18aa7a658db4f21c1f2b901c6a274afa7db4b73f4402a26fe9b3993c205 Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4 [root@VM_8_24_centos ~]# docker tag registry.cn-beijing.aliyuncs.com/minminmsn/addon-resizer:1.8.4 core-harbor.minminmsn.com/public/addon-resizer:1.8.4 [root@VM_8_24_centos ~]# docker push core-harbor.minminmsn.com/public/addon-resizer:1.8.4 The push refers to repository [core-harbor.minminmsn.com/public/addon-resizer] cd05ae2f58b4: Pushed 8a788232037e: Pushed 1.8.4: digest: sha256:455eb18aa7a658db4f21c1f2b901c6a274afa7db4b73f4402a26fe9b3993c205 size: 738 b.访问问题grafana,prometheus,alermanager等如果不想使用ingres方式访问就需要使用nodeport方式,否则对外不好访问nodeport方式需在service配置文件,如grafana/grafana-service.yaml 添加type: NodePort,如果要指定node对外端口,需要加配nodePort: 33000,具体可以看配置文件ingress方式也需要配置文件,ingress配置文件见最后访问配置文件,ingress部署参考k8s集群部署ingress 5.应用部署 [root@elasticsearch01 manifests]# kubectl apply -f . namespace/monitoring created [root@elasticsearch01 manifests]# kubectl apply -f operator/ customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created clusterrole.rbac.authorization.k8s.io/prometheus-operator created clusterrolebinding.rbac.authorization.k8s.io/prometheus-operator created deployment.apps/prometheus-operator created service/prometheus-operator created serviceaccount/prometheus-operator created [root@elasticsearch01 manifests]# kubectl -n monitoring get pod NAME READY STATUS RESTARTS AGE prometheus-operator-7cb68545c6-z2kjn 1/1 Running 0 41s [root@elasticsearch01 manifests]# kubectl apply -f adapter/ apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created clusterrole.rbac.authorization.k8s.io/prometheus-adapter created clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrolebinding.rbac.authorization.k8s.io/prometheus-adapter created clusterrolebinding.rbac.authorization.k8s.io/resource-metrics:system:auth-delegator created clusterrole.rbac.authorization.k8s.io/resource-metrics-server-resources created configmap/adapter-config created deployment.apps/prometheus-adapter created rolebinding.rbac.authorization.k8s.io/resource-metrics-auth-reader created service/prometheus-adapter created serviceaccount/prometheus-adapter created [root@elasticsearch01 manifests]# kubectl apply -f alertmanager/ alertmanager.monitoring.coreos.com/main created secret/alertmanager-main created service/alertmanager-main created serviceaccount/alertmanager-main created [root@elasticsearch01 manifests]# kubectl apply -f node-exporter/ clusterrole.rbac.authorization.k8s.io/node-exporter created clusterrolebinding.rbac.authorization.k8s.io/node-exporter created daemonset.apps/node-exporter created service/node-exporter created serviceaccount/node-exporter created [root@elasticsearch01 manifests]# kubectl apply -f kube-state-metrics/ clusterrole.rbac.authorization.k8s.io/kube-state-metrics created clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created deployment.apps/kube-state-metrics created role.rbac.authorization.k8s.io/kube-state-metrics created rolebinding.rbac.authorization.k8s.io/kube-state-metrics created service/kube-state-metrics created serviceaccount/kube-state-metrics created [root@elasticsearch01 manifests]# kubectl apply -f grafana/ secret/grafana-datasources created configmap/grafana-dashboard-k8s-cluster-rsrc-use created configmap/grafana-dashboard-k8s-node-rsrc-use created configmap/grafana-dashboard-k8s-resources-cluster created configmap/grafana-dashboard-k8s-resources-namespace created configmap/grafana-dashboard-k8s-resources-pod created configmap/grafana-dashboard-k8s-resources-workload created configmap/grafana-dashboard-k8s-resources-workloads-namespace created configmap/grafana-dashboard-nodes created configmap/grafana-dashboard-persistentvolumesusage created configmap/grafana-dashboard-pods created configmap/grafana-dashboard-statefulset created configmap/grafana-dashboards created deployment.apps/grafana created service/grafana created serviceaccount/grafana created [root@elasticsearch01 manifests]# kubectl apply -f prometheus/ clusterrole.rbac.authorization.k8s.io/prometheus-k8s created clusterrolebinding.rbac.authorization.k8s.io/prometheus-k8s created prometheus.monitoring.coreos.com/k8s created rolebinding.rbac.authorization.k8s.io/prometheus-k8s-config created rolebinding.rbac.authorization.k8s.io/prometheus-k8s created rolebinding.rbac.authorization.k8s.io/prometheus-k8s created rolebinding.rbac.authorization.k8s.io/prometheus-k8s created role.rbac.authorization.k8s.io/prometheus-k8s-config created role.rbac.authorization.k8s.io/prometheus-k8s created role.rbac.authorization.k8s.io/prometheus-k8s created role.rbac.authorization.k8s.io/prometheus-k8s created prometheusrule.monitoring.coreos.com/prometheus-k8s-rules created service/prometheus-k8s created serviceaccount/prometheus-k8s created [root@elasticsearch01 manifests]# kubectl apply -f serviceMonitor/ servicemonitor.monitoring.coreos.com/prometheus-operator created servicemonitor.monitoring.coreos.com/alertmanager created servicemonitor.monitoring.coreos.com/grafana created servicemonitor.monitoring.coreos.com/kube-state-metrics created servicemonitor.monitoring.coreos.com/node-exporter created servicemonitor.monitoring.coreos.com/prometheus created servicemonitor.monitoring.coreos.com/kube-apiserver created servicemonitor.monitoring.coreos.com/coredns created servicemonitor.monitoring.coreos.com/kube-controller-manager created servicemonitor.monitoring.coreos.com/kube-scheduler created servicemonitor.monitoring.coreos.com/kubelet created 6.检查验证 [root@elasticsearch01 manifests]# kubectl -n monitoring get all NAME READY STATUS RESTARTS AGE pod/alertmanager-main-0 2/2 Running 0 91s pod/alertmanager-main-1 2/2 Running 0 74s pod/alertmanager-main-2 2/2 Running 0 67s pod/grafana-fc6fc6f58-22mst 1/1 Running 0 89s pod/kube-state-metrics-8ffb99887-crhww 4/4 Running 0 82s pod/node-exporter-925wp 2/2 Running 0 89s pod/node-exporter-f45s4 2/2 Running 0 89s pod/prometheus-adapter-66fc7797fd-x6l5x 1/1 Running 0 90s pod/prometheus-k8s-0 3/3 Running 1 88s pod/prometheus-k8s-1 3/3 Running 1 88s pod/prometheus-operator-7cb68545c6-z2kjn 1/1 Running 0 12m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/alertmanager-main ClusterIP 10.254.83.142 <none> 9093/TCP 91s service/alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 91s service/grafana NodePort 10.254.162.5 <none> 3000:33000/TCP 89s service/kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 90s service/node-exporter ClusterIP None <none> 9100/TCP 90s service/prometheus-adapter ClusterIP 10.254.123.201 <none> 443/TCP 91s service/prometheus-k8s ClusterIP 10.254.51.81 <none> 9090/TCP 89s service/prometheus-operated ClusterIP None <none> 9090/TCP 89s service/prometheus-operator ClusterIP None <none> 8080/TCP 12m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/node-exporter 2 2 2 2 2 beta.kubernetes.io/os=linux 90s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/grafana 1/1 1 1 89s deployment.apps/kube-state-metrics 1/1 1 1 90s deployment.apps/prometheus-adapter 1/1 1 1 91s deployment.apps/prometheus-operator 1/1 1 1 12m NAME DESIRED CURRENT READY AGE replicaset.apps/grafana-fc6fc6f58 1 1 1 89s replicaset.apps/kube-state-metrics-68865c459c 0 0 0 90s replicaset.apps/kube-state-metrics-8ffb99887 1 1 1 82s replicaset.apps/prometheus-adapter-66fc7797fd 1 1 1 91s replicaset.apps/prometheus-operator-7cb68545c6 1 1 1 12m NAME READY AGE statefulset.apps/alertmanager-main 3/3 91s statefulset.apps/prometheus-k8s 2/2 89s 7.ingress配置 [root@elasticsearch01 manifests]# cat ingress-monitor.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: prometheus-ing namespace: monitoring spec: rules: - host: prometheus-k8s.minminmsn.com http: paths: - backend: serviceName: prometheus-k8s servicePort: 9090 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: grafana-ing namespace: monitoring spec: rules: - host: grafana-k8s.minminmsn.com http: paths: - backend: serviceName: grafana servicePort: 3000 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: alertmanager-ing namespace: monitoring spec: rules: - host: alertmanager-k8s.minminmsn.com http: paths: - backend: serviceName: alertmanager-main servicePort: 9093 [root@elasticsearch01 manifests]# kubectl apply -f ingress-monitor.yaml ingress.extensions/prometheus-ing created ingress.extensions/grafana-ing created ingress.extensions/alertmanager-ing created 浏览器访问 1.nodeport方式访问http://10.2.8.65:33000 2.ingress方式访问http://grafana-k8s.minminmsn.com默认账号密码admin admin需要重置密码进入

优秀的个人博客,低调大师

Python全栈 Web(Django框架、HttpRequest,csrf跨域攻击)

Djanog 的ORM 自定义查询对象 - objects 声明一个类 EntryManager 继承自models.Manager 允许在EntryManager 的类中添加自定义函数 class EntryManager(models.Manager): def 函数名(self, 自定义参数列表): ... return ... 使用EntryManager 来覆盖 Models类中原有的objects #自定义AuthorManager类,用于覆盖Author实体类中的objects class AuthorManager(models.Manager): def age_lt

优秀的个人博客,低调大师

Python全栈 Web(Ajax JQuery-AJAX 跨域请求)

jQuery对AJAX的支持 $.ajax() 语法: $.ajax({请求参数的json对象}); 请求参数对象的属性: URL:字符串 表示异步请求地址 type:字符串 请求方式 get或post date:传递到服务端的参数 参数字符串("name=dfh&age15")或json datetype:响应回来的数据格式 HTML xml text script json jsonp:有关跨域的响应了格式 success: 回调函数 响应成功后的回调函数 error: 回调函数 请求或响应失败时的回调函数 beforSend: 回调函数 发送AJAX请求之前的回调函数 如果return False 则终止请求发送 <!DOCTYPE html> <html lang="en"> <

优秀的个人博客,低调大师

Python全栈 Web(JavaScript DOM树、DOM对象、BOM对象)

外部对象: BOM和DOM BOM: Browser Object Module 浏览器对象模型 将浏览器比喻成一个对象-window (网页初始化自动创建) 可以通过window对象操作浏览器 DOM: Document Object Module 文档对象模型 将HTML文档比喻成一个对象-document( 是window的一个属性) 可以灵活的操作网页上的内容 window对象(BOM模型): 表示浏览器 window下的属性和方法在使用时 可以省略window.直接去调用 例如: window.alert() --> alert() window.prompt()-->pormpt() ... window中的对话框: 警告框: window.alert()/alert() 输入框: window.prompt()/prompt() 确认框: window.

优秀的个人博客,低调大师

Python全栈 Web(JavaScript 运算符、流程控制)

运算符: 赋值运算符:= 算术运算符:+ - * / % 自增自减:++ -- 自增自减在单独使用时放前放后没区别 如果参与其他运算时分前缀和后缀 ++ 在后 先使用后自增 ++ 在前 先自增后使用 关系运算符 >、 >=、 <、 <=、 ==、 != ===全等/恒等 !==不全等/不恒等 关系运算符的结果都为boolean类型 数字与字符串进行比较: 实现自动转换数据类型在比较 如果转换成功 按照数字比较 失败会变成NaN与数字比较 永远都是false 字符串之间的比较: 每个字符分别按照Unicode编码比较大小 如果当前字符相同进行后移 不相同直接出结果 == != 先进行数据转换后进行比较 只进行值得比较 === !== 直接进行数据比较 进行数据转换 同时判断数据类型和值是否完全相等 逻辑运算符: !非 对现有条件进行取反 非真

优秀的个人博客,低调大师

Python全栈 Web(CSS样式表、选择器)

CSS层叠样式表: (Cascading Style Sheet) 作用: 装饰和美化页面元素,实现网页的排版布局 CSS为HTML标记语言提供了一种样式描述,定义了其中元素的显示方式。 CSS在Web设计领域是一个突破。利用它可以实现修改一个小的样式更新与之相关的所有页面元素 CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力 使用: 1.行内样式/内联样式: 特点: 在具体的标签中使用参style属性,引入CSS的样式的代码 语法: <标签 style=“CSS” 样式声明> 1)样式声明/CSS语句: 对当前元素添加样式 语法: CSS属性:值; 2) CSS的样式声明可以是多条 <标签 style=“属性:值; 属性:值;”> 常见的CSS属性: 1》.设置字体大小 属性: funt-size 取值: 以像素为单位的数值 默认16px 2》.设置字体颜色 属性: color 取值: 颜色的英文单词 3》.设置背景颜色: 属性: background-color 取值: 颜色的英文单词 2.文档内嵌/内部样式表: 特点: 将CSS代码与具体的标签相分离,在HTML文档中使用<style></style>标签引入CSS代码 语法: <style> 选择器1 选择器2 选择器3 ... </syle> 选择器: 使用文档内嵌方式引入CSS样式表时,实现了结构与样式分离 凡是需要自己定义选着器来匹配文档中元素 与其他应用样式 作用: 匹配文档原数为其应用样式 语法: 选择器实际上由两部分组成 选择器(符){ 属性:值; 属性:值; } 标签选择器/元素选择器: 使用标签名作为选择符,匹配文档中所有的标签,并应用样式 注意: <style></style> 可以写在任意位置 但是基于样式的优先原则,一般写在head里 3.外链方式/外部样式表: 定义外部的.css文件,在HTML中引入即可 真正实现文档与样式表的分离 语法: 在外部样式表中使用选着器来定义样式: 在HTML中用<link>引入CSS文件 样式表的特征: 继承性: 大部分的CSS属性都是可以被继承的 子元素或后代元素都是可继承父元素中的样式的 所有的文本属性都可以被继承 块元素的宽度与父元素保持一致 层叠性: 允许为元素定义多个样式,共同起作用 样式表的优先级: 低~高 1.浏览器的缺省设置:浏览器默认样式 2.文档内嵌/外链方式:在不发生样式冲突时:共同起作用,不冲突时:后来者居上 3.行内样式的优先级最高 CSS的选着器: 作用: 规范页面中哪些元素能够应用声明好的样式 目的: 匹配页面原素 详解: 1.标签选择器/元素选择器: 特点: 将标签名作为选择符,来匹配文档中所有的该标签,包含后代元素 语法: p{ color: red; text-decoration: none; } 2.类选择器: 特点: 通过元素的class属性值进行匹配 语法: .c1{ 样式 } <p class="c1">文本</p> 类选择器的结合使用: 1. 标签名.类名 表示在指定的标签中匹配的class属性值对应的元素 标签名一定要写在前面 语法: p.c1{ 样式 } 2. .类名1.类名2(不常用) 3. 标签中使用两个选择器的样式 语法: <p class="类名1 类名2"> 3. ID 选择器: 作用: HTML中所有的元素都有一个ID属性,主要用来表示元素在文档中的标志具有唯一性 通过元素的ID属性值进行匹配 *通常网页中外围的结构化标签。都使用ID进行标识 具有唯一性 语法: #nav{ 样式 } <div id="nav">导航条</div> 4.群组选择器: 作用: 为多个选择器设置共同的样式 语法: div,h1,...{ 样式 } <div></div> <h1></h1> ... 5.后代选择器: 作用: 依托于元素的后代关系匹配元素 既包含直接子元素和后代子元素 语法: 选择器1 选择器2..{ 样式 } 在选择器1对应的元素匹配后代元素,后代元素必须满足选择器2 6.子代选择器: 作用: 依托元素的子代关系进行匹配 只匹配直接子元素 语法: 选择器1>选择器2{ 样式 } 在选择器1对应的元素中匹配直接子元素 7.伪类选择器: 1)超链接伪类选择器 2)动态伪类选择器 主要针对元素的不同状态去设置样式 超链接的不同状态 访问前:link 访问后:visited 激活(鼠标按住不放):active 鼠标滑过:hover 其他元素: 鼠标滑过 激活 表单控件: 获取焦点时的状态:focus 对密码框和文本框而言 当用户输入时都视为获取焦点 3)与其他选择器结合使用 设置元素在不同状态下的样式 语法: a:link{ color:black; } 如果要给超链接添加伪类选择器 必须按照以下顺序书写 link visited hover active 选择器的优先级: 当多个选择器的样式同时应用到一个元素上时 要按照不同选择器的优先级来应用样式 判断选择器的优先级 主要看选择器的权重(权值) 选择器 权值 标签选择器 1 类选择器/伪类 10 id选择器 100 行内选择器 1000 如果是复杂选择器(后代,子代) 最终权值是是各选择器之和 尺寸单位与颜色取值 尺寸单位 px 像素单位 默认单位 % 参照父元素对应属性的值进行获取 in inch 英寸 1in = 2.54cm pt 榜 1pt = 1/72 in cm mm 颜色单位 1.英文单词 2.rgb(r,g,b) 表示颜色 取值: 每一种三原色的取值范围:0~255 3.rgba(r,g,b,alpha) 设置颜色 还可以调整透明度 三原色的取值范围:0~255 alpha透明度取值:1/0 0:表示透明 1:表示不透明 取小数表示半透明。整数的0可以省略不写 0.5/.5 4.十六进制表示颜色: 三原色的取值为0~255 取值转换为十六进制 表示颜色: 长十六进制 6位表示方法 每两位为一组 代表一种三原色 #ff0000表示红色 短十六进制 3位表示 浏览器会自动对每一位进行重复补全,最终补全为十六进制 元素分类 HTML中标签分为 1. 块元素 特点 : 1. 独占一行,不与其他元素共行显示 2. 可以手动设置宽高 et : div h1 p ul ol table form 2. 行内元素 特点 : 1. 可以与其他元素或者文本共行显示 2. 不能手动设置宽高,元素的大小由内容决定 et : span i b label u s sub sup 3. 行内块元素 特点 : 既可以与其他元素共行显示,也可以手动设置宽高 et : img input 属性 : 可以通过 vertical-align设置行内块元素左右元素与其的垂直对齐方式 取值 : top / middle / bottom 注意 :vertical-align只在行内块元素中使用 行内元素是可以共行显示的,但是如果代码中出现了换行,页面最终效果上,行内元素之间会有空隙

优秀的个人博客,低调大师

Python全栈 项目(电子词典、协程、pdb调试)

什么是项目? 软件项目 : 实现一定完整性功能的代码 软件项目的开发流程 需求分析 概要设计 项目规划 详细设计 编码测试 项目测试 调试修改 项目发布 后期维护更新 需求分析 : 确定用户的真实需求 1. 确定用户的真实需求,即项目的基本功能 2. 对项目的难度和可行性进行分析 3. 完成需求分析文档,进行确认 概要设计 : 对项目进行整体分析,初步确定技术方向 1. 整体设计,确定项目架构 2. 确定项目功能模块划分 3. 确定大的技术方向 4. 编写项目概要设计文档,开发流程图 项目规划 : 确定项目分工,按照项目时限进行规划 1. 确定开发顺序 2. 确定开发的时间轴和里程碑 3. 人员的分配 4. 完成甘特图和思维导图指导开发 详细设计 : 项目具体的开发设计,完成设计手册 1.根据开发内容,形成详细设计文档 思路, 逻辑流程 ,功能说明,技术点说明,数据结

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册