Imprimir
La versión de Kubernetes es 1.18.0
La versión de Docker es docker-ce-19.03.12
Planificación de tres máquinas
La máquina zjj101 es el nodo maestro,
zjj102 y zjj103 son los nodos del nodo
Trabajo previo
Cerrar selinux
Las tres máquinas están apagadas
Dos caminos:
Método 1 Permanente:
sed -i 's/enforcing/disabled/' /etc/selinux/config
Método 2 Cierre temporal
setenforce 0 # Temporal
Cerrar intercambio
Las tres máquinas están apagadas
Cerrado permanentemente
echo "vm.swappiness = 0">> /etc/sysctl.conf
Apaga el cortafuegos
Las tres máquinas están apagadas
La cadena que pasa el tráfico IPv4 en puente a iptables
Las tres máquinas están configuradas
Simplemente cópielo directamente en la terminal de shell y presione enter
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
Ejecute en tres máquinas, haga que las tres máquinas surtan efecto, simplemente cópielo en el terminal de shell y presione enter.
sysctl --system
Sincronización horaria, para que las tres máquinas tengan la misma hora.
Configurar ventana acoplable
K8s depende de Docker
Instale Docker en tres máquinas
Se recomienda que la versión de la ventana acoplable de las tres máquinas sea la misma.
La instalación está completa y configurada para arrancar
La versión de Docker que instalé es docker-ce-19.03.12
Referencia del método de construcción:
Configuración del almacén de Docker Imagen de Alibaba Cloud
Debido a que la velocidad de Internet es rápida, de lo contrario, la descarga de la imagen será muy lenta,
Ejecute las tres máquinas
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
Después del cambio, debe reiniciar todas las ventanas acoplables para que la configuración surta efecto.
Comando de reinicio:
systemctl restart docker
Agregue la fuente de software yum de Alibaba Cloud
Debido a que necesita descargar cosas más tarde, si no lo agrega, se conectará a un sitio web extranjero y la velocidad de descarga puede ser muy lenta, o incluso una red extranjera.
Las tres máquinas están pegadas a la terminal de Linux y se ejecutan
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Compruebe si la configuración es correcta
mando:
docker info
resultado:
Si Registry Mirrors es aliyuncs, la configuración es correcta.
[root@zjj103 ~]# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 2.728GiB
Name: zjj103
ID: AA4E:2ANN:6QOU:PPLO:MOJQ:JGPP:27GU:SA2Q:BFIZ:5OER:4VSZ:W3FO
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://b9pmyelo.mirror.aliyuncs.com/
Live Restore Enabled: false
Comience a instalar K8s
Instale kubeadm, kubelet y kubectl
Dado que la versión se actualiza con frecuencia, el número de versión se especifica aquí para la implementación,
Si no especifica el número de versión, se instala la última versión.
Instálelo en los tres nodos
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
Configurar el arranque
systemctl enable kubelet
Implementar Kubernetes Master
Ejecutar en el nodo maestro, no ejecutar en el nodo del nodo
Nota: 172.16.10.101 es la ip del nodo maestro actual
kubeadm init --apiserver-advertise-address=172.16.10.101 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
Dado que no se puede acceder a la dirección de espejo de extracción predeterminada k8s.gcr.io en China, especifique aquí la dirección del almacén de espejo de Alibaba Cloud.
- Instrucciones de configuración:
apiserver-publicidad-address es el jp del nodo actual
image-repository es la dirección espejo
versión kubernetes versión k8s
service-cidr y pod-network-cidr son las ips a las que se accede por su propia conexión. No hay requisitos especiales, siempre que no entren en conflicto con el sistema actual.
-
Que hace este comando
Su nodo maestro tiene que hacer muchas cosas, como la descarga e implementación de los componentes espejo del administrador del controlador del servidor api
Puede ver que este comando lo ayudó a extraer muchos espejos relacionados con K8
[root@zjj101 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.aliyuncs.com/google_containers/kube-proxy v1.18.0 43940c34f24f 11 months ago 117MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.18.0 74060cea7f70 11 months ago 173MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.18.0 d3e55153f52f 11 months ago 162MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.18.0 a31f78c7c8ce 11 months ago 95.3MB
registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 12 months ago 683kB
registry.aliyuncs.com/google_containers/coredns 1.6.7 67da37a9a360 13 months ago 43.8MB
registry.aliyuncs.com/google_containers/etcd 3.4.3-0 303ce5db0e90 16 months ago 288MB
Utilice la herramienta kubectl:
La siguiente no es necesariamente la misma que la consola anterior, se recomienda verificar
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Ver que nodos hay
kubectl get nodes
5. Únase al nodo de Kubernetes
Después de que se ejecute el comando anterior ejecutado en el nodo nodo,
Si no se ejecuta, si olvida el token, use el siguiente método para regenerar el token.
Ingrese comandos en el nodo maestro
kubeadm token create --print-join-command
Verifique el contenido de la consola y busque un comando similar al siguiente. Este es el token. El período de validez predeterminado del token es de 24 horas. Después del vencimiento, el token no se puede usar. Debe volver a crear el token.
kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
Copie este comando en el nodo nodo para ejecutarlo, tenga en cuenta que el nodo maestro no necesita ejecutarse, el nodo nodo lo ejecuta.
Compruebe el grupo de K8s
Use el comando kubectl get nodes para verificar el nodo maestro, y puede encontrar que hay un maestro y dos nodos de nodo.
[root@zjj101 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
zjj101 NotReady master 6h8m v1.18.0
zjj102 NotReady <none> 7s v1.18.0
zjj103 NotReady <none> 11m v1.18.0
Se encuentra que todo el estado es NotReady, porque la red aún no es accesible y se requiere un complemento de red.
6. Implementar el complemento de red CNI
No se puede acceder a la dirección duplicada predeterminada y el comando sed se modifica en el almacén duplicado de docker hub.
Ejecute primero en el nodo maestro:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Si ejecuta de nuevo, la red puede ser un poco lenta en este momento y puede fallar. Inténtelo unas cuantas veces más. Si no funciona, busque un archivo kube-flannel.yml e intente configurarlo localmente. Kubectl apply kube-flannel.yml lee archivos locales, parece que se puede leer, lo intentaré cuando haya esta escena.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Verifique si todo comenzó con éxito
kubectl get pods -n comando kube-system
Todo en el estado de ejecución significa que la ejecución es exitosa
[root@zjj101 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7ff77c879f-mfjmg 1/1 Running 0 5m52s
coredns-7ff77c879f-t8fdg 1/1 Running 0 5m52s
etcd-zjj101 1/1 Running 0 6m3s
kube-apiserver-zjj101 1/1 Running 0 6m3s
kube-controller-manager-zjj101 1/1 Running 0 6m3s
kube-flannel-ds-7stq4 1/1 Running 0 105s
kube-flannel-ds-lpbrp 1/1 Running 0 105s
kube-flannel-ds-rsttx 1/1 Running 0 105s
kube-proxy-chmpw 1/1 Running 0 4m39s
kube-proxy-cvz8v 1/1 Running 0 4m46s
kube-proxy-pq44r 1/1 Running 0 5m52s
kube-scheduler-zjj101 1/1 Running 0 6m3s
Eche un vistazo a los nodos
comando kubectl obtener nodos
[root@zjj101 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
zjj101 Ready master 7m34s v1.18.0
zjj102 Ready <none> 6m7s v1.18.0
zjj103 Ready <none> 6m1s v1.18.0
Descubrir que el estado está listo, significa que el inicio es exitoso
7. Prueba el clúster de Kubernetes
Cree un pod en el clúster de Kubernetes y verifique que se esté ejecutando normalmente:
# 拉取nginx 的pod
[root@zjj101 ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
# 查看pod ,发现了一个nginx,等status状态变成running状态后就可以了
[root@zjj101 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-f89759699-rh5lk 1/1 Running 0 2m19s
El puerto externo está expuesto. Si no lo expone, no se podrá acceder a la red externa. El puerto predeterminado de nginx es 80
命令: kubectl exponer implementación nginx --port = 80 --type = NodePort
[root@zjj101 ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
Ver puertos externos: kubectl get pod, svc
[root@zjj101 ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-f89759699-rh5lk 1/1 Running 0 5m10s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 15m
service/nginx NodePort 10.98.67.59 <none> 80:31715/TCP 46s
Se encuentra que el puerto expuesto por nginx es 31715
Abra el navegador y pruébelo
zjj101 zjj102 zjj103 es que hice mapeo de host en la máquina de Windows. De hecho, zjj101 es la máquina maestra, zjj102 es la máquina de nodo1 y zjj103 es la máquina de nodo2.
http: // zjj101: 31715 /
http: // zjj102: 31715 /
http: // zjj103: 31715 /