python-scrapy
MAC安装
1 | pip3 install scrapy #安装scrapy |
1 | pip3 install scrapy #安装scrapy |
准备一个弹性伸缩,用于管理ECS虚拟机
伸缩组实例配置好ecs的配置(如果是学习可以采用抢占式虚拟机节约成本)
Eg: ecs.hfc6.large(ecs.c7a.largeamd也可以了)抢占式2vCPU+4GiB+centos7.9 64为,可以挂载同一个共享数据盘,用于存储配置数据
配置证书,采用证书cer
登录
端口要求:安全组开放(因为用的一个安全组,所以组内连通策略:组内互通)因此不需要设置
服务 | 端口 | |
---|---|---|
ssh | 22 | TCP |
etcd | 2379-2380 | TCP |
apiserver | 6443 | TCP |
calico | 9099-9100 | TCP |
bgp | 179 | TCP |
nodeport | 30000-32767 | TCP |
master | 10250-10258 | TCP |
dns | 53 | TCP/UDP |
local-registry(离线环境需要) | 5000 | TCP |
local-apt(离线环境需要) | 5080 | TCP |
rpcbind( 使用 NFS 时需要) | 111 | TCP |
ipip(Calico 需要使用 IPIP 协议) | IPENCAP / IPIP | |
metrics-server | 8443 | TCP |
1 | yum update -y |
1 | yum update -y |
1 | #没有之前的部署文件,通过下面命令生产部署文件,文件名sample.yaml,我修改了名字为add-node.yaml |
1 | #给节点 node1 增加一个污点,它的键名是 key1,键值是 value1,效果是 NoSchedule。 这表示只有拥有和这个污点相匹配的容忍度的 Pod 才能够被分配到 node1 这个节点。 |
kk安装多节点集群的时候,报如下错误:
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s [kubelet-check] Initial timeout of 40s passed.
解决:amd的主机有问题,换了一个inter芯片的主机就OK了,新解决方法安装前,执行yum update -y
一个节点宕机后,添加一个新的节点替代,执行kk添加节点命令时报如下错误:
etcd health check failed: Failed to exec command: sudo -E /bin/bash -c "export ETCDCTL_API=2;export ETCDCTL_CERT_FILE='/etc/ssl/etcd/ssl/admin-node1.pem';export ETCDCTL_KEY_FILE='/etc/ssl/etcd/ssl/admin-node1-key.pem';export ETCDCTL_CA_FILE='/etc/ssl/etcd/ssl/ca.pem';/usr/local/bin/etcdctl --endpoints=https://192.168.14.16:2379,https://192.168.14.17:2379,https://192.168.14.20:2379 cluster-health | grep -q 'cluster is healthy'
解决:先删除etcd的异常节点,在重新执行kk添加etcd及master节点
执行kubectl drain node3 --force --ignore-daemonsets --delete-emptydir-data
删除节点时报如下错误:
I0705 16:41:20.004286 18301 request.go:665] Waited for 1.14877279s due to client-side throttling, not priority and fairness, request: GET:https://lb.kubesphere.local:6443/api/v1/namespaces/kubesphere-monitoring-system/pods/alertmanager-main-1
解决:强制取消,执行kubectl delete node node3
即可
重建节点之后,新加的节点无法调度,报如下错误:
0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient cpu.
解决:在集群节点查看污点,然后执行kubectl taint nodes node4 node-role.kubernetes.io/master=:NoSchedule-
删除污点
重建节点之后组件监控prometheus-k8s
容器事件提示如下错误:
MountVolume.NewMounter initialization failed for volume "pvc-60891ee0-ba6c-4df4-b381-6e542b27d3a7" : path "/var/openebs/local/pvc-60891ee0-ba6c-4df4-b381-6e542b27d3a7" does not exist
解决:在master节点执行,以下方法并不能解决,待验证存储卷是否是分布式的?
1 | #在/etc/kubernetes/manifests/kube-apiserver.yaml |
使用amd主机安装kubesphere,一直卡在Please wait for the installation to complete:
,查看pod日志,发现calico-node-4hgbb
的pod提示如下错误:
1 | Type Reason Age From Message |
参考: kubernetes v1.24.0 install failed with calico node not ready #1282
解决:resolved by change calico version, maybe calico verison should update from v3.20.0 to v3.23.0
1 | #删除calico相关pod |
系统组件
->监控
->prometheus-k8s
->事件
->错误日志:0/3 nodes are available: 3 Insufficient cpu.
解决:修改工作负载
->有状态副本集
->prometheus-k8s
总结:requests.cpu
设置为0.5代表一个cpu的一半,0.5等价于500m,读做”500 millicpu”(五百毫核)
官方说明:Kubernetes 中的资源单位
1 | #重启之后需要重新修改 |
执行kubectl top node
提示error: Metrics API not available
错误
解决:1.未安装修改kubesphere
部署配置文件,已安装登录kubesphere点击定制资源定义
->ClusterConfiguration
->ks-installer
修改。
1 | metrics_server: |
calico/node is not ready: felix is not ready: readiness probe reporting 503
再次尝试之后calico/node is not ready: felix is not ready: Get "http://localhost:9099/readiness": dial tcp [::1]:9099: connect: connection refused
记一次Error from server (BadRequest): container "calico-node" in pod "calico-node-bfmgs" is waiting to start: PodInitializing
解决及排查过程:(参考:Kubernetes Installation Tutorial: Kubespray)
1 | [root@master ~]# kubectl get nodes |
k8s启动服务提示Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "5bc537d4925604f98d12ec576b90eeee0534402c6fb32fc31920a763051e6589": plugin type="calico" failed (add): error getting ClusterInformation: connection is unauthorized: Unauthorized
解决:原因服务器时间不对,导致授权异常,排查那个节点的时间不对,重新同步时间,然后重启对应节点的calico服务
1 | [root@node-102 ~]# timedatectl |
记一次,服务之间通过servername无法访问提示Caused by: java.net.UnknownHostException: system-business
,
1 | [root@master ~]# kubectl get pods -o wide -n kube-system |
分析原因:
公司部分网络出现访问慢,出现过114.114.114.114的dns不通,怀疑是公司网络导致的
初步排查:
1 | 三天节点的dns都不一样: |
应该是主节点的dns都无法访问,导致主节点的nodelocaldns无法正常启动,导致和其他节点dns失联(待验证)
解决:
config-kubernetes-1.23.7.yaml
部署文件
1 | apiVersion: kubekey.kubesphere.io/v1alpha2 |
config-kubesphere3.3.0-kubernetes1.23.7.yaml
部署文件
1 | apiVersion: kubekey.kubesphere.io/v1alpha2 |
add-node.yaml
1 | apiVersion: kubekey.kubesphere.io/v1alpha2 |
1 | #查询所有pvc |
pv和sc都属于集群所有,没有namespace之分,只有pvc才各属于每个空间的资源
reclaimPolicy两种常用取值:Delete、Retain;
Delete:表示删除PVC的时候,PV也会一起删除,同时也删除PV所指向的实际存储空间;
Retain:表示删除PVC的时候,PV不会一起删除,而是变成Released状态等待管理员手动清理;
volumeBindingMode
字段控制了卷绑定和动态制备应该发生在什么时候。 当未设置时,默认使用 Immediate
模式。
Immediate
模式表示一旦创建了 PersistentVolumeClaim 也就完成了卷绑定和动态制备。 对于由于拓扑限制而非集群所有节点可达的存储后端,PersistentVolume 会在不知道 Pod 调度要求的情况下绑定或者制备。
集群管理员可以通过指定 WaitForFirstConsumer
模式来解决此问题。 该模式将延迟 PersistentVolume 的绑定和制备,直到使用该 PersistentVolumeClaim 的 Pod 被创建。 PersistentVolume 会根据 Pod 调度约束指定的拓扑来选择或制备。 这些包括但不限于资源需求、 节点筛选器、 Pod 亲和性和互斥性、 以及污点和容忍度。
创建pvc:nginx-pvc.yaml
文件
1 | apiVersion: v1 |
执行kubectl apply -f nginx-pvc.yaml
,可以通过kubectl get pvc
进行查看
创建pod:nginx-pod-volumes.yaml
文件
1 | apiVersion: v1 |
执行kubectl apply -f nginx-pod-volumes.yaml
,可以通过kubectl get po
进行查看
创建对应的服务,暴露端口,见k8s 部署基础
访问nginx服务
通过kubectl get pv
和kubectl describe pv pvc-...
查看source:path的路径/var/openebs/local/pvc-***
该路径在其中一个节点,找到有该路径的节点,在该目录新建一个index.html
,里面输入hello pvc
重新访问nginx服务,就能在网页上看到hello pvc
了
1 | kind: PersistentVolumeClaim |
1 | kind: Pod |
1 | Name: ks-jenkins #pvc名字 |
1 | Name: pvc-fe2e8742-a736-4134-b89a-85eef0b6edce #pv名字 |
1 | Name: local |
错误信息,申明错误的访问模式,访问模式由sc存储类定义,local存储类不支持该访问模式
1 | Warning ProvisioningFailed 48s (x4 over 2m33s) openebs.io/local_openebs-localpv-provisioner-7bbb56d7dc-zsq5k_8a90d62c-5e9f-4544-a7bb-50ca898c55a0 failed to provision volume with StorageClass "local": Only support ReadWriteOnce access mode |
使用local存储卷时,节点不会从一个节点游走到另一个节点,因此节点挂机,该服务直接不可用了,损失了高可用,这是因为sc限制了访问模式为ReadWriteOnce
,影响了节点亲和性。
1 | $ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 |
1 | #官方仓库 |
1 | # mac 安装helm |
模版目录结构
1 | mychart/ |
helm upgrade [RELEASE] [CHART] [flags]
常见参数:
-i
, --install
:如果版本不存在就运行安装--history-max
<int>
:限制每个版本保存的最大修订数。使用 0 表示无限制(默认 10)-n
, --namespace
<string>
:指定命名空间范围-f
, --values
<strings>
:在 YAML 文件或 URL 中指定值(可以指定多个)--set
stringArray
: 在命令行设置值(可以用逗号指定多个或单独的值:key1=val1,key2=val2)1 | #env环境变量 |
1 | {{- with .Values.nodeSelector }} #with可以指定变量范围 |
1 | #mac安装helm |
helm Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress
错误原因:是因为历史更新有未成功的,导致一直Preparing upgrade
解决:执行下面命令回退版本,然后重新跑流水线即可。
1 | [root@k8s-master-242-10 ~]# helm history -n namespaseName server-name |
1 | //----??表达式---- |
1 | class DraftBean { |
提示语法错误,检查是否有const
修饰,他不能修饰可变的东西。
pubspec.yaml
:依赖包管理文件,添加依赖后,点击`Pub get可以进行下载添加的依赖。
1 | name: draft #包名或项目名 |
TextField 输入框
1 | child: TextField( |
Text 文本框
1 | child: Text("欢迎登录"), |
TextButton 按钮
1 | child: TextButton( |
Autocomplete 自动补齐输入框框(带下拉搜索输入框)
1 | child: Autocomplete<Soft>( |
Image图片显示
1 | Image(image: NetworkImage('url')) |
GestureDetector 给一个控件添加一个事件
1 | GestureDetector( |
Column
:列布局
Row
:行布局
1 | Column( //或者Row布局 |
CustomScrollView:滚动布局
1 | 1. 继承State |
1 | import 'package:flutter/material.dart'; |
1 | import 'package:flutter/material.dart'; |
1 | //跳转到Home页面 |
1 | //-----主页面 |
方法一:定一个变量,然后通过输入框的onChanged
设置值到变量,然后获取
方法二:设置controller
1 | TextEditingController userNameController =TextEditingController(); //定义controller |
fluttertoast: ^8.0.9
import 'package:fluttertoast/fluttertoast.dart';
Fluttertoast.showToast(msg: "请登录");
在pubspec.yaml
的dependencies
下添加依赖dio: ^4.0.6
,然后点击文件顶部Pub get
更新依赖
导入包import 'package:dio/dio.dart';
简单使用
1 | /// 登录请求 |
1 | ///选择图片文件 |
1 | File compressedFile = await FlutterNativeImage.compressImage(file.path, |
工具类用Sputil
如下错误:
1 | Error: Not a constant expression. |
解决:Not a constant expression
关键字const
,使用const
修饰的变量及方法不能包含可变的,所以onPressed
就不可以使用了,const
关键字使用要点
错误:Navigator operation requested with a context that does not include a Navigator.
解决:启动类添加MaterialApp
包括,修改如下
1 | void main() { |
flutter 如何动态更新界面或控件?
解决:使用setState((){})
flutter如何重新加载主页?
解决:使用Navigator.pushReplacementNamed();
或Navigator.popAndPushNamed()
flutter的File Picker如何选择相册?
解决:设置type
为FileType.image
,完整示例FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.image);
dio如何开启网络请求日志?
解决:添加过滤器_dio.interceptors.add(LogInterceptor(responseBody: true, requestBody: true)); //debug开启权限日志
flutter如何获取输入框的值,或者动态修改输入框的值?
解决:添加公共变量TextEditingController versionController = TextEditingController();
然后在TextField设置controller: versionController,
最后在其他地方获取或设置输入框的值versionController.text
Row
布局如何按比例分配空间大小?
解决:添加Expanded
包装控件,然后设置flex比例,例如1:2
如何修改输入框提示文字的颜色?
解决:添加labelStyle: TextStyle(color: Colors.amberAccent)
属性
1 | flutter run --release |
~/flutter
~/.zshrc
末尾添加export PATH="~/flutter/bin:$PATH"
~/flutter
open -a Simulator
Flutter->Opne IOS module in Xcode
flutter config --enable-linux-desktop
Xcode-runner-setting-team
添加苹果账号不受信任的开发者
,点击设置-通用-VPN与设备管理-添加信任
In iOS 14+,debug mode Flutter apps can only
执行flutter run --release
进行发布安装找不到ios设备,健康检查提示CocoaPods not installed
解决:执行sudo gem install cocoapods
安装cocoapods
1 | #无sudo安装,报错 |
健康检查提示`HTTP host “https://maven.google.com/" is not reachable. Reason: An error
occurred while checking the HTTP host: Operation timed out
✗ HTTP host “https://cloud.google.com/" is not reachable. Reason: An error
occurred while checking the HTTP host: Operation timed out`
解决:在~/.zshrc
添加环境如下变量
1 | # 国内用户需要设置 |
(该问题似乎未解决)提示错误Searching for inspections failed: undefined method 'map' for nil:NilClass
解决:执行sudo arch -x86_64 gem install ffi
执行flutter doctor
提示
1 | [!] Proxy Configuration |
解决:执行vim .zshrc
添加export NO_PROXY=localhost,127.0.0.1
然后保存。
苹果IOS:xcode提示“codesign 想要访问您的钥匙串中的密钥”
解决(最终采用):钥匙串访问APP=>登录=>我的证书=>双击“Apple Development:xxx“(这个选择系统,使用的签名的开发证书)=>访问控制=>允许所有应用
解决方案二(采用):一直输用户名和密码大概8次左右
出现错误Error (Xcode): File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
解决:将Podfile
文件内容末位post_install do |installer|..... end
替换为
1 | post_install do |installer| |
在ios目录,执行命令pod install
Accept-Encoding
同时携带br
和gzip
时,仅Brotli压缩生效。错误原因:请求头设置了headers.put("Accept-Encoding","gzip, deflate, br");
解决方法:
br
Accept-Encoding
中去掉br
APP ID
、APP Key
和 Master Key
LEAN_ID
, LEAN_KEY
和 LEAN_MASTER_KEY
值分别为 APP ID
, APP KEY
, Master Key
。在部署脚本文件添加命令npm install @waline/hexo-next
在theme/next/_config.yml
配置文件添加如下内容
1 | # Waline |
版本太低问题,升级到next 8+
1 | Error: Unable to call `next_data`, which is undefined or falsey |
因博客修改了域名,以前收录的旧域名需要自动重定向到新域名,而且百度和google需要添加新站点收录。因为博客采用netlify部署的。
在阿里云域名修改新域名解析
修改netlify里面的https认证及新域名添加
兼容旧域名,添加310重定向,修改hexo博客目录下的netlify.toml
文件,增加如下内容
1 | [[redirects]] |
修改百度收录并在网站改版里面添加旧域名和新域名的映射
修改Google收录