notas de estudo k8s (1): implantação da arquitetura mestre único k8s

Diretório de artigos

Instalação e implantação da arquitetura mestre único k8s

Preparação ambiental

3 novos sistemas centos7.9, CPU de 4 núcleos, memória 2G e disco 200G

Declaração Ambiental

  • podSubnet (segmento de rede pod) 10.244.0.0/16
  • serviceSubnet (segmento de rede de serviço): 10.96.0.0/16
  • Segmento de rede da máquina física: 192.168.31.0/24

Arquitetura de cluster

Função do cluster K8S IP Nome da CPU Instalar componentes
nó de controle 192.168.31.180 k8s-mestre apiserver、gerenciador de controle、agendador、etcd、kube-proxy、docker、calico
Nó de trabalho 192.168.31.181 k8s-nó-1 kublet, kube-proxy, docker, chita, coredns
Nó de trabalho 192.168.31.182 k8s-nó-2 kublet, kube-proxy, docker, chita, coredns

etapas de instalação

1. Inicialize e instale o ambiente experimental do cluster k8s (devem ser operados três k8s, por conveniência, registrei apenas o funcionamento de um)

1. Configure o IP e o nome do host de acordo com a arquitetura do cluster.

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.180
PREFIX=24
GATEWAY=192.168.31.1
DNS1=114.114.114.114
[root@localhost ~]# hostnamectl set-hostname k8s-master
[root@localhost ~]# su
[root@k8s-master ~]#

A configuração das outras duas máquinas é semelhante, configure o IP e o nome do host de acordo com a arquitetura do cluster.

2. Desligue o firewall e o selinux em todos os nós

[root@k8s-master ~]# service firewalld stop #临时关闭防火墙
Redirecting to /bin/systemctl stop firewalld.service
[root@k8s-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.
[root@k8s-master ~]# setenforce 0 #临时关闭selinux
[root@k8s-master ~]# getenforce 
Permissive
[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  #永久关闭selinux

Função: Impedir que a comunicação entre hosts do cluster k8s seja bloqueada

As outras duas máquinas operam da mesma forma

3. Modifique o arquivo /etc/hosts e acesse-os por meio de nomes de host.

Todas as operações de nó

[root@k8s-master ~]# vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.31.180 k8s-master
192.168.31.181 k8s-node-1
192.168.31.182 k8s-node-2

4. Todos os nós estabelecem canais livres de segredos entre si

k8s-mestre

[root@k8s-master ~]# ssh-keygen
[root@k8s-master ~]# ssh-copy-id k8s-node-1
[root@k8s-master ~]# ssh-copy-id k8s-node-2

k8s-nó-1

[root@k8s-node-1 ~]# ssh-keygen
[root@k8s-node-1 ~]# ssh-copy-id k8s-master
[root@k8s-node-1 ~]# ssh-copy-id k8s-node-2

k8s-nó-2

[root@k8s-node-2 ~]# ssh-keygen
[root@k8s-node-2 ~]# ssh-copy-id k8s-master
[root@k8s-node-2 ~]# ssh-copy-id k8s-node-1

5. Desligue a partição swap para melhorar o desempenho

Faça todos os três

[root@k8s-master ~]# swapoff -a

Função: Use a memória tanto quanto possível, não use partições swap de disco e melhore o desempenho.Para
melhorar o desempenho quando o k8s é projetado, o uso de partições swap não é permitido por padrão . Quando o Kubeadm é inicializado, ele detecta se o swap está fechado. Se não for fechado, a inicialização falhará . Se não quiser desligar a partição swap, você pode especificar –ignore-preflight-errors=Swap ao instalar o k8s para resolver o problema.

Feche a partição swap permanentemente

[root@k8s-master ~]# vim /etc/fstab

Insira a descrição da imagem aqui

6. Modifique os parâmetros do kernel da máquina

Faça todos os três

[root@k8s-master ~]# modprobe br_netfilter            #可以解决 sysctl -p /etc/sysctl.d/k8s.conf出现报错:
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile               #设置开机启动
[root@k8s-master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf                   #从指定的文件加载系统参数

7. Configure a fonte de repositório do Alibaba Cloud

[root@k8s-master ~]# yum install -y yum-utils
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Configurar a fonte de imagem do Docker doméstica tornará as extrações de imagens subsequentes muito mais rápidas.

8. Instale todos os pacotes de dependência exigidos pelo cluster

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm

9. Configure a fonte de repositório Alibaba Cloud necessária para instalar os componentes k8s

[root@k8s-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

10. Configure a sincronização de horário

Instale o comando ntpdate

[root@k8s-master ~]# yum install -y ntpdate

Sincronizar horário da rede

[root@k8s-master ~]# ntpdate cn.pool.ntp.org

Faça da sincronização de horário uma tarefa agendada

[root@k8s-master ~]# crontab -e

* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

Reinicie o serviço crond

[root@k8s-master ~]# service crond restart

2. Instale o serviço docker (opera em todos os três hosts k8s)

1.Instale o docker-ce

Instalar janela de encaixe

[root@k8s-master ~]# yum install docker-ce-20.10.6 -y

Início automático + início automático na inicialização

[root@k8s-master ~]# systemctl start docker && systemctl enable docker.service

2. Configure o acelerador e driver de imagem do Docker

Adicionar acelerador de imagem
[root@k8s-master ~]# vim /etc/docker/daemon.json

{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

Modifique o driver do arquivo docker para systemd. O padrão é cgroupfs. Kubelet usa systemd por padrão. Os dois devem ser consistentes .

Atualize o systemd e reinicie o docker
[root@k8s-master ~]# systemctl daemon-reload  && systemctl restart docker
Verifique o status de execução do docker
[root@k8s-master ~]# systemctl status docker

Insira a descrição da imagem aqui

3. Instale os pacotes de software necessários para inicializar o k8s (operar em todos os três hosts k8s)

1. Instale kubeadm, kubelet, kubectl

[root@k8s-master ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

2. Inicie o kubelet automaticamente após a inicialização

[root@k8s-master ~]# systemctl enable kubelet
Programas efeito
Kubeadm kubeadm é uma ferramenta usada para inicializar clusters k8s
Kubelet Instalado em todos os nós do cluster e usado para iniciar pods
Kubectl Através do kubectl, você pode implantar e gerenciar aplicativos, visualizar vários recursos, criar, excluir e atualizar vários componentes.

4. Importe pacotes de imagens offline para acelerar extrações de imagens subsequentes

1. Faça upload do pacote de imagem offline necessário para inicializar o cluster k8s em três hosts k8s

O pacote de compactação de imagem é carregado no diretório inicial do host k8s por meio do xftp.

[root@k8s-master ~]# ls
anaconda-ks.cfg  k8simage-1-20-6.tar.gz

scp para dois outros hosts

[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.181:/root
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz 192.168.31.182:/root

2.docker carregar imagem de importação

[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz

5. Kubeadm inicializa o cluster k8s (feito apenas no mestre)

1. Gere o arquivo kubeadm.yaml

[root@k8s-master ~]# kubeadm config print init-defaults > kubeadm.yaml

2. Modifique a configuração relevante do arquivo kubeadm.yaml

[root@k8s-master ~]# vim kubeadm.yaml 

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.31.180
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

Insira a descrição da imagem aqui

Lembrete especial : –image-repository Registry.aliyuncs.com/google_containers Para garantir que a imagem extraída não seja extraída de sites estrangeiros, especifique manualmente o endereço do armazém como Registry.aliyuncs.com/google_containers. kubeadm extrai imagens de k8s.gcr.io por padrão. Importamos imagens offline localmente, portanto as imagens locais serão usadas primeiro.

mode: ipvs indica que o modo de proxy kube-proxy é ipvs. Se ipvs não for especificado, iptables será usado por padrão. No entanto, iptables é ineficiente, por isso é recomendado habilitar ipvs em nosso ambiente de produção.

3. Inicialize o k8s com base no arquivo kubeadm.yaml

[root@k8s-master ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

Insira a descrição da imagem aqui

4. Configurar o arquivo de configuração kubectl é equivalente a autorizar kubectl para que o comando kubectl possa usar este certificado para gerenciar o cluster k8s.

[root@k8s-master ~]#   mkdir -p $HOME/.kube
[root@k8s-master ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

Ver informações do nó

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE    VERSION
k8s-master   NotReady   control-plane,master   177m   v1.20.6

Verificou-se que existe apenas mestre, pois os outros dois nós ainda não aderiram ao mestre.

6. Expansão do cluster k8s - adicione dois nós de trabalho

Verifique o comando para ingressar no nó no mestre

[root@k8s-master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.31.180:6443 --token bnokqt.324m0mxrhv7z7je3     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Junte-se ao nó node1

[root@k8s-node-1 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Junte-se ao nó node2

[root@k8s-node-2 ~]# kubeadm join 192.168.31.180:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:7013fd8145494ded4993d3d1d96cde925fe06e14c953841fcdb85fd33a315298

Visualizar informações do nó no mestre

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h4m    v1.20.6
k8s-node-1   NotReady   <none>                 5m4s    v1.20.6
k8s-node-2   NotReady   <none>                 4m55s   v1.20.6

Participe com sucesso!

Você pode transformar as funções de k8s-node-1 e k8s-node-2 em trabalho

[root@k8s-master ~]# kubectl label node k8s-node-1 node-role.kubernetes.io/worker=worke
node/k8s-node-1 labeled
[root@k8s-master ~]# kubectl label node k8s-node-2 node-role.kubernetes.io/worker=worke
node/k8s-node-2 labeled
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   3h10m   v1.20.6
k8s-node-1   NotReady   worker                 10m     v1.20.6
k8s-node-2   NotReady   worker                 10m     v1.20.6

7. Instale componentes de rede Kubernetes-Calico (feito no master)

1. Faça upload do arquivo calico.yaml para seu diretório inicial

[root@k8s-master ~]# ls
anaconda-ks.cfg  calico.yaml  k8simage-1-20-6.tar.gz  kubeadm.yaml

Arquivo 2.yaml para instalar o plug-in de rede calico

[root@k8s-master ~]# kubectl apply -f  calico.yaml

3. Verifique o status do nó

[root@k8s-master ~]# kubectl get node
NAME         STATUS   ROLES                  AGE     VERSION
k8s-master   Ready    control-plane,master   3h16m   v1.20.6
k8s-node-1   Ready    worker                 16m     v1.20.6
k8s-node-2   Ready    worker                 16m     v1.20.6

Insira a descrição da imagem aqui

Verifica-se que o status mudou para pronto. Parabéns, a arquitetura k8s de um mestre e dois escravos foi construída com sucesso!

Acho que você gosta

Origin blog.csdn.net/qq_57629230/article/details/131314823
Recomendado
Clasificación