Implantar cluster K8s

1. Duas maneiras de implantar k8s

Atualmente, existem duas maneiras principais de implantar clusters Kubernetes na produção:

kubeadm

Kubeadm é uma ferramenta de implantação K8s que fornece kubeadm init e kubeadm join para implantação rápida de clusters Kubernetes.

pacote binário

Baixe o pacote binário da distribuição do github e implante manualmente cada componente para formar um cluster Kubernetes.

Este experimento usa o kubeadm para criar um cluster.

2. Ambiente de implantação

NOME

IP

OS-IMAGE

VERSÃO

VERSÃO DOCKER

VERSÃO CALICO

mestre

192.168.0.220

el7.x86_64

v1.23.0

23.0.1

v3.9.0

nó01

192.168.0.6

el7.x86_64

v1.23.0

23.0.1

v3.9.0

3. Configuração inicial

  • modificar nome do host

  • Modifique o arquivo hosts

  • desligue o firewall

  • fechar selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config      # 永久
setenforce 0                                            # 临时
  • Feche a partição swap e reinicie

swapoff -a                             # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
  • Sincronize o tempo de cada nó

#安装ntpdate
yum -y install ntpdate
运行命令:crontab -l
添加:0 */1 * * * ntpdate time1.aliyun.com
  • Adicionar filtragem de ponte

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1 
vm.swappiness = 0
EOF
  • Carregar o módulo br_netfilter

modprobe br_netfilter
#查看
lsmod | grep br_netfilter
  • Carregar arquivo de configuração do filtro de ponte

sysctl -p /etc/sysctl.d/k8s.conf
  • abrir ipvs

#安装ipset及ipvsadm
yum -y install ipset ipvsadm
#创建sysconfig/modules文件夹
mkdir -p /etc/sysconfig/modules/
#操作如下命令
cat >>/etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

#授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

4. Implante o cluster Kubernetes

  • Instalar Docker, kubeadm, kubelet [todos os nós]

Instalar janela de encaixe:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docke

Configure o acelerador de download do espelho:

vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

systemctl restart docker
docker info              #查看docker信息,进行确认

Adicionar fonte de software Alibaba Cloud:

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF

Instale kubeadm, kubelet, kubectl:

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet

Defina apenas o kubelet para iniciar (a inicialização subsequente do cluster iniciará o kubelet)

#查看kubelet状态
systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet

Veja as imagens exigidas pelo cluster k8s e baixe-as com antecedência

kubeadm config images list
  • Implantar k8s-master [execução mestre]

kubeadm deploy

kubeadm init \
  --apiserver-advertise-address=192.168.0.220 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

Observação: --apiserver-advertise-address Endereço de anúncio de cluster

--image-repository Como o endereço de imagem pull padrão k8s.gcr.io não pode ser acessado na China, especifique o endereço do repositório de imagens Alibaba Cloud aqui

--kubernetes-version versão K8s, consistente com a instalada acima

--service-cidr rede virtual interna do cluster, entrada de acesso unificado do pod

--pod-network-cidr Rede de pods, consistente com o componente de rede CNI yaml implantado abaixo

Copie a saída do comando kubeadm join acima

kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
    --discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4

Copie o arquivo de autenticação k8s

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

Veja os nós de trabalho:

kubectl get nodes

Observação: Como o plug-in de rede não foi implantado, ele ainda não está pronto. NotReady, continue a operar.

  • Instale o plug-in de rede Calico [execução principal]

Baixe o arquivo calico.yaml do plugin de rede e execute:

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"     #与前面kubeadm init的 --pod-network-cidr指定的一样
- name: IP_AUTODETECTION_METHOD
  value: "interface=eth0"   #IP 220那个网卡

kubectl apply -f calico.yaml

Observação:

问题:alico/node is not ready: BIRD is not ready: BGP not Established with 192.168.0.220

O motivo é que o nó mestre tem mais placas de rede e o calico escolhe a placa de rede errada.

Modifique calico.yaml e especifique o nome correto da placa de rede.

O endereço ifconfig 220 está localizado em eth0

aumento no aumento do env:

– nome: IP_AUTODETECTION_METHOD

valor: "interface=eth0"

kubectl get pods -n kube-system

Depois que os Calico Pods estiverem em execução, os nós estarão prontos

kubectl describe  pods calico-node-dghzw -n kube-system

Lembre-se: Adicione no arquivo daemon.json do docker: "exec-opts": ["native.cgroupdriver=systemd"]

Verifique se a instalação do nó mestre está normal

#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示集群安装成功)
kubectl get pod -n kube-system
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system 或 kubectl logs 容器名 -n kube-system
  • Configurar o nó nó de k8s [operação nó nó]

Para adicionar um novo nó ao cluster, execute a saída do comando kubeadm join em kubeadm init

kubeadm join 192.168.0.220:6443 --token v4cfxg.nopu749nz57alzwo \
    --discovery-token-ca-cert-hash sha256:56ab22922d19aa6e77b7b046fa82ad1b8a3ed90323ab9e5eacae1008b2a9deb4

O token padrão é válido por 24 horas e, quando expira, o token não está mais disponível. Neste momento, o token precisa ser recriado, o que pode ser gerado diretamente usando o comando:

criação de token kubeadm --print-join-command

5. Implantar painel

Dashboard é uma IU oficial que pode ser usada para gerenciamento básico dos recursos do K8s.

Endereço de download do YAML:

https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

Por padrão, o Dashboard só pode ser acessado dentro do cluster. Modifique o tipo Service to NodePort e exponha-o para fora:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001    --增加
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort         --增加

implemento:

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

Endereço de acesso: https://NodeIP:30001

Um token é necessário, para o qual uma conta de serviço precisa ser criada e vinculada à função de cluster padrão do administrador do cluster:

 # 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

Use o token de saída para fazer login no Dashboard.

6. Verifique se todo o cluster foi instalado com êxito [mestre]

#查看集群节点以及节点状态是否就绪,Ready为就绪
kubectl get node
#查看每个容器运行状态(仅且显示STATUS:Running 、 READY:1/1 状态,表示容器正常运行,当所有容器正常运行时节点转为就绪状态)
kubectl get pod -n kube-system -owide
#通过如下命令定位问题(一般情况为镜像拉取失败)
kubectl describe pod 容器名 -n kube-system
或 kubectl logs 容器名 -n kube-system

Acho que você gosta

Origin blog.csdn.net/victory0508/article/details/129027047
Recomendado
Clasificación