Skip to content

Instantly share code, notes, and snippets.

@niusmallnan
Last active May 23, 2023 03:39
Show Gist options
  • Save niusmallnan/71cb266f5124703ce507bc179a519807 to your computer and use it in GitHub Desktop.
Save niusmallnan/71cb266f5124703ce507bc179a519807 to your computer and use it in GitHub Desktop.
setup minik3s for the single host
#!/bin/bash
cat > /etc/default/k3s <<EOF
GOGC=10
EOF
chmod 600 /etc/default/k3s
K3S_CHANNEL=v1.26
# --disable-helm-controller
curl -sfL https://get.k3s.io | \
INSTALL_K3S_CHANNEL=${K3S_CHANNEL} \
K3S_TOKEN=SUSERancherGC \
sh -s - server \
--disable-cloud-controller \
--disable-network-policy
# k3s process RSS memory
ps eo user,pid,vsz,rss,%cpu,%mem $(pgrep k3s) | tail -1 | awk '{$4=int($4/1024)"M";}{ print $4;}'
ps eo user,pid,vsz,rss,%cpu,%mem $(pgrep -f k3s) | tail -n +2 | awk '{$4=int($4/1024)"M";}{ print $4;}'
# k3s cgroups memory
systemd-cgls --no-pager /system.slice/k3s.service
systemd-cgtop -m -n 3 /system.slice/k3s.service | tail -1 | awk -F ' ' '{print $4}'
# kube-pods cgroups memory
systemd-cgls --no-pager /kubepods.slice
systemd-cgtop -m -n 3 /kubepods.slice | head -1 | awk -F ' ' '{print $4}'
# drop cgroup page cache
echo 1 > /proc/sys/vm/drop_caches
# check cgroup version
# for cgroup v2, the output is cgroup2fs
# fcgroup v1, the output is tmpfs
stat -fc %T /sys/fs/cgroup/
# Process VmRSS(RSS) = Process RssAnon + Process RssFile + Process RssShmem
cat /proc/$(pgrep metrics-server)/status | grep VmRSS | awk '{$2=int($2/1024)"M";}{ print $2;}M'
cat /proc/$(pgrep metrics-server)/status | grep RssAnon | awk '{$2=int($2/1024)"M";}{ print $2;}M'
cat /proc/$(pgrep metrics-server)/status | grep RssFile | awk '{$2=int($2/1024)"M";}{ print $2;}M'
# ubuntu 22.04, kernel 5.19.0-1025-aws, cgroupv2
# cgroupv2 memory: https://docs.kernel.org/admin-guide/cgroup-v2.html#memory
cat /sys/fs/cgroup/$(cat /proc/$(pgrep metrics-server)/cgroup | awk -F ':' '{print $3}')/memory.current | awk '{$1=int($1/1024/1024)"M";}{ print $1;}'
# sle micro 5.3, kernel 5.14.21-150400.24.41-default, cgroupv1
# cgroupv1 memory: https://docs.kernel.org/admin-guide/cgroup-v1/memory.html#accounting-details
# check https://docs.kernel.org/admin-guide/cgroup-v1/memory.html#usage-in-bytes
cat /sys/fs/cgroup/memory/$(cat /proc/$(pgrep metrics-server)/cgroup | grep memory | awk -F ':' '{print $3}')/memory.usage_in_bytes | awk '{$1=int($1/1024/1024)"M";}{ print $1;}'
# check https://docs.kernel.org/admin-guide/cgroup-v1/memory.html#stat-file
cat /sys/fs/cgroup/memory/$(cat /proc/$(pgrep metrics-server)/cgroup | grep memory | awk -F ':' '{print $3}')/memory.stat | grep "^rss " | awk '{$2=int($2/1024/1024)"M";}{ print $2;}'
#!/bin/bash
#
# test with v1.19.5+k3s1
#
mkdir -p /opt/cni/bin
curl -L https://github.com/containernetworking/plugins/releases/download/v0.9.0/cni-plugins-linux-amd64-v0.9.0.tgz | tar xvz -C /opt/cni/bin/
mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-mynet.conf <<EOF
{
"cniVersion": "0.3.1",
"name": "mynet",
"type": "bridge",
"bridge": "mynet0",
"isDefaultGateway": true,
"forceAddress": false,
"ipMasq": true,
"hairpinMode": true,
"ipam": {
"type": "host-local",
"subnet": "10.42.0.0/24"
}
}
EOF
cat >/etc/cni/net.d/99-loopback.conf <<EOF
{
"cniVersion": "0.3.1",
"name": "lo",
"type": "loopback"
}
EOF
#--disable-scheduler \
./k3s server \
--disable servicelb,traefik,local-storage,metrics-server,coredns \
--disable-cloud-controller \
--disable-network-policy \
--flannel-backend none \
--disable-kube-proxy \
--kube-apiserver-arg profiling=false \
--kube-apiserver-arg default-watch-cache-size=10 \
--kube-apiserver-arg enable-priority-and-fairness=false \
--kube-controller-manager-arg controllers=*,-cronjob,-daemonset,-statefulset,-job,-horizontalpodautoscaling \
--kube-controller-manager-arg concurrent-deployment-syncs=1 \
--kube-controller-manager-arg concurrent-endpoint-syncs=1 \
--kube-controller-manager-arg concurrent-gc-syncs=2 \
--kube-controller-manager-arg concurrent-resource-quota-syncs=1 \
--kube-controller-manager-arg concurrent-namespace-syncs=2 \
--kube-controller-manager-arg concurrent-replicaset-syncs=1 \
--kube-controller-manager-arg concurrent-service-endpoint-syncs=1 \
--kube-controller-manager-arg concurrent-service-syncs=1 \
--kube-controller-manager-arg concurrent-serviceaccount-token-syncs=1 \
--kube-controller-manager-arg concurrent-statefulset-syncs=1 \
--kube-controller-manager-arg concurrent-ttl-after-finished-syncs=1 \
--kube-controller-manager-arg concurrent_rc_syncs=1 \
--kube-controller-manager-arg enable-taint-manager=false \
--kube-controller-manager-arg profiling=false \
--kube-controller-manager-arg leader-elect=false \
--kubelet-arg enable-server=false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment