nodo nodo de instalación binaria k8s

Algunos problemas con la implementación de nodos

  1. La implementación del nodo no implica la replicación de certificados, y la autenticación y autorización se generan a través de kubectl config (el acceso de todo el clúster debe pasar las dos etapas de autenticación y autorización)
  2. La red del nodo del nodo se puede basar en el propio cni de la ventana acoplable y en el complemento de red (franela) para completar la función de red (la diferencia es que la ventana acoplable viene con ella solo puede ser utilizada por la ventana acoplable)
  3. La autorización se basa en el nombre de usuario, y tanto kubelet como kube-porxy necesitan acceder a los recursos a través de la autorización de roles.
  4. Después de implementar un nodo, otros nodos pueden usar directamente el archivo coincidente (siempre que se modifique el nombre para mostrar del nodo -hostname-override = k8s-nodex, no se puede agregar el mismo nombre al clúster)
  5. Después de la solicitud de autenticación del nodo, se debe confirmar la sección maestra. Si encuentra un error de configuración o modifica la configuración, debe eliminar todos los archivos de certificado generados por el nodo, luego eliminar la información de la solicitud maestra y finalmente reiniciar el kubelet servicio y volver a unirse al clúster

nodo nodo

  • kubelet: darse cuenta del ciclo de vida del contenedor
  • kube-proxy: Responsable de escribir reglas en IPTABLES, IPVS para lograr el acceso al mapeo de servicios (para lograr el acceso a las aplicaciones de Pod fuera del clúster)
mkdir -p /usr/local/k8s/{
    
    conf,logs}
#创建工作目录
#拷贝kubelet和kube-proxy二进制文件到/usr/local/bin

Generar archivo de certificación

  • kubelet se basa en la autenticación de token
  • autenticación de certificado de proxy kube

kubele

head -c 16 /dev/urandom | od -An -t x | tr -d ' '
#自动生成一个随机token

cat token.csv 
64c8a4bd1c2e920aa92049044b5197ba,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
#格式:token,用户名,UID,用户组

proxy de kube

cat kube-proxy-csr.json
{
    
    
    "CN": "kube-proxy",
    "hosts": [ ],
    "key": {
    
    
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
    
    
            "C": "CN",
            "L": "SHANGHAI",
            "ST": "SHANGHAI"
        }
    ]
}
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server kube-proxy-csr.json | cfssljson -bare /opt/etcd/ssl/k8s/kube-proxy
#只要注意-profile指定的名称,这个是ca证书里指定的

Archivo de configuración kubeconfig generation

kubeconfig se usa para autenticar kubelet y kube-proxy para acceder al clúster en los nodos de nodo

kubele

kubectl config set-cluster k8s-master   --certificate-authority=/usr/local/k8s/ssl/ca.pem   --embed-certs=true   --server=https://192.168.12.2:6443 --kubeconfig=kubelet-bootstrap.kubeconfig
#配置集群参数,修改ca公钥和集群server地址

kubectl config set-credentials kubelet-bootstrap --token=64c8a4bd1c2e920aa92049044b5197ba --kubeconfig=kubelet-bootstrap.kubeconfig
#配置客户端认证参数,token值就是生成token文件里的

kubectl config set-context default --cluster=k8s-master --user=kubelet-bootstrap --kubeconfig=kubelet-bootstrap.kubeconfig
#设置上下文参数,集群参数和用户参数可以同时设置多对,在上下文参数中将集群参数和用户参数关联起来
#上下文名称default,集群名称k8s-master,访问集群的用户名为kubelet-bootstrap

proxy de kube

kubectl config set-cluster k8s-master   --certificate-authority=/usr/local/k8s/ssl/ca.pem   --embed-certs=true   --server=https://192.168.12.2:6443 --kubeconfig=kube-proxy.kubeconfig

kubectl config set-credentials kube-proxy --client-certificate=/usr/local/k8s/ssl/kube-proxy.pem \ 
--client-key=/usr/local/k8s/ssl/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig
#不同在于kube-proxy使用认证方式

kubectl config set-context default --cluster=k8s-master --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig
#用户kube-proxy 

Copie los archivos generados al nodo

Autorización de usuario

kubeconfig completa la autenticación del clúster, pero también requiere la autorización de recursos del usuario para acceder oficialmente al clúster

kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap

kubectl create clusterrolebinding kube-proxy \
--clusterrole=system:node-proxier \
--user=kube-proxy
#clusterrole代表的是集群角色,也就是所有的namespace资源
#2个角色的授权资源可以通过命令查看,system:node-bootstrapper和system:node-proxier都是自带的集群角色

Vista de rol

kubectl get clusterrole
#查看所有的集群角色

kubectl get clusterrole system:node-bootstrapper -o yaml
#查看system:node-bootstrapper角色的yaml信息
#verbs授权资源,create、get、list、watch

kubectl get clusterrolebinding kube-proxy -o wide
#查看集群构建kube-proxy详细信息

La fase de preparación ha terminado

archivo de configuración de kubele

cat kubelet.conf
KUBELET_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/local/k8s/logs \
--hostname-override=k8s-node1 \
--kubeconfig=/usr/local/k8s/conf/kubelet.kubeconfig \
--bootstrap-kubeconfig=/usr/local/k8s/conf/kubelet-bootstrap.kubeconfig \
--cert-dir=/usr/local/k8s/ssl \
--cluster-dns=10.2.0.2 \
--cluster-domain=cluster.local. \
--fail-swap-on=false \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

kubelet --ayuda

  • --Hostname-override: nombre para mostrar del nodo
  • - Complemento de red: Habilitar CNI #Use CNI de terceros debe configurarse, no se puede usar la ventana acoplable predeterminada
  • --Kubeconfig: ruta vacía, se generará automáticamente, luego se usará para conectarse a apiserver
  • –Bootstrap-kubeconfig: primero comience a solicitar un certificado de apiserver
  • –Cert-dir: directorio de generación de certificados de kubelet
  • --Pod-infra-container-image: administra la imagen del contenedor de red de Pod

pod-infra-container-image es el contenedor de pausa, que realiza el montaje y el espacio de nombres de red compartido

gestión systemcd

cat /usr/lib/systemd/system/kubelet.service 
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

[Service]
EnvironmentFile=/usr/local/k8s/conf/kubelet.conf
ExecStart=/usr/local/bin/kubelet $KUBELET_OPTS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target

systemctl start kubelet.service
#启动服务

configuración de kube-proxy

cat  kube-proxy.conf
KUBE_PROXY_OPTS="--logtostderr=false \
--v=2 \
--log-dir=/usr/loacl/k8s/logs \
--config=/usr/local/k8s/conf/kube-proxy-config.yml"

--Config almacena los parámetros de configuración

cat kube-proxy-config.yml
kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0
metricsBindAddress: 0.0.0.0:10249
clientConnection:
 kubeconfig: /usr/local/k8s/conf/kube-proxy.kubeconfig
hostnameOverride: k8s-node1
clusterCIDR: 10.2.0.0/24

kube-proxy --help

Parámetros de referencia: https://github.com/kubernetes/kube-proxy/blob/20569a1933eee4b6a526bfe564d476dd7e29c020/config/v1alpha1/types.go#L136
Plantilla de configuración: https://github.com/ReSearchITEng/kubeadm-playbook/blob/master /group_vars/all/KubeProxyConfiguration.yml

gestión systemcd

 cat /usr/lib/systemd/system/kube-proxy.service 
[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
EnvironmentFile=-/usr/local/k8s/conf/kube-proxy.conf
ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_OPTS
Restart=on-failure

[Install]
WantedBy=multi-user.target

Comprobar estado

kubectl get node -o wide
#查看节点详细信息

kubectl run nginx --image=nginx --replicas=2
kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
#创建测试pod

kubectl get pods
#查看pod,默认namespace=default 

El proceso de construcción es comprender cada componente. La configuración debe ajustarse más tarde. La configuración se refiere a los videos en línea y de aprendizaje. El funcionario en sí no proporciona un tutorial de instalación binaria. Todas las configuraciones se basan en la comprensión de los componentes. En presente, la configuración solo se puede decir. Está en funcionamiento, lo cual es muy útil para ajustes de aprendizaje posteriores. La configuración correcta o incorrecta puede ser ajustada o verificada por usted mismo en la etapa posterior.

Supongo que te gusta

Origin blog.csdn.net/yangshihuz/article/details/112313055
Recomendado
Clasificación