Kubernetes Podのカーネルパラメータ調整
2764 ワード
背景
uwsgiを使用してdjangoのアプリケーションを配備し、Kubernetesを使用して実行しますが、実行後は常に次のエラーが報告され、その後ネット上でクエリーされました.システムカーネルパラメータ(net.core.somaxconn)が小さすぎて、デフォルトは128です.そのため、大きく調整する必要があります.
uwsgi_proto_uwsgi_parser(): Resource temporarily unavailable [proto/uwsgi.c line 40]
概要
コンテナのシステムメモリパラメータはechoではありません 指定したファイルに値を付け、sysctl-p 有効になります.dockerで で使用できます. 以下のコマンドで調整します.
しかし、このK 8 Sでは、手順が少し複雑で、主にkubeletの起動パラメータを修正する必要があります.
ステップ
1. kubeletのサービスファイルの変更
vi /etc/systemd/system/kubelet.service、起動コマンドに追加 --allowed-unsafe-sysctls=net.*
2. クbeletを再起動
3. Podにメモリパラメータを追加して、私は直接Deploymentの中で変更して、securityContext この中で修正するカーネルパラメータを定義し、複数あればsysctlsの下に追加すればいいです.
nginx.yaml
4. このDeploymentを実行
5. コンテナに入ってカーネルパラメータを表示する
uwsgiを使用してdjangoのアプリケーションを配備し、Kubernetesを使用して実行しますが、実行後は常に次のエラーが報告され、その後ネット上でクエリーされました.システムカーネルパラメータ(net.core.somaxconn)が小さすぎて、デフォルトは128です.そのため、大きく調整する必要があります.
uwsgi_proto_uwsgi_parser(): Resource temporarily unavailable [proto/uwsgi.c line 40]
概要
コンテナのシステムメモリパラメータはechoではありません 指定したファイルに値を付け、sysctl-p 有効になります.dockerで で使用できます. 以下のコマンドで調整します.
docker run --sysctl net.core.somaxconn=1000 nginx
しかし、このK 8 Sでは、手順が少し複雑で、主にkubeletの起動パラメータを修正する必要があります.
ステップ
1. kubeletのサービスファイルの変更
vi /etc/systemd/system/kubelet.service、起動コマンドに追加 --allowed-unsafe-sysctls=net.*
[root@ai-test-k8s07 ~]# cat /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
[Service]
WorkingDirectory=/var/lib/kubelet
ExecStartPre=/bin/mount -o remount,rw '/sys/fs/cgroup'
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/memory/system.slice/kubelet.service
ExecStartPre=/bin/mkdir -p /sys/fs/cgroup/pids/system.slice/kubelet.service
ExecStart=/opt/kube/bin/kubelet \
--config=/var/lib/kubelet/config.yaml \
--cni-bin-dir=/opt/kube/bin \
--cni-conf-dir=/etc/cni/net.d \
--hostname-override=10.215.0.24 \
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
--network-plugin=cni \
--pod-infra-container-image=mirrorgooglecontainers/pause-amd64:3.1 \
--root-dir=/var/lib/kubelet \
--v=2 \
--allowed-unsafe-sysctls=net.*
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
2. クbeletを再起動
systemctl daemon-reload && systemctl restart kubelet
3. Podにメモリパラメータを追加して、私は直接Deploymentの中で変更して、securityContext この中で修正するカーネルパラメータを定義し、複数あればsysctlsの下に追加すればいいです.
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
securityContext:
sysctls:
- name: net.core.somaxconn
value: "1000"
- name: net.ipv4.tcp_keepalive_time
value: "1200"
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
4. このDeploymentを実行
kubectl apply -f nginx.yaml
5. コンテナに入ってカーネルパラメータを表示する
[root@master ~]# kubectl exec -it nginx-57b5f658d-44nq4 bash
root@nginx-57b5f658d-44nq4:/# cat /proc/sys/net/core/somaxconn
1000