Primeiros passos com Kubernetes 1: introdução e preparação do ambiente

Notas de estudo do Kubernetes

Esta seção apresenta principalmente:

  • Alguns conhecimentos básicos de Kubernetes
  • Conteúdo operacional relacionado à construção de cluster Kubernetes

Prefácio

1. Evolução da implantação:

O processo de evolução de toda a implantação é mostrado na figura:

Insira a descrição da imagem aqui

  • Era de implantação tradicional:

    • Execute o aplicativo em um servidor físico
    • Não é possível definir limites de recursos para o aplicativo
    • levando a problemas de alocação de recursos

    Se você executar vários aplicativos em um servidor físico, poderá ocorrer uma situação em que um aplicativo ocupe a maior parte dos recursos, causando degradação do desempenho de outros aplicativos. Uma solução é executar cada aplicativo em um servidor físico diferente, mas isso não é escalonável devido à subutilização de recursos e o custo de manutenção de muitos servidores físicos é alto.

  • Implantação de virtualização

    • A tecnologia de virtualização permite que várias máquinas virtuais sejam executadas na CPU de um único servidor físico
    • A virtualização permite que os aplicativos sejam isolados entre máquinas virtuais e fornece certa segurança processual para que os aplicativos não possam ser acessados ​​à vontade.
    • A tecnologia de virtualização pode utilizar melhor os recursos em servidores físicos
    • Cada máquina virtual é um computador completo, executando todos os componentes no hardware virtualizado, incluindo seu próprio sistema operacional, etc.

    Desvantagens: Cada máquina virtual possui seu próprio sistema operacional, etc., e a camada virtual é redundante, resultando em desperdício de recursos e degradação de desempenho.

  • Implantação em contêiner

    • Os contêineres são semelhantes às máquinas virtuais, mas o sistema operacional pode ser compartilhado entre aplicativos (há apenas uma cópia do sistema operacional e ela é compartilhada entre cada programa)
    • Os contêineres são semelhantes às máquinas virtuais e possuem seu próprio sistema de arquivos, CPU, memória, espaço de processo, etc.
    • Devido à separação de contêineres e infraestrutura, ele pode ser facilmente transplantado entre nuvens e distribuições Linux.

1. kubernetesIntrodução

1.1 Visão geral

​Ékubernetes (k8s) uma plataforma de código aberto portátil e extensível para gerenciar cargas de trabalho e serviços em contêineres que facilita a configuração declarativa e a automação. KubernetesPossui um ecossistema grande e em rápido crescimento. KubernetesServiços, suporte e ferramentas estão amplamente disponíveis. k8sEsta abreviatura se deve ao relacionamento de oito caracteres entre k e s.

KubernetesDando-nos a seguinte funcionalidade:

  • Autocorreção : quando um contêiner trava, um novo contêiner pode ser iniciado rapidamente em cerca de 1 segundo
  • Escalonamento automático : o número de contêineres em execução no cluster pode ser ajustado automaticamente conforme necessário.
  • Descoberta de serviço : um serviço pode encontrar os serviços dos quais depende por meio da descoberta automática
  • Balanceamento de carga : se um serviço iniciar vários contêineres, o balanceamento de carga das solicitações pode ser realizado automaticamente
  • Reversão de versão : Se você encontrar um problema com a versão do programa recém-lançada, poderá reverter imediatamente para a versão original.
  • Orquestração de armazenamento : Os volumes de armazenamento podem ser criados automaticamente de acordo com as necessidades do próprio contêiner
    Insira a descrição da imagem aqui

1.2 componentes do Kubernetes

Um kubernetescluster é composto principalmente por um nó de controle (mestre) e um nó de trabalho (nó), e diferentes componentes são instalados em cada nó.

Insira a descrição da imagem aqui

mestre: o plano de controle do cluster, responsável pela tomada de decisão (gerenciamento) do cluster

ApiServer: A única entrada para operações de recursos, recebe comandos inseridos pelos usuários e fornece APImecanismos como autenticação, autorização, registro e descoberta.

Scheduler: responsável pelo agendamento de recursos do cluster e agendamento de pods para nós correspondentes de acordo com a estratégia de agendamento predeterminada.

ControllerManager: Responsável por manter o status do cluster, como arranjos de implantação de programas, detecção de falhas, expansão automática, atualizações contínuas, etc.

Etcd: Responsável por armazenar informações sobre vários objetos de recursos no cluster

nó: o plano de dados do cluster, responsável por fornecer o ambiente operacional (trabalho) para o contêiner

Kubelet : Responsável por manter o ciclo de vida do container, ou seja, criar, atualizar e destruir o container controlando o docker

KubeProxy: Responsável por fornecer descoberta de serviço e balanceamento de carga dentro do cluster

pod : Pod é outro encapsulamento do contêiner. Um pod pode conter vários contêineres.

  • O que o docker run inicia é um contêiner. O contêiner é a unidade básica do Docker. Um aplicativo é um contêiner.
  • kubectl runO que é iniciado é um aplicativo chamado Pod, e Pod é Kubernetes a unidade básica.

Docker : Responsável por diversas operações de containers em nós

A seguir, implante um serviço nginx para ilustrar o relacionamento de chamada entre vários componentes do sistema Kubernetes:

  1. Em primeiro lugar, deve ficar claro que uma vez kubernetesiniciado o ambiente, tanto o mestre quanto o nó armazenarão suas próprias informações no etcdbanco de dados.

  2. Uma nginxsolicitação de instalação de serviço será enviada primeiro ao componente masterdo nóapiServer

  3. apiServernodeO componente chamará o componente agendador para determinar em qual nó o serviço deve ser instalado .

    Nesse momento, ele irá ler as informações de cada nó do etcd, depois selecionar de acordo com um determinado algoritmo e informar o resultado ao apiServer.

  4. apiServerLigue controller-managerpara agendar o serviço Nodede instalação do nónginx

  5. kubeletApós receber a instrução, ele será notificado dockere dockerentão iniciará nginxumpod

    podSim kubernetes, a menor unidade operacional em que o contêiner deve funcionar pod. Para esse fim,

  6. Um serviço nginx está em execução. Se precisar acessar o nginx, você precisará usar o kube-proxy para gerar um proxy de acesso para o pod.

nginxDesta forma, usuários externos podem acessar serviços no cluster .

1.3 kubernetesGlossário de termos

  • Mestre : nó de controle do cluster.Cada cluster requer pelo menos um nó mestre para ser responsável pelo gerenciamento e controle do cluster.

  • : nó de carga de trabalho, o mestre aloca contêineres para esses nós de trabalho do nó e, em seguida, o docker no nó é responsável por executar o contêiner.

  • Pod : kubernetesa menor unidade de controle. Todos os contêineres são executados em pods. Pode haver um ou mais contêineres em um pod.

  • Controlador : Controlador, por meio do qual os pods são gerenciados, como iniciar pods, interromper pods, dimensionar o número de pods, etc.

  • Serviço : Uma entrada unificada para serviços externos do pod. Vários pods do mesmo tipo podem ser mantidos abaixo.

  • Rótulo : Rótulo, usado para classificar pods. Pods do mesmo tipo terão o mesmo rótulo.

  • NameSpace: Namespace, usado para isolar o ambiente de execução dos pods

2. Construção do ambiente de cluster

2.1 Introdução geral

1. Tipo de cluster:

Os clusters Kubernetes geralmente podem ser divididos em duas categorias:

  • **Um mestre e vários escravos:** Um nó mestre e vários nós de nó. Este método é simples de configurar. Quando o host mestre falhar de forma anormal, todo o cluster ficará inativo, o que é mais adequado para ambientes de teste.
  • Multi-mestre e multi-escravo: vários nós mestres e vários nós de nó. Este método é mais complicado de configurar, mas tem alta segurança. Quando um nó mestre falha, outros mestres podem assumir imediatamente o controle para garantir a operação normal do cluster.É usado principalmente para ambiente de produção.
    Insira a descrição da imagem aqui

2. Método de construção

Kubernetes tem uma variedade de métodos de implantação, os métodos convencionais atuais incluem kubeadm, minikube e pacotes binários.

  • minikube: uma ferramenta Kubernetes para construir rapidamente um único nó.

  • kubeadm: Uma ferramenta para construir clusters Kubernetes rapidamente (pode ser usada em ambientes de produção).

  • Pacote binário: Baixe o pacote binário de cada componente do site oficial e instale-o na ordem (recomendado para uso em ambientes de produção).

kubeadm é uma ferramenta lançada pela comunidade oficial para implantação rápida de clusters Kubernetes.Esta ferramenta pode completar a implantação de um cluster Kubernetes por meio de duas instruções:

  • Crie um nó mestre kubeadm init
  • Adicione o nó Node ao cluster atual $ kubeadm join <IP e porta do nó mestre>

Esta construção é realizada usando kubeadm.

3. Planejamento de hospedagem

Papel endereço de IP sistema operacional Configuração
mestre 192.168.79.100 CentOS7.9 + servidor de infraestrutura 2 núcleos 2G 20G
nó1 192.168.79.101 CentOS7.9 + servidor de infraestrutura 2 núcleos 2G 20G
nó2 192.168.79.102 CentOS7.9 + servidor de infraestrutura 2 núcleos 2G 20G

Esta construção de cluster: 3 servidores CentOS, um mestre, dois nós (um mestre e dois escravos) Servidor de infraestrutura CentOS 7.9

Instale docker (18.06.3); kubeadm (1.17.4); kubelet (1.17.4); kubectl (1.17.4) em cada servidor

  • Comunicação de rede entre todas as máquinas do cluster
  • Pode acessar a rede externa, precisa extrair a imagem
  • Desativar partição swap

2.2. Instale o CentOS 7 no VM Ware

Passos para instalar o CentOS7 no VMWare e configurar o endereço IP:

  1. Primeiro baixe e instale o software VM e a versão CentOS7 da imagem: Endereço de download:

Endereço para download do software:

Endereço de download do CentOS7 Alibaba Cloud: Clique aqui para baixar a imagem do CentOS7

VM Ware: Link do disco na nuvem: Link para download do disco na nuvem Código de extração: 5lgm

  1. VMInstale 3 servidores respectivamente através do software CentOS, um é o master e dois são Node. Tome um deles como exemplo. Consulte outro artigo para o processo de instalação específico:

    CentOS7Detalhes de instalação

    Clique aqui para ver o processo detalhado de instalação do CentOS7

2.3 Inicialização do ambiente

Após a instalação dos três servidores CentOS, conforme mostrado na figura, eles podem ser conectados através do software MobaXterm e três máquinas podem ser operadas ao mesmo tempo.

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui

  1. Verifique a versão de instalação do CentOS e certifique-se de que é CentOS7 ou superior.

    # 此方式安装k8s集群要求CentOS 版本必须在7.5以之上,本次使用7.9版本
    [root@master ~]# cat /etc/centos-release
    CentOS Linux release 7.9.2009 (Core)
    [root@master ~]#
    
  2. Resolução de nome de domínio host

    Para facilitar o acesso direto entre nós do cluster, configure a resolução de nomes de domínio do host.

    #编辑三台服务器的/etc/hosts文件,在里面添加如下内容:
    192.168.79.100 master
    192.168.79.101 node1
    192.168.79.102 node2
    
  3. Sincronização de horário

    k8sÉ necessário que o horário do nó no cluster seja preciso e sempre utilize chronydum serviço para sincronizar o horário da rede.

    # 启动chronyd服务
    [root@master ~]# systemctl start chronyd
    # 将其设置为开机自启动
    [root@master ~]# systemctl enable chronyd
    # 查看当前三台机器的时间(只展示其中master一台)
    [root@master ~]# date
    2022年 07月 01日 星期五 13:04:36 CST
    
  4. Desative os serviços iptables e firewalld

    k8s e docker irão gerar um grande número de regras de iptables durante a operação.Para não se confundir com as regras do sistema, feche diretamente as regras do sistema.

    # 关闭firewalld
    [root@master ~]# systemctl stop firewalld
    # 设置为开启禁止自启
    [root@master ~]# systemctl disable firewalld
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    # 关闭iptables (本机器没有iptales)
    [root@master ~]# systemctl stop iptables
    Failed to stop iptables.service: Unit iptables.service not loaded.
    
  5. desabilitar selinux

    selinux é um serviço de segurança do sistema Linux, se não for desligado, vários problemas ocorrerão durante a instalação do cluster.

    # 编辑注册表/etc/selinux/config文件,修改SELINUX的值为disabled 修改完之后需要重启Linux服务才能生效
    
    # 当前为开启状态
    [root@master ~]# getenforce
    Enforcing
    # 
    [root@master ~]# vim /etc/selinux/config
    # 进入该文件进行修改
    

Insira a descrição da imagem aqui

  1. Desativar partição swap

    A partição swap é uma partição de memória virtual.Depois que a memória física é usada, o espaço em disco é virtualizado em memória para uso. Iniciar o dispositivo swap terá um impacto no desempenho do sistema, portanto desative a partição swap diretamente.

    # 编辑分区的配置文件/etc/fstab 注释掉swap分区这一行内容,修改之后需要重启服务
    [root@master ~]# vim /etc/fstab
    

Insira a descrição da imagem aqui

  1. Modifique os parâmetros do kernel Linux

    #修改Linux的内核参数,添加网桥过滤和地址转发功能
    # 编辑(新建)/etc/sysctl.d/kubernetes.conf文件,添加如下配置
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    
    # 保存退出之后重新加载配置
    [root@master ~]# sysctl -p
    
    # 加载网桥过滤模块
    [root@master ~]# modprobe br_netfilter
    
    # 查看该模块是否加载成功
    [root@master ~]# lsmod | grep br_netfilter
    br_netfilter           22256  0
    bridge                151336  1 br_netfilter
    

    Insira a descrição da imagem aqui

  2. ipvsFunção de configuração

    Existem dois modos de proxy em , um é baseado em , e o outro é baseado em . Comparando os dois, k8so desempenho de , é maior. Para usar este modo, você precisa carregar manualmente o módulo.serviceiptablesipvsipvsipvs

    # 1.安装ipset和ipvsadm
    [root@master ~]# yum install ipset ipvsadmin -y
    已加载插件:fastestmirror, langpacks
    Determining fastest mirrors
     * base: mirrors.aliyun.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    base                                                                    | 3.6 kB  00:00:00
    extras                                                                  | 2.9 kB  00:00:00
    updates                                                                 | 2.9 kB  00:00:00
    (1/4): base/7/x86_64/primary_db                                         | 6.1 MB  00:00:00
    (2/4): base/7/x86_64/group_gz                                           | 153 kB  00:00:00
    (3/4): extras/7/x86_64/primary_db                                       | 247 kB  00:00:00
    (4/4): updates/7/x86_64/primary_db                                      |  16 MB  00:00:18
    软件包 ipset-7.1-1.el7.x86_64 已安装并且是最新版本
    没有可用软件包 ipvsadmin。
    无须任何处理
    
    # 2.添加需要加载的模块写入脚本文件
    [root@master ~]# cat <<EOF> /etc/sysconfig/modules/ipvs.modules
    > #!/bin/bash
    > modprobe -- ip_vs
    > modprobe -- ip_vs_rr
    > modprobe -- ip_vs_wrr
    > modprobe -- ip_vs_sh
    > modprobe -- nf_conntrack_ipv4
    > EOF
    
    # 3. 为脚本文件添加执行权限
    [root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
    
    # 4. 执行脚本文件
    [root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
    
    # 5. 查看对应模块是否加载成功
    [root@node2 ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    nf_conntrack_ipv4      15053  0
    nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
    ip_vs_sh               12688  0
    ip_vs_wrr              12697  0
    ip_vs_rr               12600  0
    ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
    nf_conntrack          139264  2 ip_vs,nf_conntrack_ipv4
    libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
    [root@master ~]#
    
  3. Reinicie o servidor

    [root@master ~]# reboot
    
  4. Após reiniciar o serviço, verifique selinuxse o desligamento foi bem-sucedido.

    # 显示Disabled 关闭成功
    [root@master ~]# getenforce
    Disabled
    
    

2.4 Instalar janela de encaixe

  1. A fonte de imagem oficial do Docker é lenta, mude para a fonte de imagem do Alibaba Cloud

    # 切换为阿里云的镜像源
    [root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
  2. Verifique as versões do docker suportadas na fonte da imagem atual

    # 支持的docker版本,本次选择 docker-ce-18.06.3.ce-3.el7
    [root@master ~]# yum list docker-ce --showduplicates
    [root@master ~]#
    
    

Insira a descrição da imagem aqui

  1. Instale a versão especificadadocker-ce

    # --setopt=obsoletes=0 表示指定安装对应版本
    [root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
    
  2. Adicione um arquivo de configuração

    # Docker 默认情况下使用Cgroupfs,而k8s推荐使用systemd来替代cgroupfs, 更换下载的镜像源
    [root@master ~]# mkdir /etc/docker
    
    [root@master ~]# cat <<EOF> /etc/docker/daemon.json
    {
          
          
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors":["https://kn0t2bca.mirror.aliyuncs.com"]
    }
    EOF
    
  3. Iniciar janela de encaixe

    # 启动docker
    [root@master ~]# systemctl restart docker
    # 设置为开机自启
    [root@master ~]# systemctl enable docker
    
  4. Verifique o status do docker e as informações da versão

    #检查版本信息
    [root@master ~]# docker version
    Client:
     Version:           18.06.3-ce
     API version:       1.38
     Go version:        go1.10.3
     Git commit:        d7080c1
     Built:             Wed Feb 20 02:26:51 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server:
     Engine:
      Version:          18.06.3-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       d7080c1
      Built:            Wed Feb 20 02:28:17 2019
      OS/Arch:          linux/amd64
      Experimental:     false
    [root@master ~]#
    
    

2.5 Instalar kubernetescomponentes

  1. Alternar fonte de imagem k8s

    # k8s镜像源在国外,下载速度较慢,切换为阿里云的
    # 编辑(新建文件)/etc/yum.repos.d/kubernetes.repo, 添加如下的配置:
    [root@master ~]# vim /etc/yum.repos.d/kubernetes.repo
    [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
    

Insira a descrição da imagem aqui

  1. Instalação kubeadm, kubectl,kubelet

    # 安装指定版本 1.17.4
    [root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
    
  2. Modificar arquivo de configuração

    # 配置kubelet的cgroup, 编辑/etc/sysconfig/kubelet,添加如下配置:
    [root@master ~]# vim /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
    KUBE_PROXY_MODE="ipvs"
    
  3. Configure o kubelet para iniciar automaticamente na inicialização

    [root@master ~]# systemctl enable kubelet
    

Todo o conteúdo das versões 2.2-2.5 anteriores precisa ser operado em três máquinas virtuais para se preparar para a construção de um ambiente de cluster.

2.6 Inicialização do cluster

Comece a inicializar o cluster e adicione o nó ao cluster. Todas as etapas a seguir só precisam ser executadas no nó mestre.

  1. Crie um cluster

    # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址
    [root@master ~]# kubeadm init --kubernetes-version=v1.17.4 --apiserver-advertise-address=192.168.79.100 --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
    # 下面是执行命令之后的运行结果
    W0701 15:41:54.850536    9562 validation.go:28] Cannot validate kube-proxy config - no validator is available
    W0701 15:41:54.850592    9562 validation.go:28] Cannot validate kubelet config - no validator is available
    [init] Using Kubernetes version: v1.17.4
    [preflight] Running pre-flight checks
    [preflight] Pulling images required for setting up a Kubernetes cluster
    [preflight] This might take a minute or two, depending on the speed of your internet connection
    [preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
    [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
    [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
    [kubelet-start] Starting the kubelet
    [certs] Using certificateDir folder "/etc/kubernetes/pki"
    [certs] Generating "ca" certificate and key
    [certs] Generating "apiserver" certificate and key
    [certs] apiserver serving cert is signed for DNS names [master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.79.100]
    [certs] Generating "apiserver-kubelet-client" certificate and key
    [certs] Generating "front-proxy-ca" certificate and key
    [certs] Generating "front-proxy-client" certificate and key
    [certs] Generating "etcd/ca" certificate and key
    [certs] Generating "etcd/server" certificate and key
    [certs] etcd/server serving cert is signed for DNS names [master localhost] and IPs [192.168.79.100 127.0.0.1 ::1]
    [certs] Generating "etcd/peer" certificate and key
    [certs] etcd/peer serving cert is signed for DNS names [master localhost] and IPs [192.168.79.100 127.0.0.1 ::1]
    [certs] Generating "etcd/healthcheck-client" certificate and key
    [certs] Generating "apiserver-etcd-client" certificate and key
    [certs] Generating "sa" key and public key
    [kubeconfig] Using kubeconfig folder "/etc/kubernetes"
    [kubeconfig] Writing "admin.conf" kubeconfig file
    [kubeconfig] Writing "kubelet.conf" kubeconfig file
    [kubeconfig] Writing "controller-manager.conf" kubeconfig file
    [kubeconfig] Writing "scheduler.conf" kubeconfig file
    [control-plane] Using manifest folder "/etc/kubernetes/manifests"
    [control-plane] Creating static Pod manifest for "kube-apiserver"
    [control-plane] Creating static Pod manifest for "kube-controller-manager"
    W0701 15:42:21.370847    9562 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
    [control-plane] Creating static Pod manifest for "kube-scheduler"
    W0701 15:42:21.371810    9562 manifests.go:214] the default kube-apiserver authorization-mode is "Node,RBAC"; using "Node,RBAC"
    [etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
    [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
    [apiclient] All control plane components are healthy after 15.006014 seconds
    [upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
    [kubelet] Creating a ConfigMap "kubelet-config-1.17" in namespace kube-system with the configuration for the kubelets in the cluster
    [upload-certs] Skipping phase. Please see --upload-certs
    [mark-control-plane] Marking the node master as control-plane by adding the label "node-role.kubernetes.io/master=''"
    [mark-control-plane] Marking the node master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
    [bootstrap-token] Using token: l8o7vp.gbiatmb3iexxbppo
    [bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
    [bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
    [bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
    [bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
    [bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
    [kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
    [addons] Applied essential addon: CoreDNS
    [addons] Applied essential addon: kube-proxy
    # 显示集群下载安装完毕
    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/
    
    # 将任意多的worker nodes加入到根中
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo \
        --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
    
    
  2. Crie os arquivos necessários:

    sudo chown $(id -u):$(id -g) $HOME/.kube/config# 集群创建完毕之后显示下面这段提示,
    # 需要运行下面这段话
    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
      
    [root@master ~]# mkdir -p $HOME/.kube
    [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 此时查看node会发现这个集群只有一个master节点,需要将node节点加入到集群中
    [root@master ~]# kubectl get nodes
    NAME     STATUS     ROLES    AGE     VERSION
    master   NotReady   master   4m51s   v1.17.4
    [root@master ~]#
    
  3. Para adicionar nós ao cluster, você precisa executar os seguintes comandos em node1 e node2

    # 将任意多的worker nodes加入到根中
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo \
        --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
        
    # 分别在node1和node2中运行这两句命令
    [root@node1 ~]# kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
    
    [root@node2 ~]# kubeadm join 192.168.79.100:6443 --token l8o7vp.gbiatmb3iexxbppo --discovery-token-ca-cert-hash sha256:dfa1740b693f91f1e3eaf889c50802195d7dc30a4f2a3c7a9b7101b295ad1fe9
    
    #加入到集群之后,查看master机器中集群的节点信息:此时显示所有的node均已添加进来,但是还处于NotReady的状态,需要添加网络插件
    [root@master ~]# kubectl get nodes
    NAME     STATUS     ROLES    AGE    VERSION
    master   NotReady   master   8m9s   v1.17.4
    node1    NotReady   <none>   14s    v1.17.4
    node2    NotReady   <none>   31s    v1.17.4
    [root@master ~]#
    
    
  4. Configurar plug-in de rede

    # 下载网络插件到yml文件中
    [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 控制台的执行结果如下
    --2022-07-01 15:53:27--  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ...
    正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度:5750 (5.6K) [text/plain]
    正在保存至: “kube-flannel.yml”
    
    100%[=======================================================================================================================================================================>] 5,750       --.-K/s 用时 0s
    
    2022-07-01 15:53:28 (18.3 MB/s) - 已保存 “kube-flannel.yml” [5750/5750])
    
    # 将文件应用 apply命令
    [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 执行过程
    podsecuritypolicy.policy/psp.flannel.unprivileged created
    clusterrole.rbac.authorization.k8s.io/flannel created
    clusterrolebinding.rbac.authorization.k8s.io/flannel created
    serviceaccount/flannel created
    configmap/kube-flannel-cfg created
    daemonset.apps/kube-flannel-ds created
    
    # 新开master的控制台窗口, 查看运行进度条情况
    [root@master ~]# kubectl get pods -n kube-system
    NAME                             READY   STATUS              RESTARTS   AGE
    coredns-9d85f5447-4r5vf          0/1     ContainerCreating   0          12m
    coredns-9d85f5447-r9k4g          0/1     ContainerCreating   0          12m
    etcd-master                      1/1     Running             0          12m
    kube-apiserver-master            1/1     Running             0          12m
    kube-controller-manager-master   1/1     Running             0          12m
    kube-flannel-ds-298ct            1/1     Running             0          61s
    kube-flannel-ds-z6whb            1/1     Running             0          61s
    kube-flannel-ds-zl4mx            1/1     Running             0          61s
    kube-proxy-9m6xw                 1/1     Running             0          12m
    kube-proxy-mhssb                 1/1     Running             0          5m23s
    kube-proxy-mnn62                 1/1     Running             0          5m6s
    kube-scheduler-master            1/1     Running             0          12m
    # 查看nodes的状态显示处于Ready状态
    [root@master ~]# kubectl get nodes
    NAME     STATUS   ROLES    AGE     VERSION
    master   Ready    master   13m     v1.17.4
    node1    Ready    <none>   5m46s   v1.17.4
    node2    Ready    <none>   6m3s    v1.17.4
    
    # 所有组件处于running运行状态
    [root@master ~]# kubectl get pods -n kube-system
    NAME                             READY   STATUS    RESTARTS   AGE
    coredns-9d85f5447-4r5vf          1/1     Running   0          13m
    coredns-9d85f5447-r9k4g          1/1     Running   0          13m
    etcd-master                      1/1     Running   0          13m
    kube-apiserver-master            1/1     Running   0          13m
    kube-controller-manager-master   1/1     Running   0          13m
    kube-flannel-ds-298ct            1/1     Running   0          111s
    kube-flannel-ds-z6whb            1/1     Running   0          111s
    kube-flannel-ds-zl4mx            1/1     Running   0          111s
    kube-proxy-9m6xw                 1/1     Running   0          13m
    kube-proxy-mhssb                 1/1     Running   0          6m13s
    kube-proxy-mnn62                 1/1     Running   0          5m56s
    kube-scheduler-master            1/1     Running   0          13m
    [root@master ~]#
    

Neste ponto, todo o cluster foi configurado.

2.6 Teste de cluster

Implantar nginxe testar o ambiente de cluster

# 1. 部署nginx 版本 1.14-alpine
[root@master ~]# kubectl create deployment nginx --image=nginx:1.14-alpine
deployment.apps/nginx created

# 2. 暴露端口
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed

# 3. 查看服务状态 一个pod已经正在运行, service服务处于运行状态
[root@master ~]# kubectl get pods,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-6867cdf567-ppmrj   1/1     Running   0          60s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        18m
service/nginx        NodePort    10.104.243.191   <none>        80:30134/TCP   43s

# 4. 获取集群的pod信息
[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6867cdf567-ppmrj   1/1     Running   0          81s
[root@master ~]#

# 5. 根据暴露的端口,可以通过浏览器访问部署的nginx
# 访问地址为: 192.168.79.100:30134
# 访问结果如下图所示:成功访问到部署的nginx页面,部署成功

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_43155804/article/details/125831675
Recomendado
Clasificación