Implemente el clúster kubernetest en Vultr
En el reciente estudio kubernetest
, pero hay una gran cantidad de tutoriales en Google sobre cómo distribuir kubernetes
.
Originalmente quería comprar sus propias JD
y HUAWEI
el ECS
anteriores despliegues, tirar mucho tiempo en vano. ECS ofrece una selección de frustración o con un proveedor de servicio en la nube, hay en VPC
el despliegue será en condiciones más convenientes.
Selección de configuración de ECS
Debido a que sólo el aprendizaje, no voy a implementar alta disponibilidad k8s
racimos, así preparar una tabla Master
y Node
nodos.
Desde Master
por lo menos dos núcleos de CPU. Esta es una alternativa Vultr
en la 2 核 4G 内存
configuración ECS
.
Node
Por supuesto, la configuración del nodo de memoria más grande es mejor, por supuesto, sólo en el propósito de aprender, la elección aquí Master
configurar la misma.
servicio en la nube extranjera vendedores generalmente no hay límites de ancho de banda, generalmente de acuerdo con el cálculo del flujo, esta configuración tiene 3T
el tráfico es sin duda suficiente.
Luego, su modelo de pago por hora es en esta configuración 0.03 $ / h
es equivalente 0.21 ¥ / h
, es decir, dos centavos por hora! Incluso si usas un día, serán cuatro dólares.
Tengo la intención de aprender k8s
cuando dos instancias en el despliegue, sin la destrucción directa, no Miya.
Si es un usuario nuevo, aún puede obtenerlo de forma gratuita 100 $
. Aquí está la conexión invitada Vultr Give $ 100. Si cree que es bueno, puede probarlo.
Aquí dos seleccionados CentOS 7 Without SELinux
ejemplos.
SELinux
Es Linux
un software de seguridad con el fin de facilitar el aprendizaje y el despliegue, lo cerramos directamente, así que elegí Without SELinux
listo para comenzar el despliegue de.
Tenga en cuenta que en el Additional Features
cheque en Enable Private Networking
, por lo que Vultr
está dentro de su red de distribución del servidor IP
.
La creación de dos nodos HostName
para evitar un nombre de nodo será el conflicto.
En Deploy Now
antes de que el Servers Qty
aumento es 2
, por lo que no se pueden abrir repetidamente la página de despliegue, y desplegar directamente dos instancias.
No sea este $20.00 /mo
miedo, este es el mes $20
, sólo tenemos que ser destruido como terminado, y el nuevo usuario un regalo 100$
puede ser utilizado para un largo tiempo.
Configuración del entorno ECS
Después de la finalización del despliegue de dos instancias, se puede Instances
encontrar una lista de ellos. (Teniendo en cuenta los lectores que no han utilizado los servicios en la nube, elaboraré más aquí).
Puede hacer clic en este caso a través Overview
de encontrar su contraseña de la cuenta de inicio de sesión, los usuarios predeterminados root
.
A continuación Settings
se puede ver la red de estos dos casos IP
.
La intranet de los dos ejemplos del autor es la siguiente:
Ejemplos | Número de núcleos | Memoria | Intranet IP |
---|---|---|---|
Maestro | 2 | 4G | 10.24.96.3 |
Nodo | 2 | 4G | 10.24.96.4 |
Entonces empezó, pero ssh
después de entrar en la necesidad del sistema para hacer un trabajo de preparación.
Preparativos de despliegue de K8
En primer lugar, para evitar problemas innecesarios, desactivar el CentOS 7
servidor de seguridad, debido a sus propios proveedores de servicios cloud tienen grupos de seguridad, que también se puede lograr mediante la configuración de grupo de seguridad de seguridad de la red.
systemctl disable firewalld && systemctl stop firewalld
Si no está seleccionado previamente en el momento de casos de implementación Without SELinux
, donde es necesario dejar que el contenedor se puede acceder al archivo de host, se introduce el siguiente comando.
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
También necesitamos cerrar swap, por qué puede buscarlo.
swapoff -a
Para asegurarse de que sysctl
la configuración net.bridge.bridge-nf-call-iptables
se establece en 1.
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Asegúrese de que la carga br_netfilter
del módulo. Esto se puede ejecutar lsmod | grep br_netfilter
al completo. Para cargarlo explícitamente, llame modprobe br_netfilter
.
modprobe br_netfilter
lsmod | grep br_netfilter
Instalar docker
:
yum install -y docker
systemctl enable docker && systemctl start docker
El autor ha realizado los pasos anteriores en un script, puede ver https://gist.github.com/elfgzp/02485648297823060a7d8ddbafebf140#file-vultr_k8s_prepare-sh .
Para ingresar rápidamente el siguiente paso, puede ejecutar el siguiente comando para omitir la operación de preparación directamente.
curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_prepare.sh | sh
Instalar Kubeadm
Los siguientes pasos pueden referirse a la documentación oficial, el enlace de documentación oficial .
# 配置 yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# 安装 kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 启动 kubelet
systemctl enable --now kubelet
Debido Vultr
anfitrión nube extranjera, por lo que no consideramos Google
los problemas de acceso, pero si se trata de las necesidades del país anfitrión a ser yum
la fuente de repo
modificaciones para la siguiente configuración.
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kuebrnetes]
name=KubernetesRepository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
El script para la operación anterior es https://gist.github.com/elfgzp/02485648297823060a7d8ddbafebf140#file-vultr_k8s_install_kubeadm-sh .
curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/#/vultr_k8s_prepare.sh | sh
Crear un clúster k8s con Kubeadm
Crear nodo maestro k8s
Primero queremos Master
realizar en la instancia kubeadm
. Pero empezamos con kubeadm config print init-defaults
un vistazo a su archivo de inicialización por defecto.
kubeadm config print init-defaults
Por supuesto, también puede generar un archivo de configuración y especificar el archivo de configuración para inicializar:
kubeadm config print init-defaults > kubeadm.yaml
# 修改 kubeadm.yml
kubeadm init --config kubeadm.yaml
Si la inicialización falla, puede ejecutar el siguiente comando para rehacer:
kubeadm reset
rm -rf $HOME/.kube/config
rm -rf /var/lib/cni/
rm -rf /etc/kubernetes/
rm -rf /etc/cni/
ifconfig cni0 down
ip link delete cni0
La siguiente ejecución directa kubeadm init
se ha inicializado, el país anfitrión puede que tenga que modificar imageRepository
la configuración para modificar k8s
el repositorio espejo.
cat <<EOF > kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
apiServer:
extraArgs:
runtime-config: "api/all=true"
kubernetesVersion: "v1.18.1"
imageRepository: registry.aliyuncs.com/google_containers
EOF
kubeadm init --config kubeadm.yaml
Una vez completada la ejecución, obtendremos el siguiente resultado:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join {你的IP}:6443 --token 3prn7r.iavgjxcmrlh3ust3 \
--discovery-token-ca-cert-hash sha256:95283a2e81464ba5290bf4aeffc4376b6d708f506fcee278cd2a647f704ed55d
De acuerdo con sus ideas, vamos a kubectl
configuración en el $HOME/.kube/config
siguiente, nota que cada ejecución completada kubeadm init
después, el perfil va a cambiar, por lo que es necesario volver a copiar. kubeadm
Se unirá a la información de configuración de salida de comandos para Node
el clúster.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Si está utilizando un root
usuario, puede utilizar directamente las variables de entorno especifican el fichero de configuración:
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
. ~/.bashrc
A continuación, utilice kubectl get nodes
para ver el estado del nodo:
NAME STATUS ROLES AGE VERSION
master1 NotReady master 6m52s v1.18.1
En este punto el Estado es NotReady
, por supuesto, el estado es correcto, ya que no tenemos que instalar la red plug-ins. A continuación, instale la red plug-in, que aquí hay una Weave
red plug-ins:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Existen otros complementos de red que pueden consultar la documentación oficial, Instalación de un complemento de red Pod .
Puede ver Pods
para ver si la instalación ha sido exitosa Estado:
kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-66bff467f8-br94l 1/1 Running 0 14m
kube-system coredns-66bff467f8-pvsfn 1/1 Running 0 14m
kube-system kube-proxy-b2phr 1/1 Running 0 14m
kube-system weave-net-8wv4k 2/2 Running 0 2m2s
Si se comprueba STATUS
que no Running
a través, kubectl logs
y el kubectl describe
comando para ver información detallada del error.
kubectl logs weave-net-8wv4k -n kube-system weave
kubectl logs weave-net-8wv4k -n kube-system weave-npc
kubectl describe pods weave-net-8wv4k -n kube-system
En este momento, Master
el estado de nodo se convierte en Ready
una.
NAME STATUS ROLES AGE VERSION
master1 Ready master 6m52s v1.18.1
implementación Node
del nodo
Despliegue Node
nodo también requiere "fase de preparación" de la obra aquí no es explicar y ejecutar directamente la secuencia de comandos:
curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_prepare.sh | sh
curl https://gist.githubusercontent.com/elfgzp/02485648297823060a7d8ddbafebf140/raw/781c2cd7e6dba8f099e2b6b1aba9bb91d9f60fe2/vultr_k8s_install_kubeadm.sh | sh
Tenemos que llevar a cabo kubeadm
en Master
la inicialización de nodos de salida de join
comandos. Si no se acuerda, se puede lograr mediante Master
la re-ejecutar el siguiente comando para obtener join
comandos.
kubeadm token create --print-join-command
kubeadm join {你的IP}:6443 --token m239ha.ot52q6goyq0pcadx --discovery-token-ca-cert-hash sha256:95283a2e81464ba5290bf4aeffc4376b6d708f506fcee278cd2a647f704ed55d
Si usted está teniendo problemas para unirse también se puede utilizar kubeadm rest
para restablecer.
kubeadm reset
Por supuesto, join
el comando también puede proporcionar un archivo de configuración, sólo tenemos que Node
ejecutar el siguiente comando puede generar un archivo de configuración por defecto.
kubeadm config print join-defaults > kubeadm-join.yaml
kubeadm join --config kubeadm-join.yaml
Por otra parte kubectl
para ver el nodes
estado, si desea Node
llevar a cabo, a continuación, el nodo debe estar Master
en la /etc/kubernetes/admin.conf
copia al Node
nodo.
A continuación se verifica el Node
estado Ready
del éxito añadido:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master1 Ready master 6m52s v1.18.1
node1 Ready <none> 29s v1.18.1
Resumen
Éstos están en Vultr
uso kubeadm
para desplegar k8s
todos los amigos de racimo proceso, por supuesto, entraron en un terreno de la fosa. Especialmente si desea implementar en diferentes hosts de la nube, finalmente elige utilizar el mismo ECS del proveedor de servicios en la nube.
Documentos de referencia
Análisis en profundidad de Kubernetes
¡Este artículo es publicado por OpenWrite, una plataforma multiplataforma de publicación de blog !