Diretório de artigos
- Instalação e implantação da arquitetura mestre único k8s
-
- Preparação ambiental
- Declaração Ambiental
- Arquitetura de cluster
- 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.
- 2. Desligue o firewall e o selinux em todos os nós
- 3. Modifique o arquivo /etc/hosts e acesse-os por meio de nomes de host.
- 4. Todos os nós estabelecem canais livres de segredos entre si
- 5. Desligue a partição swap para melhorar o desempenho
- Feche a partição swap permanentemente
- 6. Modifique os parâmetros do kernel da máquina
- 7. Configure a fonte de repositório do Alibaba Cloud
- 8. Instale todos os pacotes de dependência exigidos pelo cluster
- 9. Configure a fonte de repositório Alibaba Cloud necessária para instalar os componentes k8s
- 10. Configure a sincronização de horário
- 2. Instale o serviço docker (opera em todos os três hosts k8s)
- 3. Instale os pacotes de software necessários para inicializar o k8s (operar em todos os três hosts k8s)
- 4. Importe pacotes de imagens offline para acelerar extrações de imagens subsequentes
- 5. Kubeadm inicializa o cluster k8s (feito apenas no mestre)
-
- 1. Gere o arquivo kubeadm.yaml
- 2. Modifique a configuração relevante do arquivo kubeadm.yaml
- 3. Inicialize o k8s com base no arquivo kubeadm.yaml
- 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.
- 6. Expansão do cluster k8s - adicione dois nós de trabalho
- 7. Instale componentes de rede Kubernetes-Calico (feito no master)
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
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
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
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
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
Verifica-se que o status mudou para pronto. Parabéns, a arquitetura k8s de um mestre e dois escravos foi construída com sucesso!