1. Planificación ambiental
Topología aproximada:
Estoy aquí que etcd y master están en la misma máquina
Inicialización de dos sistemas.
Ver https://www.cnblogs.com/huningfei/p/12697310.html
Tres instalan k8s y docker
Ver https://www.cnblogs.com/huningfei/p/12697310.html
Cuatro instalar keepalived
Instalar en tres nodos maestros
yum -y install keepalived
Archivo de configuración
master1
[root@k8s-master01 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master01
}
vrrp_instance VI_1 {
state MASTER #主
interface ens33 #网卡名字
virtual_router_id 50
priority 100 #权重
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.222 #vip
}
}
master2
! Configuration File for keepalived
global_defs {
router_id master01
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 50
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.222
}
}
master3
! Configuration File for keepalived
global_defs {
router_id master01
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 50
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.222
}
}
Comience y configure el arranque para comenzar
service keepalived start
systemctl enable keepalived
Cuatro inicializan el nodo maestro
Solo ejecuta en cualquiera
kubeadm init --config=kubeadm-config.yaml
初始化配置文件如下:
```bash
[root@k8s-master01 load-k8s]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
apiServer:
certSANs: #填写所有kube-apiserver节点的hostname、IP、VIP(好像也可以不用写,只写vip就行)
- k8s-master01
- k8s-node1
- k8s-node2
- 192.168.1.210
- 192.168.1.200
- 192.168.1.211
- 192.168.1.222
controlPlaneEndpoint: "192.168.1.222:6443" #vip
imageRepository: registry.aliyuncs.com/google_containers
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
La información que se muestra en la figura representa una inicialización exitosa:
Luego, siga las indicaciones para ejecutar el comando:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Cinco instalar franela de red enchufable
kubectl apply -f kube-flannel.yml
Certificado de seis copias (pasos clave)
Copie de master01 a los dos nodos maestros restantes, uso la copia de script aquí
[root@k8s-master01 load-k8s]# cat cert-master.sh
USER=root # customizable
CONTROL_PLANE_IPS="192.168.1.200 192.168.1.211"
for host in ${CONTROL_PLANE_IPS}; do
scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
# Quote this line if you are using external etcd
scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
done
然后去其他两个master节点把证书移动到/etc/kubernetes/pki目录下面,我这里用脚本移动
```bash
[root@k8s-node1 load-k8s]# cat mv-cert.sh
USER=root # customizable
mkdir -p /etc/kubernetes/pki/etcd
mv /${USER}/ca.crt /etc/kubernetes/pki/
mv /${USER}/ca.key /etc/kubernetes/pki/
mv /${USER}/sa.pub /etc/kubernetes/pki/
mv /${USER}/sa.key /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.key /etc/kubernetes/pki/
mv /${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
# Quote this line if you are using external etcd
mv /${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
Siete dos nodos maestros restantes se unen al clúster
kubeadm join 192.168.1.222:6443 --token zi3lku.0jmskzstc49429cu \
--discovery-token-ca-cert-hash sha256:75c2e15f51e23490a0b042d72d6ac84fc18ba63c230f27882728f8832711710b \
--control-plane
Tenga en cuenta que la ip aquí es la ip virtual generada por keepalived.
Lo siguiente representa el éxito.
Después de unirse con éxito, puede ir a los tres maestros para verificar si el estado es exitoso
Kubectl get nodos
Descripción: Mi nombre de host aquí no se ha cambiado al nombre de host maestro porque es conveniente, de hecho, los tres son nodos maestros.
Ocho nodos nodos se unen al clúster
kubeadm join 192.168.1.222:6443 --token zi3lku.0jmskzstc49429cu \
--discovery-token-ca-cert-hash sha256:75c2e15f51e23490a0b042d72d6ac84fc18ba63c230f27882728f8832711710b
El siguiente mensaje parece indicar éxito
Verifique el estado del nodo, el nodo 3 es mi nodo, el resto son nodos maestros
Prueba de alta disponibilidad de nueve grupos
1 Master01 se cierra, vip flota a master02, todas las funciones son normales
2 master02 se cierra, vip flota a master03, los pods son normales, pero no se pueden usar todos los comandos. La
conclusión es que cuando uno de los maestros está roto, el clúster está Puede trabajar normalmente