рдпрд╣ рд▓реЗрдЦ рд╕реНрдЯреИрдХреНрдб рдХрдВрдЯреНрд░реЛрд▓ рдкреНрд▓реЗрди рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрджрдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рдореБрдХреНрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред рдореИрдВ рдЙрд╕ рдЬрдЯрд┐рд▓ рднрд╛рд╖рд╛ рдФрд░ рдЙрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЧрд╛рдЗрдб рд▓рд┐рдЦрд╛ред
рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рддреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ рдпрд╛ Google рд╕реЗ рдкреВрдЫреЗрдВред рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдВрдпрдорд┐рдд рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рдиреЛрдб рд╣реИрдВ:
- рдиреЛрдб 1 (10.9.8.11)
- рдиреЛрдб 2 (10.9.8.12)
- рдиреЛрдб 3 (10.9.8.13)
рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдЖрдИрдкреА рдкрддрд╛ рдмрдирд╛рдПрдВрдЧреЗ:
рдлрд┐рд░ рдЙрди рдкрд░ рдХреЙрд░реНрдб рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдмреИрд▓реЗрдВрд╕рд░ рд╕реЗрдЯрдЕрдк
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рднреА рддреАрди рдиреЛрдбреНрд╕ рдкрд░ Keepalived рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
apt-get -y install keepalived
рдЕрдм рд╣рдо config /etc/keepalived/keepalived.conf
:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 100 advert_int 1 nopreempt authentication { auth_type AH auth_pass iech6peeBu6Thoo8xaih } virtual_ipaddress { 10.9.8.10 } }
рд╣рдо рд╕рдХреНрд░рд┐рдп рд░рд╣рддреЗ рд╣реИрдВ рдФрд░ рддреАрдиреЛрдВ рдиреЛрдбреНрд╕ рдкрд░ рд░рдЦрд╡рд╛рд▓реЗ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
systemctl start keepalived systemctl enable keepalived
рдЕрдм рд╣рдо рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ eth0
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдкрддрд╛ 10.9.8.10
рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рддреИрдирд╛рдд рдХрд░реЗрдВ
UPD: рдпрд╣ рд▓реЗрдЦ v1.12 рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрджреНрдпрдкрд┐ рдЗрд╕реЗ v1.13 рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддреА рд╣реИред
рдЗрд╕ рд╕рд░рд▓ рдЧрд╛рдЗрдб рдХреЛ рджреЗрдЦреЗрдВ ред
рдлрд┐рд▓рд╣рд╛рд▓ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдирд╡реАрдирддрдо рдХреБрдмреЗрд░рдиреЗрдЯ рдкреИрдХреЗрдЬ рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ:
apt-get -y install kubeadm kubelet kubectl
рдЕрдВрддрд┐рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ Keepalived daemon рдХреЛ рд░реЛрдХреЗрдВред
systemctl stop keepalived
рдкрд╣рд▓реЗ рдзреНрдпрд╛рди рджреЗрдВ
рдЕрдм рд╣рдо kubeadm (рдкреНрд░рддреНрдпреЗрдХ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
CLUSTER_IP=10.9.8.10 NODES=(node1 node2 node3) IPS=(10.9.8.11 10.9.8.12 10.9.8.13) POD_SUBNET="192.168.0.0/16" for i in "${!NODES[@]}"; do HOST=${IPS[$i]} NAME=${NODES[$i]} INITIAL_CLUSTER=$( for j in "${!NODES[@]}"; do echo "${NODES[$j]}=https://${IPS[$j]}:2380" done | xargs | tr ' ' , ) cat > kubeadm-config-${NODES[$i]}.yaml <<EOT apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: stable apiServer: certSANs: - "${CLUSTER_IP}" controlPlaneEndpoint: "${CLUSTER_IP}:6443" etcd: local: extraArgs: initial-cluster: "${INITIAL_CLUSTER}" initial-cluster-state: new name: ${NODES[$i]} listen-peer-urls: "https://${IPS[$i]}:2380" listen-client-urls: "https://127.0.0.1:2379,https://${IPS[$i]}:2379" advertise-client-urls: "https://${IPS[$i]}:2379" initial-advertise-peer-urls: "https://${IPS[$i]}:2380" serverCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" peerCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" networking: podSubnet: "${POD_SUBNET}" EOT done
рд╣рдо рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдХреЛ рдкрд╣рд▓реЗ рдиреЛрдб рдкрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдФрд░ рдПрдбрдорд┐рди-рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local $kubeadm init phase kubeconfig admin systemctl start kubelet
рд╣рдо рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдмреЗрджрдо рд╢реЗрд╖ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдорд╛рди рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
NODES="node2 node3" CERTS=$(find /etc/kubernetes/pki/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') ETCD_CERTS=$(find /etc/kubernetes/pki/etcd/ -maxdepth 1 -name '*ca.*') for NODE in $NODES; do ssh $NODE mkdir -p /etc/kubernetes/pki/etcd scp $CERTS $NODE:/etc/kubernetes/pki/ scp $ETCD_CERTS $NODE:/etc/kubernetes/pki/etcd/ scp /etc/kubernetes/admin.conf $NODE:/etc/kubernetes scp kubeadm-config-$NODE.yaml $NODE: done
рджреВрд╕рд░рд╛ рдиреЛрдб
рд╣рдо рджреВрд╕рд░реЗ рдиреЛрдб рдкрд░ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local systemctl start kubelet
рддреАрд╕рд░рд╛ рдиреЛрдб
рд╣рдо рдЕрдВрддрд┐рдо рдиреЛрдб рдкрд░ рдХреВрдмрд░реНрдиреЗрдЯреНрд╕ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред
(рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдмреИрд▓реЗрдВрд╕рд░ рдЖрдИрдкреА рд╕реЗрдЯ рд╣реИ рдФрд░ рдЗрд╕ рдиреЛрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ)
kubeadm init --config kubeadm-config-${HOSTNAME}.yaml
рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рдиреЛрдб
рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рджреЛ рдиреЛрдбреНрд╕ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдорд╛рд╕реНрдЯрд░ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase kubeconfig all $kubeadm init phase control-plane all $kubeadm init phase mark-control-plane $kubeadm init phase upload-config kubeadm
рдФрд░ рд░рдЦрд╡рд╛рд▓реЗ рдбреЗрдорди рдХреЛ рднреА рдЪрд▓рд╛рдПрдВ:
systemctl start keepalived