[*] 更新 init-k8s 脚本
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 10s
All checks were successful
Build Docker Image / Explore-Gitea-Actions (push) Successful in 10s
This commit is contained in:
parent
28188cf5c0
commit
088a29f5be
193
init-k8s.sh
193
init-k8s.sh
@ -115,4 +115,195 @@ apt install -y kubeadm kubelet kubectl && apt-mark hold kubeadm kubelet kubectl
|
|||||||
|
|
||||||
echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > kubeadm-config.yaml
|
echo 'KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"' > kubeadm-config.yaml
|
||||||
|
|
||||||
echo "k8s 运行环境安装成功"
|
echo "k8s 运行环境安装成功"
|
||||||
|
|
||||||
|
# 检查是否 master 节点
|
||||||
|
current_ip=$(hostname -I | awk '{print $1}')
|
||||||
|
if ! echo "$masters" | grep -qw "$current_ip"; then
|
||||||
|
echo "初始化 worker $current_ip 成功"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# 安装 keepalived haproxy
|
||||||
|
apt install -y keepalived haproxy
|
||||||
|
# 检查是否为 Master-01
|
||||||
|
first_master=$(echo $masters | cut -d',' -f1)
|
||||||
|
if [ "$current_ip" == "$first_master" ]; then
|
||||||
|
state=MASTER
|
||||||
|
priority=200
|
||||||
|
else
|
||||||
|
state=BACKUP
|
||||||
|
priority=100
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 初始化 VIP
|
||||||
|
cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
|
||||||
|
vrrp_instance VI_1 {
|
||||||
|
state $state
|
||||||
|
interface eth0
|
||||||
|
virtual_router_id 51
|
||||||
|
priority $priority
|
||||||
|
advert_int 1
|
||||||
|
virtual_ipaddress {
|
||||||
|
$vip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
sudo systemctl restart keepalived
|
||||||
|
systemctl status keepalived
|
||||||
|
echo "初始化 master VIP $current_ip 成功"
|
||||||
|
|
||||||
|
# 初始化 haproxy
|
||||||
|
IFS=',' read -r -a master_ips <<< "$masters"
|
||||||
|
backend_config=""
|
||||||
|
for ((i=0; i<${#master_ips[@]}; i++)); do
|
||||||
|
backend_config+=" server master-$((i+1)) ${master_ips[$i]}:6444 check"$'\n'
|
||||||
|
done
|
||||||
|
mkdir -p /usr/local/haproxy
|
||||||
|
cat <<EOF | sudo tee /etc/haproxy/haproxy.cfg
|
||||||
|
global
|
||||||
|
log 127.0.0.1 local0 notice
|
||||||
|
maxconn 10000
|
||||||
|
chroot /usr/local/haproxy
|
||||||
|
user haproxy
|
||||||
|
group haproxy
|
||||||
|
daemon
|
||||||
|
# ssl 优化
|
||||||
|
tune.ssl.default-dh-param 2048
|
||||||
|
tune.bufsize 32768
|
||||||
|
|
||||||
|
# 默认配置
|
||||||
|
defaults
|
||||||
|
log global
|
||||||
|
option httplog
|
||||||
|
option dontlognull
|
||||||
|
timeout connect 5000
|
||||||
|
timeout client 50000
|
||||||
|
timeout server 50000
|
||||||
|
|
||||||
|
frontend k8s-api
|
||||||
|
bind *:6443
|
||||||
|
mode tcp
|
||||||
|
option tcplog
|
||||||
|
default_backend k8s-api-backend
|
||||||
|
|
||||||
|
backend k8s-api-backend
|
||||||
|
mode tcp
|
||||||
|
option tcp-check
|
||||||
|
balance roundrobin
|
||||||
|
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
|
||||||
|
$backend_config
|
||||||
|
EOF
|
||||||
|
groupadd -r haproxy || echo "用户组已存在"
|
||||||
|
useradd -r -g haproxy -s /sbin/nologin haproxy || echo "用户已存在"
|
||||||
|
sudo systemctl restart keepalived && sudo systemctl restart haproxy
|
||||||
|
systemctl status haproxy
|
||||||
|
echo "初始化 master haproxy $current_ip 成功"
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$current_ip" != "$first_master" ]; then
|
||||||
|
echo "初始化 master $current_ip 成功"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 配置
|
||||||
|
cat <<EOF > kubeadm-config.yaml
|
||||||
|
apiVersion: kubeadm.k8s.io/v1beta4
|
||||||
|
bootstrapTokens:
|
||||||
|
- groups:
|
||||||
|
- system:bootstrappers:kubeadm:default-node-token
|
||||||
|
token: $(openssl rand -hex 3).$(openssl rand -hex 8)
|
||||||
|
ttl: 24h0m0s
|
||||||
|
usages:
|
||||||
|
- signing
|
||||||
|
- authentication
|
||||||
|
kind: InitConfiguration
|
||||||
|
localAPIEndpoint:
|
||||||
|
advertiseAddress: $(hostname -I | awk '{print $1}')
|
||||||
|
bindPort: 6444
|
||||||
|
nodeRegistration:
|
||||||
|
criSocket: unix:///var/run/containerd/containerd.sock
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
imagePullSerial: true
|
||||||
|
name: $(hostname)
|
||||||
|
taints: null
|
||||||
|
timeouts:
|
||||||
|
controlPlaneComponentHealthCheck: 4m0s
|
||||||
|
discovery: 5m0s
|
||||||
|
etcdAPICall: 2m0s
|
||||||
|
kubeletHealthCheck: 4m0s
|
||||||
|
kubernetesAPICall: 1m0s
|
||||||
|
tlsBootstrap: 5m0s
|
||||||
|
upgradeManifests: 5m0s
|
||||||
|
---
|
||||||
|
apiServer: {}
|
||||||
|
apiVersion: kubeadm.k8s.io/v1beta4
|
||||||
|
caCertificateValidityPeriod: 87600h0m0s
|
||||||
|
certificateValidityPeriod: 8760h0m0s
|
||||||
|
certificatesDir: /etc/kubernetes/pki
|
||||||
|
clusterName: kubernetes
|
||||||
|
controlPlaneEndpoint: "$vip_ip:6443"
|
||||||
|
controllerManager: {}
|
||||||
|
dns:
|
||||||
|
imageRepository: $mirrors/coredns
|
||||||
|
encryptionAlgorithm: RSA-2048
|
||||||
|
etcd:
|
||||||
|
local:
|
||||||
|
dataDir: /var/lib/etcd
|
||||||
|
imageRepository: $mirrors
|
||||||
|
kind: ClusterConfiguration
|
||||||
|
kubernetesVersion: $k8s_version
|
||||||
|
networking:
|
||||||
|
dnsDomain: cluster.local
|
||||||
|
podSubnet: $pod_subnet
|
||||||
|
serviceSubnet: $service_subnet
|
||||||
|
proxy: {}
|
||||||
|
scheduler: {}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 开始安装
|
||||||
|
kubeadm init --config=kubeadm-config.yaml --upload-certs --v=9
|
||||||
|
kubectl get nodes
|
||||||
|
|
||||||
|
echo "初始化 master $current_ip 成功,开始配置网络"
|
||||||
|
|
||||||
|
# 配置
|
||||||
|
mkdir -p $HOME/.kube
|
||||||
|
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||||
|
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||||
|
export KUBECONFIG=/etc/kubernetes/admin.conf
|
||||||
|
|
||||||
|
# 安装 operator
|
||||||
|
kubectl create -f https://mirrors.martin98.com/repository/proxy/raw.githubusercontent.com/projectcalico/calico/v$CALICO_VERSION/manifests/tigera-operator.yaml
|
||||||
|
kubectl wait --for=condition=Ready pods --all -n tigera-operator --timeout=300s
|
||||||
|
echo "初始化 master $current_ip operator 成功"
|
||||||
|
# 安装 calico
|
||||||
|
curl https://mirrors.martin98.com/repository/proxy/raw.githubusercontent.com/projectcalico/calico/v$CALICO_VERSION/manifests/custom-resources.yaml -O
|
||||||
|
sed -i "s|\(cidr: \).*|\1$pod_subnet|" custom-resources.yaml
|
||||||
|
kubectl create -f custom-resources.yaml
|
||||||
|
kubectl wait --for=condition=Ready pods --all -n calico-system --timeout=300s
|
||||||
|
kubectl wait --for=condition=Ready pods --all -n calico-apiserver --timeout=300s
|
||||||
|
echo "初始化 master $current_ip calico 成功"
|
||||||
|
|
||||||
|
OUTPUT=$(kubeadm token create --print-join-command)
|
||||||
|
|
||||||
|
# 提取 token 和 discovery-token-ca-cert-hash
|
||||||
|
TOKEN=$(echo "$OUTPUT" | grep -oP 'token \K[\w.]+')
|
||||||
|
TOKEN_HASH=$(echo "$OUTPUT" | grep -oP 'discovery-token-ca-cert-hash \K.*')
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
------------------------------------------------------------------------------------
|
||||||
|
初始化 master $current_ip 成功
|
||||||
|
$OUTPUT
|
||||||
|
|
||||||
|
# worker 加入
|
||||||
|
kubeadm join 10.1.2.200:6443 \\
|
||||||
|
--token $TOKEN \\
|
||||||
|
--discovery-token-ca-cert-hash $TOKEN_HASH
|
||||||
|
|
||||||
|
# admin 加入
|
||||||
|
kubeadm join 10.1.2.200:6443 \\
|
||||||
|
--token $TOKEN \\
|
||||||
|
--discovery-token-ca-cert-hash $TOKEN_HASH \\
|
||||||
|
--control-plane
|
||||||
|
------------------------------------------------------------------------------------
|
||||||
|
EOF
|
@ -11,6 +11,10 @@ export k8s_version=1.32.1
|
|||||||
# 网段配置
|
# 网段配置
|
||||||
export pod_subnet=10.101.0.0/16
|
export pod_subnet=10.101.0.0/16
|
||||||
export service_subnet=10.100.0.0/16
|
export service_subnet=10.100.0.0/16
|
||||||
|
# 配置 高可用 VIP
|
||||||
|
export vip_ip=10.1.3.100
|
||||||
|
export vip=$vip_ip/16
|
||||||
|
export masters=10.1.3.101,10.1.3.102,10.1.3.103
|
||||||
curl -sSL https://git.martin98.com/MartinFarm/init/raw/branch/main/init-k8s.sh | bash
|
curl -sSL https://git.martin98.com/MartinFarm/init/raw/branch/main/init-k8s.sh | bash
|
||||||
```
|
```
|
||||||
### 初始化 单 master 节点
|
### 初始化 单 master 节点
|
||||||
@ -89,24 +93,21 @@ kubectl wait --for=condition=Ready pods --all -n calico-apiserver --timeout=300s
|
|||||||
### 初始化高可用集群
|
### 初始化高可用集群
|
||||||
#### 所有 master
|
#### 所有 master
|
||||||
```bash
|
```bash
|
||||||
# 配置 高可用 VIP
|
|
||||||
apt install -y keepalived haproxy
|
|
||||||
export vip_ip=10.1.3.100
|
|
||||||
export vip=$vip_ip/16
|
|
||||||
export masters=10.1.3.101,10.1.3.102,10.1.3.103
|
|
||||||
current_ip=$(hostname -I | awk '{print $1}')
|
current_ip=$(hostname -I | awk '{print $1}')
|
||||||
first_master=$(echo $masters | cut -d',' -f1)
|
first_master=$(echo $masters | cut -d',' -f1)
|
||||||
if [ "$current_ip" == "$first_master" ]; then
|
if [ "$current_ip" == "$first_master" ]; then
|
||||||
state=MASTER
|
state=MASTER
|
||||||
|
priority=200
|
||||||
else
|
else
|
||||||
state=BACKUP
|
state=BACKUP
|
||||||
|
priority=100
|
||||||
fi
|
fi
|
||||||
cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
|
cat <<EOF | sudo tee /etc/keepalived/keepalived.conf
|
||||||
vrrp_instance VI_1 {
|
vrrp_instance VI_1 {
|
||||||
state $state
|
state $state
|
||||||
interface eth0
|
interface eth0
|
||||||
virtual_router_id 51
|
virtual_router_id 51
|
||||||
priority 100
|
priority $priority
|
||||||
advert_int 1
|
advert_int 1
|
||||||
virtual_ipaddress {
|
virtual_ipaddress {
|
||||||
$vip
|
$vip
|
||||||
@ -116,8 +117,9 @@ EOF
|
|||||||
IFS=',' read -r -a master_ips <<< "$masters"
|
IFS=',' read -r -a master_ips <<< "$masters"
|
||||||
backend_config=""
|
backend_config=""
|
||||||
for ((i=0; i<${#master_ips[@]}; i++)); do
|
for ((i=0; i<${#master_ips[@]}; i++)); do
|
||||||
backend_config+=" server master-$((i+1)) ${master_ips[$i]}:6443 check"$'\n'
|
backend_config+=" server master-$((i+1)) ${master_ips[$i]}:6444 check"$'\n'
|
||||||
done
|
done
|
||||||
|
mkdir -p /usr/local/haproxy
|
||||||
cat <<EOF | sudo tee /etc/haproxy/haproxy.cfg
|
cat <<EOF | sudo tee /etc/haproxy/haproxy.cfg
|
||||||
global
|
global
|
||||||
log 127.0.0.1 local0 notice
|
log 127.0.0.1 local0 notice
|
||||||
@ -147,7 +149,6 @@ frontend k8s-api
|
|||||||
|
|
||||||
backend k8s-api-backend
|
backend k8s-api-backend
|
||||||
mode tcp
|
mode tcp
|
||||||
option tcplog
|
|
||||||
option tcp-check
|
option tcp-check
|
||||||
balance roundrobin
|
balance roundrobin
|
||||||
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
|
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
|
||||||
@ -156,6 +157,8 @@ EOF
|
|||||||
groupadd -r haproxy || echo "用户组已存在"
|
groupadd -r haproxy || echo "用户组已存在"
|
||||||
useradd -r -g haproxy -s /sbin/nologin haproxy || echo "用户已存在"
|
useradd -r -g haproxy -s /sbin/nologin haproxy || echo "用户已存在"
|
||||||
sudo systemctl restart keepalived && sudo systemctl restart haproxy
|
sudo systemctl restart keepalived && sudo systemctl restart haproxy
|
||||||
|
systemctl status keepalived
|
||||||
|
systemctl status haproxy
|
||||||
```
|
```
|
||||||
### Master-01
|
### Master-01
|
||||||
```bash
|
```bash
|
||||||
@ -173,7 +176,7 @@ bootstrapTokens:
|
|||||||
kind: InitConfiguration
|
kind: InitConfiguration
|
||||||
localAPIEndpoint:
|
localAPIEndpoint:
|
||||||
advertiseAddress: $(hostname -I | awk '{print $1}')
|
advertiseAddress: $(hostname -I | awk '{print $1}')
|
||||||
bindPort: 6443
|
bindPort: 6444
|
||||||
nodeRegistration:
|
nodeRegistration:
|
||||||
criSocket: unix:///var/run/containerd/containerd.sock
|
criSocket: unix:///var/run/containerd/containerd.sock
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
|
Loading…
x
Reference in New Issue
Block a user