0%

通过k8s配置wordpress后,上传大文件会出现“413 Request Entity Too Large”的错误。可通过下面方式修正

  1. 如果有外部nginx做转发,需要设置 client_body_max_size

    1
    2
    3
    http {
    client_max_body_size 0; # 设置为0代表不做限制
    }
  2. WordPress的Ingress也需要配置 client_max_body_size

    1
    2
    3
    4
    5
    6
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: wp-ingress
    annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 512m
  3. 下载 Increase Maximum Upload File Size 插件/或配置uploads.ini

配置uploads.ini方式

① 创建uploads.ini

1
2
3
4
5
file_uploads = On
memory_limit = 512M
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 3600

② 添加configMap配置

1
kubectl create configmap wp-uploads-ini --from-file uploads.ini

③ 映射到文件 /usr/local/etc/php/conf.d/uploads.ini

1
2
3
4
5
6
7
8
9
10
11
containers:
- image: wordpress:5.4.2-apache
...
volumeMounts:
- name: wp-config-uploads-ini
mountPath: /usr/local/etc/php/conf.d/uploads.ini
subPath: uploads.ini
volumes:
- name: wp-config-uploads-ini
configMap:
name: wp-uploads-ini

环境说明:作者使用的环境是 Debian 10,K8S的容器运行时是 CRI-O。默认使用root账号,所有指令都在root下执行。

背景

​ 在使用Kubernetes时,总会需要提供后端存储能力。而NFS Provisioner是一个不错的解决方案。

NFS Provisioner 简介

​ NFS Provisioner 是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。

持久卷被配置为:namespace−{pvcName}-${pvName}。

有了这样的特性支持,我们只需要配置服务需要的PVC,设定好资源,就能动态分配好存储空间。不过这里并没有考虑高可用等问题。这种简便的方式个人觉得用在分配一些需要数据持久化但又不是十分重要的场景下比较合适。例如一些文件数据的缓存等。

安装配置 NFS 服务

1
2
3
4
5
6
7
8
9
10
# 安装nfs client 与 server
apt-get install nfs-kernel-server nfs-common
# 创建存储目录
mkdir -p /nfs-homespace/kubernetes
# edit /etc/exports
# (IP) 是服务器的访问ip,可以是内网ip,也可以是公网
/nfs-homespace/kubernetes 10.96.0.0/16(rw,sync,no_subtree_check,no_root_squash)
/nfs-homespace/kubernetes (IP)(rw,sync,no_subtree_check,no_root_squash)
# restart nfs-kernel-server
service nfs-kernel-server restart

配置 NFS-Client-Provisioner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 拉取配置文件
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
# 其实需要用到的只是 deploy 目录里面的 rbac.yaml class.yaml deployment.yaml
# 复制一份,里面可按自己需要修改 namespace,或者直接放在default里也可以
cp -r nfs-subdir-external-provisioner/deploy ./deploy
# 配置
cd deploy
# rbac权限管理
kubectl apply -f rbac.yaml
# nfs-client-provisioner 与 storageclass
kubectl apply -f class.yaml -f deploment.yaml

# 测试是否成功
kubectl apply -f test-claim -f test-pod

image-20201228020909755

image-20201228020935917

在 NFS 服务器上查看,生成了相应的数据目录,成功 : )

image-20201228021032143

期间遇到的问题

PVC 一直处于 Pending 状态, 通过查log,发现错误信息 selfLink was empty, can’t make reference。google查了下,需要配置 feature-gates 的 RemoveSelfLink=false (默认建议是true,其实应该是master机器配置pod才有的问题)

1
2
3
4
5
6
7
8
9
10
11
# 动态修改 fature-gates,追加 RemoveSelfLink=false
# Edit /etc/kubernetes/manifests/kube-apiserver.yaml
# 追加
- --feature-gates=RemoveSelfLink=false
# kubelet会监控文件,修改后,会自动终止api-server,重新配置启动。这时候会出现服务停顿,要注意。
# 服务恢复后,重新配置一次 deploment.yaml
kubectl delete -f deploment.yaml
kubectl apply -f deploment.yaml

# 再次测试,成功~
kubectl apply -f test-claim -f test-pod

image-20201228021400100

(图:配置 feature-gates参数)

参考

https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

纯记录…

问题缘由

一直用着Flutter v1.9的版本,这么久,看到官方已经发布了v1.12的稳定版本,于是打算升级一下。

升级操作 (就是切换到flutter目录,拉最新代码切换到目标版本)

1
2
3
4
$ cd $FLUTTER_ROOT
$ git pull
$ git checkout v1.12.13+hotfix.7
$ flutter update-packages

然后在xcode中构建release运行。

发现报错,白屏。

错误信息大致如下。

1
Failed to find snapshot: /var/containers/Bundle/Application/XXXXXXX-XXX-XXX-XXX/Runner.app/Frameworks/App.framework/flutter_assets/kernel_blob.bin

明显是flutter内核没更新导致的问题。


解决方法:

  1. 执行指令清理 flutter clean

    1
    $ flutter clean
  2. 移除ios目录中已经生成的framework

    1
    2
    3
    $ rm -rf ios/Flutter/App.framework
    $ rm -rf ios/Flutter/Flutter.framework
    $ rm -rf ios/.symlinks/flutter
  3. 重新构建

    1
    $ flutter build ios --release
  4. 回到Xcode重新releasebuild,已经ok了。