一键Prepare脚本:for ubuntu 23.04
#!/bin/bash
set -e
# 网络转发
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay && modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf << EOF
# ipv4
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
# ipv6
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
# swap
vm.swappiness = 0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
# 关闭Swap
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab && sysctl -w vm.swappiness=0
# 设置PS1
sed -i '/^export PS1/d' ~/.bashrc
sed -i 's@ls -alF@ls -lF@' ~/.bashrc
cat >> ~/.bashrc << EOF
export PS1="[\[\033[01;32m\]\u❄\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]]☭ "
export PS1="\$PS1\[\e]1337;CurrentDir="'\$(pwd)\a\]'
EOF
source ~/.bashrc
# 设置软件源
OS=$(grep ^ID= /etc/os-release | awk -F= '{print $2}' | sed 's/"//g' )
if [ "$OS" == "ubuntu" ]; then
OsCode=$(grep VERSION_CODENAME /etc/os-release | awk -F= '{print $2}')
if [ "$(uname -i)" == "aarch64" ]; then OsArch="-ports"; fi
cat > /etc/apt/sources.list << EOF
deb https://mirrors.ustc.edu.cn/ubuntu${OsArch}/ ${OsCode} main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu${OsArch}/ ${OsCode}-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu${OsArch}/ ${OsCode}-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu${OsArch}/ ${OsCode}-security main restricted universe multiverse
EOF
# 安装软件
apt update -y && apt install -y iptables ipvsadm iproute2 jq apt-transport-https net-tools ipset
###################################################################################################
# 安装Kubernetes 1.23
###################################################################################################
apt install -y docker.io containerd jq ipvsadm iptables
else
# 安装docker-ce
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
fi
# 设置docker配置
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2",
"registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"]
}
EOF
# 调整docker配置
#sed -i 's@ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:5050@ExecStart=/usr/bin/dockerd@' /usr/lib/systemd/system/docker.service
#sed -i 's@ExecStart=/usr/bin/dockerd@ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:5050@' /usr/lib/systemd/system/docker.service
# 随系统启动
systemctl daemon-reload && systemctl enable docker && systemctl restart docker
# containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
systemctl daemon-reload && systemctl enable containerd && systemctl restart containerd
###################################################################################################
# 安装Kubernetes 1.23
###################################################################################################
if [ "$OS" == "ubuntu" ]; then
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
# 设置软件源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt update -y && apt install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
else
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
systemctl stop firewalld && systemctl disable firewalld
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
fi
# crictl
sed -i '/^alias crictl=/d' ~/.bashrc
cat >> ~/.bashrc << EOF
alias crictl='crictl --runtime-endpoint unix:///run/containerd/containerd.sock'
EOF
source ~/.bashrc
# 启用rc.local
if [ "$OS" == "ubuntu" ]; then
cat > /etc/systemd/system/rc-local.service <<EOF
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
EOF
chmod +x /etc/rc.local
systemctl enable rc-local
systemctl start rc-local.service
fi
编译环境:
#!/bin/bash
set -e
ARCH=amd64
if [ "$(uname -i)" = "aarch64" ]; then ARCH=arm64; fi
# Golang 1.22.1
GOLANG_VERSION=1.22.1
wget -O- https://go.dev/dl/go${GOLANG_VERSION}.linux-$ARCH.tar.gz | tar xz -C /tmp/
cp -af /tmp/go/* /usr/local/
sed -i '/^export GO/d' ~/.bashrc
cat >> ~/.bashrc << EOF
export GOPATH=/workspace
export GOPRIVATE=*.jd.com
export GOPROXY=goproxy.cn,direct
EOF
source ~/.bashrc
rm -fr /tmp/go
# Helm 3.14.2
HELM_VERSION=v3.14.2
wget -O- https://get.helm.sh/helm-${HELM_VERSION}-linux-$ARCH.tar.gz | tar xz -C /tmp
cp -af /tmp/linux-$ARCH/helm /usr/bin/
rm -fr /tmp/linux-$ARCH
# K9S 0.32.0
K9S_VERSION=v0.32.0
mkdir -p /tmp/k9s
wget -O- https://github.com/derailed/k9s/releases/download/${K9S_VERSION}/k9s_Linux_$ARCH.tar.gz | tar xz -C /tmp/k9s
cp -af /tmp/k9s/k9s /usr/bin/
rm -fr /tmp/k9s
# OS
OS=$(grep ^ID= /etc/os-release | awk -F= '{print $2}' | sed 's/"//g' )
if [ "$OS" = "ubuntu" ]; then
# build-essential
apt update -y && apt install -y build-essential universal-ctags cscope libssl-dev pkg-config
# EBPF & Perf
apt install -y clang llvm bpftrace linux-tools-common linux-tools-generic libelf-dev libcap-dev libbfd-dev
if [ ! -d /usr/include/asm ]; then ln -s /usr/include/$(uname -i)-linux-gnu/asm /usr/include/asm; fi
if [ ! -d /usr/include/bits ]; then ln -s /usr/include/$(uname -i)-linux-gnu/bits /usr/include/bits; fi
if [ ! -d /usr/include/gnu ]; then ln -s /usr/include/$(uname -i)-linux-gnu/gnu /usr/include/gnu; fi
if [ -d /usr/include/sys ]; then
cp -af /usr/include/$(uname -i)-linux-gnu/sys/* /usr/include/sys/;
else
ln -s /usr/include/$(uname -i)-linux-gnu/sys /usr/include/sys;
fi
fi
# docker buildx
BUILDX_VERSION=v0.12.1
mkdir -p /root/.docker/cli-plugins/
wget https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-${ARCH} -O /root/.docker/cli-plugins/docker-buildx
chmod +x /root/.docker/cli-plugins/docker-buildx
# kubecm 0.28.0
KUBECM_VERSION=v0.28.0
mkdir -p /tmp/kubecm
wget -O- https://github.com/sunny0826/kubecm/releases/download/${KUBECM_VERSION}/kubecm_${KUBECM_VERSION}_Linux_${ARCH}.tar.gz | tar xz -C /tmp/kubecm
cp -af /tmp/kubecm/kubecm /usr/bin/kc
rm -fr /tmp/kubecm
if [ "$OS" = "ubuntu" ]; then
# Kernel
apt install -y flex bison bc pahole
# RUST
apt install -y rustc cargo rustfmt rust-src
else
yum install -y flex bison
fi
VSCode Server:
# 从关于中获取CommitID
COMMITID=74f6148eb9ea00507ec113ec51c489d6ffb4b771
ARCH=x64
if [ "$(uname -i)" = "aarch64" ]; then ARCH=arm64; fi
rm -fr /tmp/vscode-server-linux-${ARCH}
wget -O- https://update.code.visualstudio.com/commit:${COMMITID}/server-linux-${ARCH}/stable | tar xz -C /tmp/
mkdir -p ~/.vscode-server/bin
rm -fr ~/.vscode-server/bin/*
mv /tmp/vscode-server-linux-${ARCH} ~/.vscode-server/bin/${COMMITID}