Prólogo
Los microservicios aún no han jugado, y el advenimiento de la red de servicio me ha admirado por tres veces consecutivas. De acuerdo con el principio de no morir sin la muerte, realicé un estudio profundo (ru). Esta serie consta de 4 artículos, a saber, "Instalación de k8s y DashBoard basados en kubeadm de la red de servicio", "Instalación de Istio basada en Kubernetes de la red de servicio", "Práctica básica de Istio de la red de servicio", "Red de servicio Use Istio para desarrollar microservicios.
El camino hacia el aprendizaje está lleno de baches, pero este camino es hoyo tras hoyo, lo que te hace dudar de tu vida. Por lo tanto, este artículo reunió las mejores prácticas en Internet y mis prácticas de paso a paso, y concluyó que la instalación del tutorial k8s sin hoyos y rutinas es aplaudida y alentada.
Palabras de apertura:
Nota: Si el estado de k8s es incorrecto, verifique el estado del servicio de kubelet y preste atención a si el host configurado tiene efecto
#Ver información de
registro de kubelet journalctl -xeu kubelet
Entorno: el entorno de instalación es una máquina virtual Hyper-V, que ejecuta CentOS 7, y Kubernetes es 1.18
Ajustes básicos de la máquina
Crea una máquina virtual.
Use Hyper-V para crear una máquina virtual e instalar CentOS. Cómo CentOS en Hyper-V va a Internet es una pregunta.
La forma más fácil es crear una red en Hyper-V y luego usar la red creada para la máquina virtual. Al mismo tiempo, puede compartir la red creada en Hyper-V en la red de su máquina física, para que la máquina virtual pueda acceder a la red externa, como se muestra en la figura:
El nombre de host se puede establecer en una sola máquina o en todos los nodos.
# Ejecución del nodo maestro hostnamectl set - hostname k8s- master # Ejecutar desde el nodo hostnamectl set - nombre de host k8s-node1
Modifique el archivo / etc / hosts para asignar el nombre de host y la dirección IP.
vim / etc / hosts ## Agrega el siguiente contenido al archivo dirección ip k8s - maestro dirección IP k8s -node1
Establezca una dirección IP estática para evitar que la IP cambie cada vez que reinicie.
# Cambiar a este camino cd / etc / sysconfig / network- scripts #View 文件 信息 ls # Edite el primer archivo, el nombre general es ifcfg- ens + número, mi local es ifcfg- eth0 vim ifcfg - eth0 BOOTPROTO = " static " #Modificar a static IPADDR = 192.168 . 242.138 # Puede ser modificado por usted mismo GATEWAY = 192.168 . 242.2 # Lo mismo que la puerta de enlace en la red creada en la máquina física NETMASK = 255.255 . 255.0 ONBOOT = yes
Configurar DNS
vim / etc / resolv.conf #Escribe lo siguiente servidor de nombres 192.168 . 242.2 # y consistente de puerta de enlace
Reiniciar servicio de red
servicio de reinicio de red
Prueba
ping www.baidu.com
Apague y desactive el firewall
systemctl stop firewalld
systemctl deshabilitar firewalld
Cerrar SeLinux
Cierre selinux para permitir que el contenedor acceda al sistema de archivos del host.
# 禁用 sed -i ' s / enforcing / disabled / ' / etc / selinux / config #Verifique que esté cerrado cat / etc / selinux / config
Deshabilitar intercambio
Si no cierra la operación de kubernetes, se producirá un error. Incluso si la instalación se realiza correctamente, el error de operación del servidor de kubernetes también aparecerá después del reinicio del nodo .
# Edite el archivo, use # annotate swap
vim / etc / fstab
Reiniciar computadora
reiniciar
Ver intercambio
gratis -h
Ver estado de selinux
getenforce Disabled
Configuración de Docker
Configure la fuente de instalación yum de Docker e instale docker-ce.
Configurar la fuente de instalación de docker
yum -y install yum -utils yum -config-manager --add-repo http: // mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Verifique las versiones disponibles y seleccione la versión apropiada
yum list docker-ce --showduplicates | grep " ^ doc " | sort -r
Instalar
yum -y install docker-ce- 18.06 . 1 .ce- 3 .el7
Iniciar ventana acoplable
systemctl start docker
systemctl habilitar docker
# Verificar el estado de la ventana acoplable
acoplador de estado systemctl
Instalar k8s
Configurar kubernetes como espejo de Alibaba Cloud yum
echo " [kubernetes] name = Kubernetes baseurl = https: //mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled = 1 pgcheck = 1 repo_gpgcheck = 1 gpgkey = https: //mirrors.aliyun. com / kubernetes / yum / doc / yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg " > / etc / yum .repos.d / kubernetes.repo
Instalar componentes kubernetes
yum install -y parenting beadm kubectl --disableexcludes = kubernetes systemctl enable
# # 验证 验证 parenting 状态
systemctl status parenting
El comando anterior debe ejecutarse en el maestro y cada nodo por separado.
Instalar el nodo maestro kubernetes
Tenga en cuenta que si se trata de un Kubernetes de un solo nodo, debe configurarlo para permitir que los pods se distribuyan en el nodo maestro, de la siguiente manera
Kubectl Taint Nodos --todos node-role.kubernetes.io/master-
Haga una lista de las imágenes que deben instalarse.
lista de imágenes de configuración de kubeadm
Instalar herramienta de extracción
curl -Lo / usr / local / bin / azk8spull https: // github.com/xuxinkun/littleTools/releases/download/v1.0.0/azk8spullchmod + x / usr / local / bin / azk8spull
Cómo usar: azk8spull k8s.gcr.io/pause:3.1
Use la herramienta azk8spull para extraer las imágenes requeridas en secuencia
Configuración de red
echo 1 > / proc / sys / net / bridge / bridge-nf-call-iptables echo 1 > / proc / sys / net / ipv4 / ip_forward
Inicializa el maestro
sudo kubeadm init --pod-network-cidr = 10.244 . 0.0 / 16
Nota: --pod-network-cidr debe estar configurado, la dirección IP se escribe mejor arriba, porque también es la misma que la dirección de franela
Después de que la instalación sea exitosa, la declaración y el valor del token del clúster de unión se generarán de la siguiente manera:
Luego puede unir cualquier número de nodos de trabajo ejecutando lo siguiente en cada uno como root: kubeadm unirse a 192.168 . 137.205 : 6443 --token 66ym67.0wdrafrclpzuwk74 --discovery-token-ca-cert-hash sha256: e7b32df67ec6d75bf79c94499a40450aa5e33f6b23365cd7f0f6eaeba4f15c70
Se puede guardar para la instalación del nodo
Si la instalación falla, puede restablecer
restablecimiento de kubeadm
Configurar información de autorización
Después de que el inicio es exitoso, el nodo maestro se inicializa con éxito, y se realizarán algunas operaciones después del éxito. (Si falla, realice mejoras según el problema).
Para comenzar a usar el clúster, debe ejecutar el siguiente comando:
Esto es para configurar la información de autorización, principalmente para guardar la información de configuración relacionada en el directorio del usuario, de modo que no sea necesario ingresar la información de autenticación relevante cada vez.
mkdir -p $ HOME / .kube sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config sudo chown $ ( id -u): $ ( id -g) $ HOME / .kube / config
Comprobar configuración de kubelet
cat / var / lib / kubelet / kubeadm-flags. env
KUBELET_KUBEADM_ARGS = - cgroup-driver = cgroupfs --network-plugin = cni
Instalar franela
Flannel es una herramienta de Overlay Network diseñada por el equipo de CoreOS para Kubernetes. Su propósito es ayudar a cada host de CoreOS que use Kuberentes a tener una subred completa.
sysctl net.bridge.bridge-nf-call-iptables = kubectl apply -f https: // raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml acoplador de reinicio systemctl kubectl obtener nodos
Instalar nodo
Si solo desea instalar master, puede omitir
1. Instala la imagen
2. Configuración de red
3. Use la declaración guardada en el maestro para unir el nodo al clúster
kubeadm unirse a 192.168 . 137.205 : 6443 --token 66ym67.0wdrafrclpzuwk74 --discovery-token-ca-cert-hash sha256: e7b32df67ec6d75bf79c94499a40450aa5e33f6b23365cd7f0f6eaeba4f15c70
Si olvida, puede usar la siguiente declaración para obtener
kubeadm token de crear --print- unen -command
Instalar tablero
Obtener el archivo yaml del tablero
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
如果有墙,可以先把文件下载下来,然后复制到服务器
安装dashboard到k8s
kubectl apply -f kubernetes-dashboard.yaml
创建Admin用户
kubectl create clusterrolebinding admin --clusterrole=cluster-admin --user=admin
绑定Admin用户到kubernetes-dashboard服务
####如提示已经存在,则修改 clusterrolebinding 后的名称即可
kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard
进行端口转发
默认情况下,dashboard只能在localhost访问,所以需要对端口转发
####这样使用https://ip:10443端口访问即可 nohup kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 10443:443 --address 0.0.0.0 &
经过一系列操作之后,可以通过https://ip:10443进行访问,但是此时是只能通过token访问的,token获取方式如下:
####执行如下命令,获取所有的secret,找到名字为dashboard-admin的kubectl get secrets NAME TYPE DATA
AGEdashboard-admin-sa-token-zhjng kubernetes.io/service-account-token 3 16h
default-token-vqjcd kubernetes.io/service-account-token 3 17h ####执行如下命令,获取Token kubectl describe secret dashboard-admin-sa-token-zhjng
复制输出的token到登录界面即可。
启用Basic Auth(用户名和密码)
默认是token方式,比较繁琐
编辑kubernetes-dashboard.yaml文件(默认在/etc/kubernetesdashboard下)
####找到kind为Deployment下的containers-->节点,加入如下配置,默认为token
- --authentication-mode=basic
保存退出,现在访问https://ip:10443会有一个用户名和密码的输入框,可以登录成功,但是看不到数据。
通过kubectl getpods -n kubernetes-dashboard 查看DashBoard的pods状态,如果状态不为 Running,则表明其实失败或启动中。可以通过 kubectl describe pods -n kubernetes-dashboard进行查看,确定是否存在异常,如果发现最后的状态是Pull Image,表明拉取镜像太慢,可以手动通过 azk8spull imagename或者是通过docker pull imagename手动拉取。
Tips:强制替换执行yaml文件
kubectl replace --force -f kubernetes-dashboard.yaml
解决访问安全问题
经过上边的操作,可以使用用户名和密码登录,但是看不到数据,继续折腾。创建包含用户名和密码的csv文件
####格式是 密码,用户名,uid echo "admin,admin,1" > /etc/kubernetes/config/basic_auth.csv
编辑kube-apiserver.yaml文件
vim /etc/kubernetes/mainfests/kube-apierver.yaml ####找到-kube-apiserver节点,加入如下配置,注意层级 - --basic-auth-file=/etc/kubernetes/config/k8sdashboardauth.csv - --authorization-mode=Node,RBAC ####由于使用了配置文件,则需要把宿主机器的config文件夹挂载到容器中 ####1.在配置文件中找到volumes节点,加入如下配置,注意层级 - hostPath: path: /etc/kubernetes/config type: DirectoryOrCreate name: k8s-auth-config ####2.在配置文件中找到volumeMounts节点,加入如下配置,注意层级 - mountPath: /etc/kubernetes/config name: k8s-auth-config readOnly: true ####退出编辑,保存文件
这个时候,退出登录DashBoard,重新登录,不出意外,可以看到所有的数据了,到此为止,DashBoard实现了使用用户名和密码登录。
注意:不管是启动的kubernest相关的组件,还是DashBoard,都是运行在docker中的容器,当出现问题的时候,可以使用docker logs 容器名称(容器id)查看日志,或者使用 kubectl pods -n namespace方式查看pod的信息,进行确定问题所在。
总结:
通过一步一步,我们终于把kubernetes给安装成功了,同时也安装了一个dashboard可以可视化操作,也开启了用户名和密码方式的登录。到这里,kubernetes的安装工作就完成了,相信你跟着上述的步骤,可以成功的安装成功。
参考文章
https://blog.csdn.net/jholy/article/details/84962357