add basic init script
parent
0b516b0eb3
commit
39a5cc646d
|
@ -0,0 +1,358 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
stage=""
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
while [[ "$#" -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--stage)
|
||||||
|
stage="$2"
|
||||||
|
shift # Remove --last-stage
|
||||||
|
shift # Remove the value
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown parameter: $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# init container runtime
|
||||||
|
if [ "$stage" = "configure-runtime" ]; then
|
||||||
|
echo '====================== download runc ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
https://github.com/opencontainers/runc/releases/download/v1.2.6/runc.amd64
|
||||||
|
|
||||||
|
echo '====================== make runc executable ========================='
|
||||||
|
mv runc.amd64 runc \
|
||||||
|
&& chmod +x runc \
|
||||||
|
&& mv runc /usr/local/bin/
|
||||||
|
|
||||||
|
echo '====================== download containerd ========================='
|
||||||
|
wget https://github.com/containerd/containerd/releases/download/v2.0.4/containerd-2.0.4-linux-amd64.tar.gz
|
||||||
|
|
||||||
|
echo '====================== make containerd executable ========================='
|
||||||
|
mkdir containerd \
|
||||||
|
&& tar -xvf containerd-2.0.4-linux-amd64.tar.gz -C containerd \
|
||||||
|
&& mv containerd/bin/* /bin/
|
||||||
|
|
||||||
|
echo '====================== int containerd service ========================='
|
||||||
|
mkdir -p /etc/containerd/
|
||||||
|
cat << EOF | tee /etc/containerd/config.toml
|
||||||
|
[debug]
|
||||||
|
level = "debug"
|
||||||
|
|
||||||
|
[plugins]
|
||||||
|
[plugins.'io.containerd.cri.v1.images']
|
||||||
|
snapshotter = "native"
|
||||||
|
[plugins."io.containerd.cri.v1.runtime"]
|
||||||
|
[plugins."io.containerd.cri.v1.runtime".containerd]
|
||||||
|
default_runtime_name = "runc"
|
||||||
|
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes]
|
||||||
|
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc]
|
||||||
|
runtime_type = "io.containerd.runc.v2"
|
||||||
|
snapshotter = "native"
|
||||||
|
|
||||||
|
[plugins."io.containerd.cri.v1.runtime".containerd.runtimes.runc.options]
|
||||||
|
BinaryName = "/usr/local/bin/runc"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/systemd/system/containerd.service
|
||||||
|
[Unit]
|
||||||
|
Description=containerd container runtime
|
||||||
|
Documentation=https://containerd.io
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/bin/containerd
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
Delegate=yes
|
||||||
|
KillMode=process
|
||||||
|
OOMScoreAdjust=-999
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl daemon-reload \
|
||||||
|
&& systemctl enable containerd \
|
||||||
|
&& systemctl start containerd
|
||||||
|
|
||||||
|
systemctl status containerd
|
||||||
|
exit 0
|
||||||
|
elif [ "$stage" = "configure-kubelet" ]; then
|
||||||
|
echo '====================== download kubelet ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
https://dl.k8s.io/v1.32.3/kubernetes-node-linux-amd64.tar.gz
|
||||||
|
tar -xvzf kubernetes-node-linux-amd64.tar.gz
|
||||||
|
|
||||||
|
echo '====================== make kubelet executable ========================='
|
||||||
|
chmod +x kubernetes/node/bin/kubelet \
|
||||||
|
&& mv kubernetes/node/bin/kubelet /usr/local/bin/
|
||||||
|
|
||||||
|
echo '====================== disable swap ========================='
|
||||||
|
swapoff -a
|
||||||
|
|
||||||
|
echo '====================== int kubelet service ========================='
|
||||||
|
cat <<EOF | tee /etc/systemd/system/kubelet.service
|
||||||
|
[Unit]
|
||||||
|
Description=kubelet: The Kubernetes Node Agent
|
||||||
|
Documentation=https://kubernetes.io/docs/home/
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/kubelet \\
|
||||||
|
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \\
|
||||||
|
--file-check-frequency=10s \\
|
||||||
|
--pod-manifest-path='/etc/kubernetes/manifests/' \\
|
||||||
|
--v=10
|
||||||
|
Restart=always
|
||||||
|
StartLimitInterval=0
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl daemon-reload \
|
||||||
|
&& systemctl enable kubelet \
|
||||||
|
&& systemctl start kubelet
|
||||||
|
|
||||||
|
systemctl status kubelet
|
||||||
|
|
||||||
|
echo '====================== download crictl ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz
|
||||||
|
tar -xvf crictl-v1.32.0-linux-amd64.tar.gz \
|
||||||
|
&& chmod +x crictl \
|
||||||
|
&& mv crictl /usr/local/bin/
|
||||||
|
|
||||||
|
echo '====================== configure crictl ========================='
|
||||||
|
tar -xvf crictl-v1.32.0-linux-amd64.tar.gz \
|
||||||
|
&& chmod +x crictl \
|
||||||
|
&& mv crictl /usr/local/bin/
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/crictl.yaml
|
||||||
|
runtime-endpoint: unix:///run/containerd/containerd.sock
|
||||||
|
image-endpoint: unix:///run/containerd/containerd.sock
|
||||||
|
timeout: 10
|
||||||
|
debug: false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
# configure networking
|
||||||
|
elif [ "$stage" = "configure-networking" ]; then
|
||||||
|
echo '====================== download cni-plugins ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz
|
||||||
|
|
||||||
|
echo '====================== configure cni-plugins ========================='
|
||||||
|
mkdir -p \
|
||||||
|
/etc/cni/net.d \
|
||||||
|
/opt/cni/bin
|
||||||
|
|
||||||
|
tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/cni/net.d/10-bridge.conf
|
||||||
|
{
|
||||||
|
"cniVersion": "0.4.0",
|
||||||
|
"name": "bridge",
|
||||||
|
"type": "bridge",
|
||||||
|
"bridge": "cnio0",
|
||||||
|
"isGateway": true,
|
||||||
|
"ipMasq": true,
|
||||||
|
"ipam": {
|
||||||
|
"type": "host-local",
|
||||||
|
"ranges": [
|
||||||
|
[{"subnet": "10.240.1.0/24"}]
|
||||||
|
],
|
||||||
|
"routes": [{"dst": "0.0.0.0/0"}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/cni/net.d/99-loopback.conf
|
||||||
|
{
|
||||||
|
"cniVersion": "0.4.0",
|
||||||
|
"name": "lo",
|
||||||
|
"type": "loopback"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo '====================== reconfigure cni-plugins ========================='
|
||||||
|
cat <<EOF | tee /var/lib/kubelet/kubelet-config.yaml
|
||||||
|
apiVersion: kubelet.config.k8s.io/v1beta1
|
||||||
|
kind: KubeletConfiguration
|
||||||
|
authentication:
|
||||||
|
anonymous:
|
||||||
|
enabled: true
|
||||||
|
webhook:
|
||||||
|
enabled: false
|
||||||
|
authorization:
|
||||||
|
mode: AlwaysAllow
|
||||||
|
networkPlugin: "cni"
|
||||||
|
cniConfDir: "/etc/cni/net.d"
|
||||||
|
cniBinDir: "/opt/cni/bin"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/systemd/system/kubelet.service
|
||||||
|
[Unit]
|
||||||
|
Description=kubelet: The Kubernetes Node Agent
|
||||||
|
Documentation=https://kubernetes.io/docs/home/
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/local/bin/kubelet \\
|
||||||
|
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock \\
|
||||||
|
--file-check-frequency=10s \\
|
||||||
|
--config=/var/lib/kubelet/kubelet-config.yaml \\
|
||||||
|
--pod-manifest-path='/etc/kubernetes/manifests/' \\
|
||||||
|
--v=10
|
||||||
|
Restart=always
|
||||||
|
StartLimitInterval=0
|
||||||
|
RestartSec=10
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl daemon-reload \
|
||||||
|
&& systemctl restart kubelet
|
||||||
|
|
||||||
|
systemctl status kubelet
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# configure etcd
|
||||||
|
elif [ "$stage" = "configure-etcd" ]; then
|
||||||
|
echo '====================== download cert tools ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssl_1.4.1_linux_amd64 \
|
||||||
|
https://github.com/cloudflare/cfssl/releases/download/v1.4.1/cfssljson_1.4.1_linux_amd64
|
||||||
|
|
||||||
|
mv cfssl_1.4.1_linux_amd64 cfssl \
|
||||||
|
&& mv cfssljson_1.4.1_linux_amd64 cfssljson \
|
||||||
|
&& chmod +x cfssl cfssljson \
|
||||||
|
&& mv cfssl cfssljson /usr/local/bin/
|
||||||
|
|
||||||
|
echo '====================== generate etcd certs ========================='
|
||||||
|
cat <<EOF | tee ca-config.json
|
||||||
|
{
|
||||||
|
"signing": {
|
||||||
|
"default": {
|
||||||
|
"expiry": "8760h"
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
"kubernetes": {
|
||||||
|
"usages": ["signing", "key encipherment", "server auth", "client auth"],
|
||||||
|
"expiry": "8760h"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF | tee ca-csr.json
|
||||||
|
{
|
||||||
|
"CN": "Kubernetes",
|
||||||
|
"key": {
|
||||||
|
"algo": "rsa",
|
||||||
|
"size": 2048
|
||||||
|
},
|
||||||
|
"names": [
|
||||||
|
{
|
||||||
|
"C": "US",
|
||||||
|
"L": "Portland",
|
||||||
|
"O": "Kubernetes",
|
||||||
|
"OU": "CA",
|
||||||
|
"ST": "Oregon"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
|
||||||
|
|
||||||
|
HOST_NAME=$(hostname -a)
|
||||||
|
KUBERNETES_HOSTNAMES=kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.svc.cluster.local
|
||||||
|
|
||||||
|
cat <<EOF | tee kubernetes-csr.json
|
||||||
|
{
|
||||||
|
"CN": "kubernetes",
|
||||||
|
"key": {
|
||||||
|
"algo": "rsa",
|
||||||
|
"size": 2048
|
||||||
|
},
|
||||||
|
"names": [
|
||||||
|
{
|
||||||
|
"C": "US",
|
||||||
|
"L": "Portland",
|
||||||
|
"O": "Kubernetes",
|
||||||
|
"OU": "Kubernetes The Hard Way",
|
||||||
|
"ST": "Oregon"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cfssl gencert \
|
||||||
|
-ca=ca.pem \
|
||||||
|
-ca-key=ca-key.pem \
|
||||||
|
-config=ca-config.json \
|
||||||
|
-hostname=worker,127.0.0.1,${KUBERNETES_HOSTNAMES},10.32.0.1 \
|
||||||
|
-profile=kubernetes \
|
||||||
|
kubernetes-csr.json | cfssljson -bare kubernetes
|
||||||
|
|
||||||
|
echo '====================== download etcd ========================='
|
||||||
|
wget -q --show-progress --https-only --timestamping \
|
||||||
|
"https://github.com/etcd-io/etcd/releases/download/v3.4.15/etcd-v3.4.15-linux-amd64.tar.gz"
|
||||||
|
|
||||||
|
echo '====================== configure etcd ========================='
|
||||||
|
tar -xvf etcd-v3.4.15-linux-amd64.tar.gz \
|
||||||
|
&& mv etcd-v3.4.15-linux-amd64/etcd* /usr/local/bin/
|
||||||
|
|
||||||
|
mkdir -p /etc/etcd /var/lib/etcd \
|
||||||
|
&& chmod 700 /var/lib/etcd \
|
||||||
|
&& cp ca.pem kubernetes.pem kubernetes-key.pem /etc/etcd/
|
||||||
|
|
||||||
|
cat <<EOF | tee /etc/systemd/system/etcd.service
|
||||||
|
[Unit]
|
||||||
|
Description=etcd
|
||||||
|
Documentation=https://github.com/coreos
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStart=/usr/local/bin/etcd \\
|
||||||
|
--client-cert-auth \\
|
||||||
|
--name etcd \\
|
||||||
|
--cert-file=/etc/etcd/kubernetes.pem \\
|
||||||
|
--key-file=/etc/etcd/kubernetes-key.pem \\
|
||||||
|
--trusted-ca-file=/etc/etcd/ca.pem \\
|
||||||
|
--listen-client-urls https://127.0.0.1:2379 \\
|
||||||
|
--advertise-client-urls https://127.0.0.1:2379 \\
|
||||||
|
--data-dir=/var/lib/etcd
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl daemon-reload \
|
||||||
|
&& systemctl enable etcd \
|
||||||
|
&& systemctl start etcd
|
||||||
|
|
||||||
|
systemctl status etcd
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# configure api server
|
||||||
|
elif [ "$stage" = "configure-etcd" ]; then
|
||||||
|
|
||||||
|
fi
|
Loading…
Reference in New Issue